Déboguer la configuration RPDM / Routing avec ICMP + DNS nut no TCP actif

2

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 ||
|--------------------|              |--------------------|
+--------------------+              +--------------------+
sagive
la source

Réponses:

0

Juste pour les futurs utilisateurs à venir:

Le problème concernait un accélérateur de paquets utilisé dans le périphérique intégré qui remplace les tables de routage Linux (nommé SFE, fourni par qualcomm). il a simplement ignoré certaines des règles les plus complexes.

son source ouverte et un correctif a été fourni.

bonne chance!

sagive
la source