У меня есть несколько интерфейсов Ethernet на одной машине, все в одной подсети. Обычно они настраиваются для работы на отдельных виртуальных машинах, и я понимаю ограничения, накладываемые Linux, как описано Вот, но мне было поручено попробовать заставить его работать на одном хосте. Мне удалось настроить их так, чтобы входящий и исходящий трафик на хосте направлялся через правильное устройство. Я не могу общаться с одного устройства на другое. Вот что я сделал до сих пор для настройки устройств:
Установите статические IP-адреса:
ip addr add 192.168.1.124 dev eth0
ip addr add 192.168.1.125 dev eth1
ip addr add 192.168.1.126 dev eth2
...
Включите фильтрацию arp:
sysctl -w net.ipv4.conf.all.arp_filter=1
Реализуйте маршрутизацию на основе источника следующим образом:
Добавьте следующее в /etc/iproute2/rt_tables
1 eth0
2 eth1
3 eth2
...
Добавить маршрут по умолчанию в таблицу
ip route add default via 192.168.1.11 table eth0
ip route add default via 192.168.1.11 table eth1
ip route add default via 192.168.1.11 table eth2
...
Добавить маршрут подсети через определенное устройство на основе src IP
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth0
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth1
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth2
...
добавить правило
ip rule add from 192.168.1.124 table eth0
ip rule add from 192.168.1.124 table eth1
ip rule add from 192.168.1.124 table eth2
...
Аппаратное обеспечение устройства заботится о фильтрации входящих пакетов на основе IP-адреса назначения.
Как я уже сказал, на этом этапе я могу подтвердить с помощью tcpdump, что входящий и исходящий трафик хоста направляется через правильное устройство. Исходящая многоадресная рассылка идет на правильное устройство, пока привязан IP-адрес src. Многоадресные пакеты, отправленные с одного устройства, принимаются всеми остальными. Что я не могу сделать, так это пинговать с одного устройства на другое. Используя tcpdump, я вижу исходящие ARP-запросы на отправляющем устройстве и входящие ARP-запросы на принимающем устройстве, но ответа не происходит. Если я добавляю запись arp напрямую, я также вижу запрос ping на обоих устройствах, но ответа не происходит.
ОБНОВИТЬ:
Данные могут передаваться между IP-адресами, назначенными интерфейсам, но сетевой стек не отправляет их через устройства. ICMP и многоадресные пакеты проходят через устройства, но ответы не отправляются.
Есть ли способ:
A) Принудительно выводить пакеты из устройства даже при отправке на тот же хост?
Б) Заставить хост отвечать на запросы ICMP от того же хоста?