👋
Приветствую в мире цифровой безопасности!На сервере две сетевые карты, у каждой свой IP. Но в ARP-таблице соседнего устройства адрес первой карты вдруг оказывается привязан к MAC второй. Проверяешь настройки, а там всё вроде правильно. Откуда взялся чужой MAC? У Linux есть такая особенность, называется ARP Flux.
⏺В чём дело? Linux по умолчанию считает IP-адреса принадлежащими всему хосту, а не отдельной сетевой карте. Поэтому, когда оба интерфейса находятся в одной подсети, ядро может ответить на ARP-запрос через интерфейс, которому этот IP не назначен.
⏺В результате соседние устройства получают неожиданные соответствия IP и MAC. Особенно неприятно, когда из-за этого начинает скакать связность.
⏺Проверим, как настроен ARP:
sysctl net.ipv4.conf.all.arp_ignore
sysctl net.ipv4.conf.all.arp_announce
sysctl net.ipv4.conf.all.arp_filterЕсли
arp_ignore=0, ядро может отвечать на запросы о локальных IP, даже когда они назначены другому интерфейсу.⏺Теперь посмотрим, что происходит в сети. На сервере запускаем захват ARP:
sudo tcpdump -eni eth0 arp
sudo tcpdump -eni eth1 arpА с соседней машины отправляем запрос к одному из IP сервера:
sudo arping -I eth0 192.168.1.10Сравниваем ответы и MAC-адреса. Если один IP отвечает через разные интерфейсы, причину уже легче искать.
⏺Как привести ARP в порядок? Для обычного сервера с двумя интерфейсами в одной подсети часто хватает:
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
sudo sysctl -w net.ipv4.conf.all.arp_announce=2arp_ignore=1 заставляет отвечать только за IP принимающего интерфейса, а arp_announce=2 помогает выбирать подходящий исходный адрес для ARP-запросов. Только не применяйте настройки вслепую на серверах с VRRP, bonding или сложной маршрутизацией. Там могут понадобиться другие параметры, включая arp_filter и policy routing.⏺Кстати, ARP Flux легко спутать с конфликтом IP или проблемой на коммутаторе. Поэтому, если в соседской ARP-таблице постоянно меняется MAC, сначала проверьте, не отвечает ли сам Linux сразу с нескольких интерфейсов.
🤖Бесплатный ChatGPT