Linux: работа с сетью (маршрутизация, arp, performance, etc)

Общее
  • Общая концепция – “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).

 

Маршрутизация (routing)

Смотрим, включена ли маршрутизация на Linux.

# sysctl -a | grep ip_f
net.ipv4.ip_forward = 1

# sysctl -w 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

# 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

 

Тюнинг параметров сетевого ядра

Отключение отправки ICMP redirects.

echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

Отправка 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 (алгоритмы)

подробнее в 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.

 

Leave a Reply