- Работа с интерфейсами – отдельная статья
- Работа с туннелями – отдельная статья
- COMPARING NET-TOOLS VS. IPROUTE PACKAGE COMMANDS
Общее
- Общая концепция – “net-tools deprecated, use iproute2” из-за ряда проблем с net-tools. Из крутого iproute2 позволяет с помощью netns делать в Linux полноценные vrf.
ifconfig sucks
On Linux, ifconfig is an archaic network interface configuration command. The implementation commonly encountered, "net-tools", has a number of problems which make it more and more unsuitable.
ifconfig = ip a (address)
route = ip r (route)
arp = ip n (neighbour)
- При этом никто не мешает его поставить обратно 🙂 И многие так и делают (слайды Juniper).
apt-get install net-tools
Маршрутизация (routing)
Смотрим, включена ли маршрутизация на Linux. При необходимости включаем до перезагрузки или постоянно.
# sysctl -a | grep ip_f
net.ipv4.ip_forward = 1
# sysctl -w net.ipv4.ip_forward=1 # до перезагрузки
# vi /etc/sysctl.conf
net.ipv4.ip_forward=1 # постоянно, добавляем строку в файл (снимаем коммент)
Смотрим маршруты
netstat -rn
ip route
ip route add/del или route add/del – добавляем/удаляем маршрут в оперативной памяти. После перезагрузки вернется как было.
# ip route
sudo ip route add default via 172.16.0.1
sudo ip route del default via 172.16.0.1
sudo ip route add 172.1.2.0/24 via 172.1.4.1
# via interface
route add -net 192.168.0.0/16 dev eth1
# route
sudo route add -net 172.16.0.0 netmask 255.255.255.0 gw 172.17.0.1
sudo route add -net 172.16.0.0 netmask 255.255.255.0 dev eth1
sudo route add -net 172.19.0.4 netmask 255.255.255.255 gw 172.16.1.131
sudo route del -net 0.0.0.0 netmask 0.0.0.0
sudo route del -net 11.0.0.0 netmask 255.0.0.0
Если пишет про неправильный gateway при прописывании маршрута через интерфейс – значит на хосте отсутствует интерфейс, который находится в одном broadcast domain с прописываемым gateway.
$ sudo ip route add 172.18.0.5/32 via 172.17.115.251 dev ens6
Error: Nexthop has invalid gateway.
Трафик может не маршрутизироваться устройством не только из-за выключенного роутинга (net.ipv4.ip_forward), но так же если не созданы по какой-то причине маршруты в локальные подсети.
# ip r
default via 172.31.1.1 dev enp7s0
172.31.1.0/24 dev enp7s0 proto kernel scope link src 172.31.1.1
# ip a
7: enp5s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 172.17.0.2/32 scope global enp5s0f1
4: enp5s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 172.0.0.2/32 scope global enp5s0f0
# sudo ip route add 172.17.0.0/24 dev enp5s0f1
# sudo ip route add 172.0.0.0/24 dev enp5s0f0
# ip r
default via 172.31.1.1 dev enp7s0
172.0.0.0/24 dev enp5s0f0 scope link
172.17.0.0/24 dev enp5s0f1 scope link
172.31.1.0/24 dev enp7s0 proto kernel scope link src 172.31.1.1
Для статических (перманентных) маршрутов можно прописать их в файле /etc/network/interfaces (подробнее тут).
post-up ip route add default via 172.17.0.1
post-up ip route add 11.0.0.0/16 via 172.55.1.1
ARP
ip n – просмотр arp
ip -s -s neigh flush all – чистка arp, удаление всех записей
arp -d 192.168.1.1 – Удаление конкретной записи вариант 1
ip neigh del 172.0.1.2 dev eth1 – Удаление конкретной записи вариант 2
прописываем static arp, три разных варианта
arp -s 172.0.0.1 b7:b7:b7:b7:b7:b7
ip neigh add 172.0.0.1 lladdr b7:b7:b7:b7:b7:b7 dev ens6f0
ifconfig en0 ether b7:b7:b7:b7:b7:b7 # вариант с использованием ifconfig
ARP утилита показывает намного больше чем просто ARP таблицу: есть таблица коммутации с портами/MAC.
~$ arp
Address HWtype HWaddress Flags Mask Iface
broadcast.msk.hoztnode. ether 00:1e:67:06:a1:10 C eth0
gw.msk.hoztnode.net ether 28:8a:1c:ea:ff:f0 C eth0
~$ arp
Address HWtype HWaddress Flags Mask Iface
192.168.149.3 ether 00:1c:7f:66:dc:9f C eth1
10.10.10.10 ether 00:50:56:8f:11:86 C eth0
10.10.11.10 ether 00:50:56:8f:28:4a C eth0
10.10.12.10 ether 00:00:5e:00:01:01 C eth0
192.168.149.2 ether 00:1c:7f:66:dc:9f C eth1
192.168.149.1 ether 00:1c:7f:67:a8:47 C eth1
sw1 ether 68:bd:ab:32:47:80 C eth0
sw2 ether c4:7d:4f:bd:0a:80 C eth0
ip route lookup (get)
По DST IP получаем next hop, interface и local IPIF.
# ip route get 1.1.1.1
1.1.1.1 via 172.16.1.1 dev enp7s0 src 172.16.1.29 uid 0
cache
# ip route get 8.8.8.8
8.8.8.8 via 172.16.1.1 dev enp7s0 src 172.16.1.29 uid 0
cache
Тюнинг параметров сетевого ядра
Отключение отправки ICMP redirects – напр. в схеме router on a stick не перенаправляем клиента на реальный шлюз сети, если нам нужно перехватывать/изменять трафик на промежуточном маршрутизаторе сети (между клиентами и реальным шлюзом). Как альтернатива можно использовать sysctl для временных или постоянных изменений параметров – пример см. поиском по ip_forward.
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
# sysctl
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
Отправка TCP keepalive.
# echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes
Настройка TCP (алгоритмы)
Оптимизация performance
Оптимизация Linux для увеличения производительности маршрутизации на базе linux-kernel (без использования dpdk/snabb) позволяет достичь производительности line rate 40gbps (в сумме у DUT 4х10G; тестили spirent testcenter по RFC 2544) совокупно со сложным функционалом на борту за небольшой прайс на базе серверного решения:
Что
- More than a year in operaHon in the University Campus Network – 40 Gb/s
- Full BGP
- Multiple routing tables
- CGN
- Firewall
- Performance improvement 80 Gb/s
- Traffic shaping
- DDoS protection
- Price < 10 000 EUR
Как
- распределение очередей по прерываниям
- увеличение приёмных буферов
- директивное выделение ядер на конкретные процессы
- Disable SELinux in /etc/sysconfig/selinux
- Disable rpfilter on all forwarding interfaces
- Set performance scaling governor for all CPUs
- Enable disabled offloads
- Set the maximum number of TX and RX queues
- Disable irqbalance daemon and assign each IRQ exclusively
- Enable Hyper-Threading
- Disable Nepilter
- Disable RX Flow Control
Пример распределение stream TRex по ядрам. Позволяет избежать out of ordering.
Demonstrate how to assign a stream to a specific core. Core pinning was developed to avoid possible out of order for packets of the same stream.
The following example demonstrates 2 continuous streams S0 and S1 which are pinned to cores 0 and 1 respectively.