Работа с сетью в Linux

Материал из sysadm
Перейти к навигации Перейти к поиску

Параметры

Проверка порта tcp без использования утилит

timeout 1 bash -c '(echo > /dev/tcp/127.0.0.1/22) >/dev/null 2>&1' && echo up || echo down

Управление параметрами скорость, дуплекс

IF=<interface_name>

# вывести текущие параметры speed, duplex, link status
ethtool $IF

# установить автоматическое определение параметров (по умолчанию)
ethtool -s $IF autoneg on

# задать параметры вручную
ethtool -s $IF speed 100 duplex half autoneg off

# Если возникает ошибка
#   Cannot set new settings: Operation not supported
# то проблема в драйвере или сетевой карте, ищите карту или драйвер, которые поддерживают изменение этих параметров

RHEL 7,8,9


# изменение конфигурации в интерактивном режиме
nmtui

# nmcli - утилита управления NetworkManager-ом в командном режиме

# перезагрузка конфигурации сети (конфигурация интерфейсов при этом не обновляется)
systemctl restart NetworkManager

# выключение и включение сети (перегружается конфигурация интерфейсов)
nmcli networking off; nmcli networking on

RHEL 6


# каталог скриптов конфигурации сети
cd /etc/sysconfig/network-scripts

Проблема при смене адаптера

# ошибка: Device eth0 does not seem to be present

# 1-ый способ решения
rm /etc/udev/rules.d/70-persistent-net.rules
reboot now
# при старте системы, сгенерируется новый файл правил, интерфейс привяжется к новому сетевому адаптеру

# 2-ой способ решения (без перезагрузки)
# определение MAC адреса адаптера
ip link show

# ручная привязка к правильному MAC через файл конфигурации интерфейса
vi /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=MAC ADDRESS

# перезапуск интерфейса
ifdown eth0; ifup eth0

Маршрутизация, route policy

Для работы route policy необходимо, чтобы ядро Linux было собрано с соответствующим опциями.

# список таблиц маршрутизации
cat /etc/iproute2/rt_tables

# вывод заданной таблицы маршрутизации
ip route show table <имя_или_номр_таблицы_маршрутизации>

# пример создания новой таблицы маршрутизации с номером 120
ip route add default via 10.1.0.1 table 120

# вывод списка правил маршрутизации
ip rule

# пример добавления правила, направляющего трафик в таблицу с номером 120
ip rule add from 192.168.1.20 table 120


Проблема при подключении двух интерфейсов к одной подсети

Когда два интерфейса имеют разные IP и находятся в одной подсети, то происходит следующее

  • на все интерфейсы прилетает arp запрос, я такой то ip, кто имеет такой-то ip?
  • хосту нужно сформировать arp ответ на ip спрашивающего
  • выполняется маршрутизация на ip спрашивающего и выбирается интерфейс по таблице маршрутизации
  • arp ответ отправляется на выбранный интерфейс
  • если разрешено отправлять arp ответы с любого интерфейса (по умолчанию), то ответ уходит с выбранного интерфейса с его MAC адресом
    • получаем ситуацию, когда все IP по факту работают через интерфес имеющий минимальный вес в локальной таблице маршрутизации и все ответы уходят с одного MAC адреса
  • если разрешено отправлять arp ответы только с интерфейса к которому привязан запрашиваемый ip адрес, то arp ответ блокируется, т.к. маршрутизация выбрала не тот интерфейс, соответственно L3 для данного интерфейса не работает

Решения пока не нашел, нужно разобраться с параметрами для arp



# запрет arp ответа с любого интерфейса (по умолчанию 0)
sysctl -w net.ipv4.conf.all.arp_ignore=2

# есть параметры управляющие arp ответами
# возможно приведенная ниже конфигурация будет работать
# нужно разобраться подробнее и понять логику этих параметров
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.arp_filter=0
net.ipv4.conf.eth0.arp_filter=1
net.ipv4.conf.eth1.arp_filter=1
net.ipv4.conf.eth2.arp_filter=1

Мониторинг сетевой нагрузки на интерфейсах

sar -n DEV 3 10