У меня есть система Linux с 3 сетевыми адаптерами, и все 3 находятся в одной подсети. Я настроил маршрутизацию политики в системе с правилами IP и маршрутами IP с использованием 3 таблиц. Это IP-адреса трех сетевых адаптеров.
ETH0: 192.168.1.10
ETH1: 192.168.1.11
ETH2: 192.168.1.12
Я заметил одну вещь: если кабели к ETH1 & ETH2 отключены, пинг на их IP-адреса с ПК, подключенного к ETH0 через коммутатор, иногда может быть успешным.
Я понимаю, что это является следствием наличия IP-адресов в одной подсети (хотя, разве нельзя этого избежать, когда я использую правила IP?), Но я не понимаю, как коммутатор может успешно маршрутизировать пакеты, предназначенные для IP, принадлежащего ETH1 или ETH2, на IP, предназначенный для ETH0? Другими словами, как пакет, предназначенный для 192.169.1.12, может быть отправлен коммутатором на 192.168.1.10? Разве в его внутренней таблице маршрутизации нет записи только для 192.168.1.10, а не для двух других IP-адресов, потому что их кабели отключены?
Речь идет не только о маршрутизации (уровень 3), но и о ARP (связывает уровни 2 и 3). Linux обычно отвечает на все запросы ARP одним и тем же MAC, это означает, что одноранговые узлы будут иметь только один MAC-адрес в своем кэше ARP для 3 IP-адресов и достигнут только одной карты. Возможно, что иногда выбранный MAC будет изменяться, вызывая всевозможные проблемы.
Есть доступная функция для предотвращения этого. Это параметр arp_filter , но он также требует нескольких правил маршрутизации (для каждого IP и / или интерфейса). Использование только arp_filter
или только таблиц маршрутизации может дать худшие результаты, чем их полное отсутствие.Оба нужны вместе. Поскольку OP не показывал, какие политики маршрутизации использовались, я поместил ниже полное решение, учитывая, что не было никаких специальных политик маршрутизации. Значения для таблиц маршрутизации (100, 101, 102) были выбраны случайным образом.
LAN
попробовать перед:
ip route получить 192.168.1.1 из 192.168.1.10
ip route получить 192.168.1.1 из 192.168.1.11
ip route получить 192.168.1.1 из 192.168.1.12
Обратите внимание на результаты: все используют одну и ту же карту (это не значит, что в любом случае так происходит всегда).
На одноранговом сервере в той же локальной сети, как можно быстрее:
ping -c1 192.168.1.10 &
пинг -c1 192.168.1.11 и
пинг -c1 192.168.1.12
ip neigh показать на 192.168.1.10
ip neigh показать на 192.168.1.11
ip neigh показать на 192.168.1.12
наверняка все 3 IP-адреса разрешаются на один и тот же MAC-адрес, поэтому карта: единственная карта, которая будет получать трафик от этого узла.
измените настройки (Предупреждение: риск потери подключения):
echo 1> / процесс / система / сеть / ipv4 / конф / eth0 / arp_filter
эхо 1> / proc / sys / net / ipv4 / conf / eth1 / arp_filter
эхо 1> / proc / sys / net / ipv4 / conf / eth2 / arp_filter
ip route добавить 192.168.1.0/24 dev eth0 таблица 100
ip route добавить 192.168.1.0/24 dev eth1 таблица 101
ip route добавить 192.168.1.0/24 dev eth2 таблица 102
ip правило добавить из поиска 192.168.1.10 100
ip правило добавить из поиска 192.168.1.11 101
ip правило добавить из поиска 192.168.1.12 102
очищает кэши ARP одноранговых узлов (запросы DAD дублируются как GARP ) для ускорения восстановления, если это необходимо. Не требуется во время загрузки, так как таких кешей не было. Используйте arping iputils, а не автономный инструмент arping (RHEL: iputils
, Debian: iputils-arping
, а не пакет arping
), поскольку синтаксис отличается.
arping -c5 -s 192.168.1.10 -D 192.168.1.10 -I eth0 &
arping -c5 -s 192.168.1.11 -D 192.168.1.11 -I eth1 &
arping -c5 -s 192.168.1.12 -D 192.168.1.12 -I eth2 &
повторите предыдущие проверки и сравните: все должно быть, как ожидалось, а таблицы соседей на одноранговых серверах должны показывать один другой MAC-адрес для каждого IP-адреса, соответствующий MAC-адресу правильной карты.
WAN
Маршрут по умолчанию будет по-прежнему использовать "default" настройки из таблицы main
, скорее всего, с использованием eth0. Этот маршрут необходимо продублировать в каждой таблице. Предполагая, что маршрутизатор по умолчанию - 192.168.1.1 (иначе, отрегулируйте), это будет:
ip route добавить значение по умолчанию через 192.168.1.1 dev eth0 table 100
ip route добавить по умолчанию через 192.168.1.1 dev eth1 table 101
ip route добавить по умолчанию через 192.168.1.1 dev eth2 table 102
Теперь, если кабель отключен, произойдет ожидаемый результат: IP-адрес, установленный на соответствующей сетевой карте, станет недоступным в 100% случаев.