TL; DR:
В немного сложном сценарии маршрутизации запросы / сообщения ICMP и DNS работают, как и ожидалось, от хоста к Интернету через встроенный маршрутизатор, а веб-браузеры (так что я предполагаю, что TCP и / или HTTP) - нет. Как я могу отладить проблему с таблицами маршрутизации RPDM+? Кажется, что когда я добавляю маршрутизацию по умолчанию для основной таблицы маршрутизатора, некоторые правила RPDM игнорируются, и я не понимаю поведение, которое вижу.
Полное объяснение:
У меня есть встроенное устройство Linux, которое одновременно подключено к двум ISP, и я предоставляю 2 хост-устройствам (через eth0, eth1) эксклюзивный доступ к каждому провайдеру. Это означает, что хост 1 будет использовать исключительно соединение 1 с провайдером, а хост 2 будет использовать только соединение 2 с провайдером. В то же время я хочу, чтобы встроенное устройство делило соединение с одним из провайдеров с хостом (скажем, через соединение провайдера 2). - eth3).
Я использую RPDM, чтобы отделить обработку для каждого устройства:
32762: from all iif eth3 lookup 102
32763: from all iif eth2 lookup 101
32764: from 192.168.1.102 lookup 102
32765: from 192.168.1.101 lookup 101
где таблицы маршрутизации настроены, например, как:
default dev eth2 scope link
123.123.123.123 dev eth2 scope link
124.124.124.124 dev eth3 scope link
127.0.0.0/8 dev lo scope link
192.168.1.0/24 dev bridge0 scope link
Я использую маскарад на обоих соединениях провайдера:
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE
Пока на устройстве не настроен маршрут по умолчанию и на каждом хосте правильно настроен DNS (т. Е. DNS-адреса интернет-провайдеров) - все работает, как и ожидалось, без доступа к Интернету для самого устройства.
Когда я добавляю маршрут по умолчанию в основную таблицу маршрутизации устройства (допустим, что это для eth3), устройство получает доступ в Интернет, но хост 1 (который должен использовать eth2) теряет соединение, и некоторые пакеты теряются где-то на пути. ICMP с хоста 1 работает нормально, как и DNS. Wireshark на хосте 1 показывает, что существует много ретрансляций TCP. tcpdump на устройстве показывает, что некоторые пакеты с хоста 1 попадают на eth 3.
Как я могу понять, почему это не работает? похоже, что маршрут по умолчанию, который я добавляю, имеет приоритет над правилами из RPDM, чего не должно быть ..
настроить вывод здесь.
Разъяснение:
Я знаком с iptables/TRACE target. Я добавил трассировку для каждого пакета, поступающего с моста, но не увидел ни одного, выходящего на eth3 - только на eth2, в отличие от журнала tcpdump. возможно я ищу не ту вещь?
+ +
| |
| |
| |
| |
+---------------------------------------------------------+
|---------------------------------------------------------|
|| |eth2 (ISP connection)| |eth3 (ISP connetion 2)||
|| |IP 123.123.123.123 | |IP 124.124.124.124 ||
|| +---------------------+ +-----------------------|
|| ||
|| "Embedded Device" ||
|| +--------+------------+ ||
|| +-------+bridge0 + DHCP server+-----+ ||
|| | |IP 192.168.1.1 | | ||
|| | +---------------------+ | ||
|| | | ||
|--------+------------+ +------+------------|
|| eth0 | |eth1 ||
|| (local connection)| |(local connection)||
|| IP 192.168.10.1 | |IP 192.168.10.2 ||
|---------------------------------------------------------|
+---------------------------------------------------------+
| |
| |
| |
+--------------------+ +--------------------+
|--------------------| |--------------------|
|| host 1 || || host 2 ||
|| IP 192.168.1.100|| || IP 192.168.1.101 ||
|--------------------| |--------------------|
+--------------------+ +--------------------+