OVH Cloud OVH Cloud

Configuration routeur (suite)

4 réponses
Avatar
JKB
Bonsoir à tous,

Encore une petite question, mais le problème est différent...

J'ai toujours mon UltraSparc avec ses trois interfaces réseau :
eth0, eth1 et eth2 et ses deux modems speedstream 5200.

eth0 : 192.168.254.1 ----- Modem 192.168.254.254 ----- IP publique 1
eth1 : 192.168.0.128 ----- LAN
eth2 : 192.168.1.1 ----- Modem 192.168.1.254 ----- IP publique 2

Ma table de routage différencie les interfaces de sortie en fonction
des ports utilisés.

Je fait suivre en entrée TCP/IP2:3000 vers 192.168.0.130:3000
Un tcpdump sur eth2 donne quelque chose du genre :
source:xxxxx > 192.168.1.1:3000

ce qui est logique. La translation de port se faisant par mon
routeur, elle n'apparaît pas ici. Or 192.168.0.130 répond et je vois
toujours dans le tcpdump sur eth2 :
192.168.0.130:3000 > source:xxxxx

qui ne passe pas le speedstream. J'ai essayé de jouer avec les
masques réseau sans grand succès. Je pense que le modem filtre
quelque chose, mais même en désactivant totalement le pare-feu et
les protections diverses, pas moyen de faire passer le truc.

J'ai regardé du côté d'iptables pour voir s'il était possible de
truander les adresses IP en sortie au niveau de eth2, mais je n'ai
pas trouvé de règle évidente...

Une idée ?

Cordialement,

JKB

4 réponses

Avatar
Pascal
Je fait suivre en entrée TCP/IP2:3000 vers 192.168.0.130:3000
Un tcpdump sur eth2 donne quelque chose du genre :
source:xxxxx > 192.168.1.1:3000

ce qui est logique. La translation de port se faisant par mon
routeur, elle n'apparaît pas ici. Or 192.168.0.130 répond et je vois
toujours dans le tcpdump sur eth2 :
192.168.0.130:3000 > source:xxxxx

qui ne passe pas le speedstream. J'ai essayé de jouer avec les
masques réseau sans grand succès. Je pense que le modem filtre
quelque chose, mais même en désactivant totalement le pare-feu et
les protections diverses, pas moyen de faire passer le truc.


De toute façon agir sur le modem-routeur ne marchera pas.

Soit il a l'équivalent de rp_filter=1 et pas de route vers
192.168.0.0/24 (il n'en a normalement pas besoin), et donc il jette le
paquet.

Soit il laisse passer le paquet mais il ne peut le reconnaître comme
appartenant à la connexion ouverte par le paquet entrant (pas la bonne
adresse source) et il ne peut le dé-nater correctement. Ce paquet va
être naté+paté en créant une nouvelle connexion sortante et le client
distant ne va pas le reconnaître non plus (pas le bon port source). Echec.

Le seul endroit pour résoudre ça est clairement ta passerelle
tricéphale. Elle est la seule à pouvoir dé-nater correctement les
paquets de réponse du serveur.

Hypothèse : ça pourrait être un effet de bord de la cible ROUTE. As-tu
essayé avec l'option --continue ?

--
Boîte à spam :

Avatar
JKB
Le 22-02-2005, à propos de
Re: Configuration routeur (suite),
écrivait dans fr.comp.os.linux.configuration :
Je fait suivre en entrée TCP/IP2:3000 vers 192.168.0.130:3000
Un tcpdump sur eth2 donne quelque chose du genre :
source:xxxxx > 192.168.1.1:3000

ce qui est logique. La translation de port se faisant par mon
routeur, elle n'apparaît pas ici. Or 192.168.0.130 répond et je vois
toujours dans le tcpdump sur eth2 :
192.168.0.130:3000 > source:xxxxx

qui ne passe pas le speedstream. J'ai essayé de jouer avec les
masques réseau sans grand succès. Je pense que le modem filtre
quelque chose, mais même en désactivant totalement le pare-feu et
les protections diverses, pas moyen de faire passer le truc.


De toute façon agir sur le modem-routeur ne marchera pas.

Soit il a l'équivalent de rp_filter=1 et pas de route vers
192.168.0.0/24 (il n'en a normalement pas besoin), et donc il jette le
paquet.

Soit il laisse passer le paquet mais il ne peut le reconnaître comme
appartenant à la connexion ouverte par le paquet entrant (pas la bonne
adresse source) et il ne peut le dé-nater correctement. Ce paquet va
être naté+paté en créant une nouvelle connexion sortante et le client
distant ne va pas le reconnaître non plus (pas le bon port source). Echec.

Le seul endroit pour résoudre ça est clairement ta passerelle
tricéphale. Elle est la seule à pouvoir dé-nater correctement les
paquets de réponse du serveur.

Hypothèse : ça pourrait être un effet de bord de la cible ROUTE. As-tu
essayé avec l'option --continue ?


Oui, mais je ne comprends pas bien son effet. J'ai essayé --continue
avec une règle SNAT pour essayer de faire apparaître les paquets
comme venant de 192.168.1.1, mais rien n'y fait.

JKB


Avatar
Pascal

Hypothèse : ça pourrait être un effet de bord de la cible ROUTE. As-tu
essayé avec l'option --continue ?


Oui, mais je ne comprends pas bien son effet.


D'après la documentation succinte du patch-o-matic, elle spécifie que le
paquet doit continuer à traverser les règles. On peut supposer qu'il ne
s'agit que des règles de la table/chaîne où se trouve la règle ROUTE et
que les autres tables/chaînes sont de toute façon traversées, mais sans
certitude sans avoir testé ou examiné le code source.

J'ai essayé --continue
avec une règle SNAT pour essayer de faire apparaître les paquets
comme venant de 192.168.1.1, mais rien n'y fait.


Normal concernant la règle SNAT. Toute règle NAT (SNAT, DNAT,
MASQUERADE, et NETMAP je suppose) est sans effet sur les paquets retour.
Comme ces paquets appartiennent à une connexion déjà établie, les
opérations appliquées dans les chaînes de la table nat sont déjà fixées
automatiquement comme étant les opérations réciproques de celles qui ont
été appliquées au premier paquet aller qui a créé la connexion.

PS : au lieu d'utiliser des options exotiques comme ROUTE, j'essaierais
la méthode exposée par TiChou dans l'autre fil qui consiste à utiliser
une adresse différente en alias pour le serveur quand on y accède par la
connexion "intranet" et router en fonction de l'adresse source (qui au
moins marche chez toi).

--
Boîte à spam :


Avatar
JKB
Le 22-02-2005, à propos de
Re: Configuration routeur (suite),
écrivait dans fr.comp.os.linux.configuration :

Hypothèse : ça pourrait être un effet de bord de la cible ROUTE. As-tu
essayé avec l'option --continue ?


Oui, mais je ne comprends pas bien son effet.


D'après la documentation succinte du patch-o-matic, elle spécifie que le
paquet doit continuer à traverser les règles. On peut supposer qu'il ne
s'agit que des règles de la table/chaîne où se trouve la règle ROUTE et
que les autres tables/chaînes sont de toute façon traversées, mais sans
certitude sans avoir testé ou examiné le code source.

J'ai essayé --continue
avec une règle SNAT pour essayer de faire apparaître les paquets
comme venant de 192.168.1.1, mais rien n'y fait.


Normal concernant la règle SNAT. Toute règle NAT (SNAT, DNAT,
MASQUERADE, et NETMAP je suppose) est sans effet sur les paquets retour.
Comme ces paquets appartiennent à une connexion déjà établie, les
opérations appliquées dans les chaînes de la table nat sont déjà fixées
automatiquement comme étant les opérations réciproques de celles qui ont
été appliquées au premier paquet aller qui a créé la connexion.


On est bien d'accord. Sur la connexion principale, je fais du DNAT
sans aucun problème. J'ai par exemple une connexion ssh sur le lien
principal qui passe sur mon serveur intranet :

14:05:20.144272 IP 82.101.6.157.54718 > kant.astelys.fr.2200: . ack 1
win 5840 <nop,nop,timestamp 363411194 86825889>
14:05:20.145285 IP kant.*.fr.2200 > 82.101.6.157.54718: P 1:42(41)
ack 1 win 5792 <nop,nop,timestamp 86825947 363411194>
14:05:20.204124 IP 82.101.6.157.54718 > kant.*.fr.2200: . ack 42
win 5840

Le NAT fonctionne bien au retour, puisque c'est kant qui semble
répondre et non mon serveur intranet.

Question subsidiaire : pourquoi avec la même technique, cela ne
fonctionne pas sur le second lien ? Pourquoi est-ce que sur le
second lien, c'est l'adresse du serveur intranet qui passe et non
l'adresse censée être natée ? L'application intranet est écrite en
java. Y aurait-il un bug dans la sdk qui ferait passer le retour
comme une nouvelle connexion ?

Root kant:[~] > iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere kant.*.fr tcp
dpt:8000 to:192.168.0.130:8080
DNAT tcp -- anywhere thibon.*.fr tcp
dpt:3000 to:192.168.0.130:3000
DNAT tcp -- anywhere thibon.*.fr tcp
dpt:3001 to:192.168.0.130:3001
DNAT tcp -- anywhere kant.*.fr tcp
dpt:2200 to:192.168.0.130:22

PS : au lieu d'utiliser des options exotiques comme ROUTE, j'essaierais
la méthode exposée par TiChou dans l'autre fil qui consiste à utiliser
une adresse différente en alias pour le serveur quand on y accède par la
connexion "intranet" et router en fonction de l'adresse source (qui au
moins marche chez toi).


C'est bien ce que je fais.

Cordialement,

JKB