TL; DR:
Dans un scénario un peu complexe de routage, les requêtes / messages ICMP et DNS fonctionnent comme prévu d'un hôte à Internet via un routeur intégré, mais les navigateurs Web (donc j'imagine que TCP et / ou HTTP) ne fonctionnent pas. Comment puis-je déboguer le problème avec les tables de routage RPDM +? il semble que lorsque j'ajoute un routage par défaut pour la table principale du routeur, certaines règles RPDM sont ignorées et je ne comprends pas le comportement que je constate.
Explication complète:
J'ai un périphérique Linux intégré qui est connecté simultanément à 2 fournisseurs de services Internet et fournit 2 périphériques hôtes (via eth0, eth1) à un accès exclusif à chaque fournisseur de services Internet. Cela signifie que l’hôte 1 utilisera exclusivement la connexion 1 du fournisseur de services Internet et que l’hôte 2 utilisera exclusivement la connexion 2 du fournisseur de services Internet. En même temps, je souhaite que le périphérique intégré partage une connexion avec l’un des fournisseurs de services Internet avec un hôte (disons, via la connexion 2 du fournisseur de services Internet). - eth3).
J'utilise RPDM pour séparer la gestion de chaque périphérique:
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
où les tables de routage sont configurées comme par exemple:
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
J'utilise masquerade sur les deux connexions ISP:
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE
Tant que le périphérique n'a pas de route par défaut configurée et que les hôtes ont chacun le DNS configuré correctement (c'est-à-dire les adresses DNS des FAI), tout fonctionne comme prévu, sans accès Internet au périphérique lui-même.
Lorsque j'ajoute une route par défaut à la table de routage principale du périphérique (supposons que c'est le cas pour eth3), le périphérique obtient un accès à Internet, mais l'hôte 1 (qui doit utiliser eth2) perd la connectivité et certains paquets sont perdus quelque part. ICMP de l'hôte 1 fonctionne correctement, ainsi que DNS. Wireshark sur l'hôte 1 indique qu'il existe de nombreuses retransmissions TCP. tcpdump sur le périphérique montre que certains paquets de l'hôte 1 se retrouvent sur eth 3.
Comment puis-je comprendre pourquoi cela ne fonctionne pas? il semble que la route par défaut que j’ajoute prime sur les règles du RPDM, ce qui ne devrait pas arriver.
sortie de configuration ici .
Clarification:
Je connais bien iptables / TRACE target. J'ai ajouté une trace pour chaque paquet entrant depuis le pont, mais je n'en ai vu aucune sortir vers eth3 - uniquement vers eth2, par opposition au journal tcpdump. peut-être que je cherche la mauvaise chose?
+ +
| |
| |
| |
| |
+---------------------------------------------------------+
|---------------------------------------------------------|
|| |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 ||
|--------------------| |--------------------|
+--------------------+ +--------------------+