Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Deux passerelles (Linux) et port forwarding...

18 réponses
Avatar
JKB
Bonjour à tous,

J'ai un petit problème avec une machine tournant sous Linux et
accédant à internet par deux passerelle. Je m'explique...

J'ai deux lignes ADSL, l'une publique attanquant la partie serveur
web, smtp, pop3s, imaps et j'en passe et l'autre dédiée à un
intranet. J'ai installé iproute2, configuré le bazar et je peux
accéder en ssh à chacune de mes deux interfaces réseaux par chacune
des deux IP publiques. Donc, ça marche. Le problème est le port
forwarding...

L'interface publique est connectée à un routeur et possède l'adresse
192.168.254.1 et je reroute un port sur mon serveur intranet
(publique:8000 -> intranet:8080). Cela fonctionne à merveille.
Maintenant, je dois router les ports 3000 et 3001 provenant de mon
routeur intranet connecté à ma passerelle sur l'adresse 192.168.1.1
vers les ports de mon serveur intranet 3000 et 3001. J'ai donc
rajouté une règle dans la table nat :

iptables -t nat -A PREROUTING -d 192.168.1.1 -j DNAT -p tcp --dport 3000
--to-destination 192.168.0.130

Cela me semble logique. Sauf que... Rien ne fonctionne. Si je
remplace -d 192.168.1.1 par -d 192.168.254.1 (adresse connectée à
mon routeur "public"), le port forwarding fonctionne. Je sèche. Une
idée ? J'ai lancé un tcpdump sur l'interface côté réseau local et
les paquets arrivant sur l'interface connectée à mon routeur
intranet sont incapables de passer ma passerelle. Ceux qui arrivent
sur le routeur "public" passent sans encombre...

Root kant:[/var/lib/iptables] > iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 192.168.254.1 tcp dpt:8000 to:192.168.0.130:8080
DNAT tcp -- 0.0.0.0/0 192.168.1.1 tcp dpt:3000 to:192.168.0.130

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.0.0/24 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Root kant:[/var/lib/iptables] >

Cordialement,

JKB

10 réponses

1 2
Avatar
point
Salut JKB,

rajouté une règle dans la table nat :

iptables -t nat -A PREROUTING -d 192.168.1.1 -j DNAT -p tcp --dport 3000
--to-destination 192.168.0.130

Cela me semble logique. Sauf que... Rien ne fonctionne. Si je


Dans cette règle, essais de remplacer le "-d 192.168.1.1" un "-i ethX"
(ethX = eth0 ou eth1, celui de l'ip 192.168.1.1).

Moi sur ma MDK j'administre cela avec Webmin sur Shorewell.

@+

JM

Avatar
JKB
Le 16-02-2005, à propos de
Re: Deux passerelles (Linux) et port forwarding...,
point écrivait dans fr.comp.reseaux.ip :
Salut JKB,

rajouté une règle dans la table nat :

iptables -t nat -A PREROUTING -d 192.168.1.1 -j DNAT -p tcp --dport 3000
--to-destination 192.168.0.130

Cela me semble logique. Sauf que... Rien ne fonctionne. Si je


Dans cette règle, essais de remplacer le "-d 192.168.1.1" un "-i ethX"
(ethX = eth0 ou eth1, celui de l'ip 192.168.1.1).


C'est eth2...

Déjà fait. Merci d'avoir joué ;-)

Moi sur ma MDK j'administre cela avec Webmin sur Shorewell.


Ce n'est pas exactement un firewall. C'est un routage en fonction
des ports sur deux interfaces WAN, un truc tiré par les cheveux...
En fait, la règle est bonne, elle fonctionne sur l'autre port. C'est
plus tordu que cela. J'ai ôté les règles de la table mangle qui sont
inutiles, mais je suis convaincu que j'ai un problème de routage sur
la table intranet (ou un truc qui ne plaît pas au noyau...).

Cordialement,

JKB


Avatar
point
Re,

inutiles, mais je suis convaincu que j'ai un problème de routage sur
la table intranet (ou un truc qui ne plaît pas au noyau...).


Dans ce cas utilise la commande route (man route).

Avatar
point
re,

En fait, la règle est bonne, elle fonctionne sur l'autre port.
Es-tu sur qu'il s'agit de port tcp et pas udp.


Et même, des fois il faut aussi ouvrir l'udp pour que cela fonctionne!

@+

JM

Avatar
JKB
Le 16-02-2005, à propos de
Re: Deux passerelles (Linux) et port forwarding...,
point écrivait dans fr.comp.reseaux.ip :
Re,

inutiles, mais je suis convaincu que j'ai un problème de routage sur
la table intranet (ou un truc qui ne plaît pas au noyau...).


Dans ce cas utilise la commande route (man route).


Ben non. Il me faut deux routes par défaut, et pour cela, il faut
utiliser iproute et non route...

JKB


Avatar
JKB
Le 16-02-2005, à propos de
Re: Deux passerelles (Linux) et port forwarding...,
point écrivait dans fr.comp.reseaux.ip :
re,

En fait, la règle est bonne, elle fonctionne sur l'autre port.
Es-tu sur qu'il s'agit de port tcp et pas udp.



Ah oui... Il s'agit d'une application écrite à la main et je suis
sûr qu'il s'agit de ports TCP.

Et même, des fois il faut aussi ouvrir l'udp pour que cela fonctionne!


Ce n'est pas nécessaire ici vu que sur l'autre interface, ça
fonctionne...

JKB


Avatar
Bruno Bonfils
JKB writes:

les paquets arrivant sur l'interface connectée à mon routeur
intranet sont incapables de passer ma passerelle. Ceux qui arrivent
sur le routeur "public" passent sans encombre...


Ne serait-ce pas tout simplement à cause de ta route par défaut ?

Si j'ai bien compris tu as :


Internet 1 Internet 2
| |
-----------Box----------

Quand tu PAT sur Internet 1 ca marche et pas sur 2 ? Si c'est cela,
c'est simple, les paquets arrivant par Internet 1 repartent vers
Internet 2, qui ne connait pas la table conntrak (et de toute facon
meme si il l'avait, ca changerait rien puisque il a pas la meme ip
publique). Solution : faire du routing évolué avec iproute en fonction
de marque déposée par iptables sur ta machine ou il y les services.

--
_o<

Avatar
JKB
Le 17-02-2005, à propos de
Re: Deux passerelles (Linux) et port forwarding...,
Bruno Bonfils écrivait dans fr.comp.reseaux.ip :
JKB writes:

les paquets arrivant sur l'interface connectée à mon routeur
intranet sont incapables de passer ma passerelle. Ceux qui arrivent
sur le routeur "public" passent sans encombre...


Ne serait-ce pas tout simplement à cause de ta route par défaut ?

Si j'ai bien compris tu as :


Internet 1 Internet 2
| |
-----------Box----------

Quand tu PAT sur Internet 1 ca marche et pas sur 2 ? Si c'est cela,
c'est simple, les paquets arrivant par Internet 1 repartent vers
Internet 2, qui ne connait pas la table conntrak (et de toute facon
meme si il l'avait, ca changerait rien puisque il a pas la meme ip
publique). Solution : faire du routing évolué avec iproute en fonction
de marque déposée par iptables sur ta machine ou il y les services.


Le problème a évolué. En fait, j'ai :

Internet 1 Internet 2
| |
--------- Linux ----------
|
Intranet

J'utilise iproute. La table par défaut renvoie tout sur Internet 1
qui est NATé.

Le port 8000 d'Internet 1 passe sur Intranet:8080 sans encombre.

Une table intranet (iproute) autorise l'accès en SSH d'Internet 2
sur la passerelle Linux et iptables transmet les ports 3000 et 3001
à Intranet. Sauf qu'au retour, les paquets provenant des ports 3000
et 3001, marqués par iptables (-j MARK dans mangle, ça fonctionne)
ignorent superbement la table intranet et ressortent par Internet 1
!

Root kant:[~] > ip rule list
0: from all lookup local
32764: from all fwmark 0x1 lookup intranet
32765: from 192.168.1.1 lookup intranet
32766: from all lookup main
32767: from all lookup default
Root kant:[~] > ip route list table intranet
default via 192.168.1.254 dev eth2
Root kant:[~] > ip route list
192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.1
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.128
192.168.254.0/24 dev eth0 proto kernel scope link src 192.168.254.1
default via 192.168.254.254 dev eth0
Root kant:[~] > iptables -t mangle -L -v -n
Chain PREROUTING (policy ACCEPT 165K packets, 58M bytes)
pkts bytes target prot opt in out source destination
1445 1620K MARK tcp -- * * 192.168.0.130
0.0.0.0/0 tcp spts:3000:3001 MARK set 0x1


J'ai vérifier en loggant les paquets, ils ressortent tout simplement
par la mauvaise interface comme si la table intranet n'existait pas
!

Une idée ?

Cordialement,

JKB


Avatar
Guillaume
Salut JKB,

JKB a wroté :

Le problème a évolué. En fait, j'ai :

Internet 1 Internet 2
| |
--------- Linux ----------
|
Intranet

J'utilise iproute.


Question bête : pourquoi ? Iptables seul n'est-il pas suffisant ?
(je demande bêtement, je n'utilise que ce dernier et il me suffit :-S)

Si tu veux bien, j'aimerais bien résumer schématiquement tout ce dont
tu as besoin, pour être bien sûr de comprendre (ce qui va sans dire va
mieux en le disant ;), corrige-moi là ou j'ai mal compris STP . Soit :

- Intranet == ton LAN (réseau local)
- Sur ta linuxette, tu as :
eth0, ip 192.168.1.1 sur "Internet1"
eth1, ip 192.168.254.1 sur "Internet2"
eth2, ip 192.168.0.1 sur "intranet"

La table par défaut renvoie tout sur Internet 1
qui est NATé.


Donc de "Intranet" vers "Internet1" tout passe en NAT. Ok.

Le port 8000 d'Internet 1 passe sur Intranet:8080 sans
encombre.


De "Internet1:8000", tu PATes vers "Intranet:8080". Ok.

Une table intranet (iproute) autorise l'accès en SSH d'Internet 2
sur la passerelle Linux


Pourquoi iproute t'est-il nécessaire ici ? Ne serait-il pas plus
simple de tout faire faire par iptables dans la table input ?

et iptables transmet les ports 3000 et 3001
à Intranet. Sauf qu'au retour, les paquets provenant des ports
3000 et 3001, marqués par iptables (-j MARK dans mangle, ça
fonctionne) ignorent superbement la table intranet et ressortent
par Internet 1 !


... comme le précise la table par défaut qui NATte, sauf qu'il se
trompe de provenance, et fait le retour sur la mauvaise interface.
J'ai bon ? Et donc, pour ce "retour" de "Intranet" vers "Internet2"
en 3000/3001, tu ne pourrais pas ajouter une règle autorisant et
dirigeant explicitement ce retour en utilisant le flag "established,
related" d'iptables ?

Quelques autres petites questions :

La liaison vers "Internet2" te sert sans doute à une connexion
professionnelle vers un autre réseau local. Celui-ci a sans doute une
plage IP spécifique, que tu pourrais préciser en iptables pour
renvoyer vers la bonne interface, et t'affranchir d'ip route qui
visiblement te pose problème. Pourquoi ne pas procéder comme ça ?

Tu peux poster la sortie de # iptables -L et # ip route list _au_
_complet_ STP ?

Une idée ?


Cf. çi-dessus, et si je n'ai pas bien compris ton problème, je te
remercie de bien vouloir préciser.

Cordialement,



Ah mais moi aussi :).


--
Guillaume

Avatar
Bruno Bonfils
JKB writes:


Une idée ?>


Tu as essaye de desactiver les rp_filter et autre machin plus ou moins
inutiles ?

--
_o<

1 2