ARP flux on Linux with multiple interfaces

Возмем линукс хост где подняты несколько отдельных сетевых интерфейсов, не объединенных в транк, и на этих интерфейсах настроены разные адреса из одной или разных подсетей, к примеру, контейнер с гостевыми машинами openvz, или NAS с несколькими iSCSI интерфейсами с привязанными target. В такой конфигурации может возникнуть ситуация когда хост будет отвечать на арп-запросы с интерфейса которому не принадлежит запрашиваемый ip-адрес. Это может привести в распределению трафика по интерфейсам совсем не так этого ожидаешь от хоста. Наример вот так:

Разные интерфейсы с разными адресами из разных подсетей

а входящий трафик на хост ходит через один интерфес на оба адеса

Можно заметить что destination mac address для обоих ip-адресов одинаковый и принадлежит только одному интерфейсу. Это получается из-за т.н. arp flux – когда хост отвечает на arp запросы к собственным адресам со всех интерфейсов.

Управлять этим поведением можно с помощью нескольких переменных ядра.
Переменная
net.ipv4.conf.$dev.arp_filter выставляется либо для каждого интерфейса отдельно либо для всех одновременно. Значение “0” по умолчанию позволяет посылать arp response на ip-адреса других интерфейсов. Значение “1” позволяет посылать arp response только с того интерфейса куда указывает route-lookup на запрашиваемый адрес.

Выставив переменную sysctl -w net.ipv4.conf.all.arp_filter=1 можно решить вышеприведенную проблему когда адреса из разных подсетей привзаны к разным интерфейсам.
Однако если ситуация иная и к разным интерфейсам привязаны адреса из одной подсети arp_filter не поможет и нужно использовать другое решение – использовать переменные arp_announce и arp_ignore

Например arp_ignore
0 – по умолчанию отвечать на запросы к любому локальному адресу на любом интерфейсе
1 – отвечать только на запрос локального адреса настроенного на интерфесе на котором был получен запрос
2 – тоже что и “1” плюс локальный адрес и адрес отправителя принадлежат одной подсети.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">