OVH Cloud OVH Cloud

Problème de routage (iproute2 + iptables)

41 réponses
Avatar
JKB
Bonjour à tous,

J'ai un souci, un truc incompréhensible... Considérons une machine
qui possède trois cartes réseau avec trois adresses :

192.168.1.1 -> eth2 sur un routeur ADSL et une adresse IP fixe
publique
192.168.254.1 -> eth0, même configuration
192.168.0.128 -> eth1, réseau local.

Tous les services (http, https, pop3s, imaps, smtp...) passent par
eth0 et fonctionnent. Toutes les requêtes du réseau local sont
reroutées sur eth0 (la machine fait du nat).

Le port 8000 entrant sur eth0 est rerouté par iptables sur eth1:8080
et fonctionne.

Seuls trois ports sont autorisés sur eth2 : ssh et les 3000 et 3001.
Le ssh fonctionne, donc l'interface est bien configurée. Par contre,
pas moyen de forwarder les ports 3000 et 3001 sur une machine du
réseau local. Par contre, je peux forwarder les ports entrant 3000
et 3001 du port eth0 vers cette machine. Un peu comme s'il était
impossible de fowarder un port arrivant sur une table de routage
autre que main. J'ai googlisé sans succès depuis avant-hier et je
sèche.

Pour information :

Root kant:[~] > ip rule list
0: from all lookup local
32763: from all fwmark 0xbb9 lookup intranet
32764: from all fwmark 0xbb8 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 table main
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:[~] > Root kant:[~] > iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere kant.astelys.fr
ACCEPT all -- anywhere bergson.astelys.fr
ACCEPT tcp -- anywhere thibon.astelys.fr tcp dpt:ssh
ACCEPT tcp -- anywhere thibon.astelys.fr tcp
dpt:3000
ACCEPT tcp -- anywhere thibon.astelys.fr tcp
dpt:3001

Chain FORWARD (policy ACCEPT)
target prot opt source destination

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

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- localnet/24 anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Root kant:[~] > iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK tcp -- anywhere anywhere tcp
dpt:3000 MARK set 0xbb8
MARK tcp -- anywhere anywhere tcp
dpt:3001 MARK set 0xbb9

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Root kant:[~] >

Je ne vois vraiment pas ce qui coince. La machine est une UltraSparc
tournant sous Debian (noyau officiel 2.4.29). Je précise que je vois
arriver les paquets sur eth2:3000, mais que ceux-ci sont ignorés par
les règles de la table nat d'iptables...

Une idée ?

Cordialement,

JKB

10 réponses

1 2 3 4 5
Avatar
JKB
Le 18-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

SI j'ai bien compris, les paquets provenant des ports 3000 et 3001
sont marqués par la table mangle et sont censés suivre la table
intranet, non ?


Oui.

Où est le problème ?


Je ne sais pas. À priori, pas de vos règles iptables et iproute2.


Mais alors où chercher ?... J'ai passé cet après-midi toutes les
options du noyau une à une pour voir si je n'avais rien oublié et je
sèche encore plus. Et plus je googlise et rtfme, moins je
comprends...

JKB


Avatar
TiChou
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

écrivait :

je peux écrire l'expression consacrée : chez moi ça marche (c).



Chez moi aussi et depuis fort bien longtemps.

Je n'ai pas tout mis en place comme dans ton installation, juste la
passerelle et une machine jouant le rôle de ton serveur, et rien sur les
interfaces vers les routeurs (finalement j'aurais pu faire avec une
seule carte réseau et deux interfaces dummy). La correspondance qui sert
à reconnaître les paquets à marquer est différente (sur adresse
destination pour faire simple) et il n'y avait pas de NAT mais je ne
pense pas que ça ait d'influence. J'ai bien réussi à faire en sorte que
des paquets émis par le serveur et marqués sortent par une interface
alors que la route normale passait par l'autre interface.


Et avec le NAT ? Puis-je avoir votre configuration iproute ?
Surtout l'équivalent de mon ip route list table intranet.


Sur le principe, j'ai le même type de configuration que la votre (plusieurs
liens Internet, différents services derrière un lan devant être accédé que
par l'une ou par l'autre des connexions Internet, etc), mais le nombre de
règles iproute2, la diversité de ses règles iproute2 et le nombres de règles
iptables font que donner ma configuration n'aiderait pas à la compréhension
et serait un mauvais modèle.
C'est pour quoi j'ai monté comme l'a fait Pascal une petite machine pour
simuler quelque chose de beaucoup plus proche à votre configuration, à ceci
près que les interfaces ne sont pas toutes en Ethernet mais en PPP.

Soit la machine herbizarre avec la configuration réseau suivante :

herbizarre root # ip -4 addr show
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
inet 192.168.151.2/23 brd 192.168.151.255 scope global eth0
5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1200 qdisc pfifo_fast qlen 3
inet 192.168.254.1 peer 192.168.254.254/32 scope global ppp0
6: ppp1: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1200 qdisc pfifo_fast qlen 3
inet 192.168.126.1 peer 192.168.126.254/32 scope global ppp1

herbizarre root # ip -4 route show table all
default via 192.168.126.254 dev ppp1 table web
192.168.126.0/24 dev ppp1 scope link
192.168.254.0/24 dev ppp0 scope link
192.168.150.0/23 dev eth0 proto kernel scope link src 192.168.151.2
default via 192.168.150.1 dev eth0
[snip broadcast and co]

herbizarre root # ip rule show
0: from all lookup local
100: from 192.168.126.1 lookup web
101: from all fwmark 0x1 lookup web
32766: from all lookup main
32767: from all lookup default

eth0 est l'interface du lien Internet principal, l'équivalent de votre
interface eth0.
ppp0 est l'interface où est accessible un serveur web (192.168.254.3),
l'équivalent de votre interface eth1.
ppp1 est l'interface d'un autre lien Internet par lequel doit être accéder
le serveur web 192.168.254.3 se trouvant derrière l'interface ppp0, bref
l'équivalent de votre interface eth2.

Les règles iptables :

iptables -t nat -A PREROUTING -p tcp -d 192.168.126.1 --dport 80
-j DNAT --to-destination 192.168.254.3

iptables -t mangle -A PREROUTING -p tcp -s 192.168.254.3 --sport 80
-j MARK --set-mark 0x1

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp1 -s 192.168.254.0/24 -j MASQUERADE

Au complet : http://magnolia.tichou.org/~tichou/JKB-iptables

La configuration des paramètres du noyaux :

http://magnolia.tichou.org/~tichou/JKB-sysctl

Le log Netfilter des paquets entrant :

http://magnolia.tichou.org/~tichou/JKB-pkts-in

et celui des paquets sortant :

http://magnolia.tichou.org/~tichou/JKB-pkts-in

Le log tcpdump sur l'interface ppp1, ppp0 et les deux en mêmes temps d'une
connexion :

http://magnolia.tichou.org/~tichou/JKB-tcpdump

Le suivi de la connexion :

http://magnolia.tichou.org/~tichou/JKB-conntrack

Comme vous pouvez le voir, depuis une machine extérieure qui attaque
l'interface ppp1 sur son port 80 j'accède bien au serveur web se trouvant
derrière l'interface ppp0 alors que la route de sortie par défaut est se
fait sur eth0.

Si on supprime la règle iproute2 qui redirige les paquets marqués sur la
bonne table de routage, on observe alors que les paquets sortent bien sur
l'interface eth0, celle de la route par défaut :

http://magnolia.tichou.org/~tichou/JKB-sansmark

La machine tourne sur un vieux noyaux 2.4.20 sauce Gentoo (pas à jour du
tout... ;p), la version de iproute2 est la 2.6.10.20050112 (comme Pascal je
m'étonnais de la valeur des mark affichés contrairement à la votre mais cela
fonctionnait aussi très bien avec la version 20010824) et la version de
iptables est là 1.2.9.

Voilà, j'espère que le détail de la configuration et de ma démonstration
pourra vous aider ou vous mettre sur la bonne piste. À mon avis ça se situe
au niveau du cache de routage comme la fait remarquer Pascal ou des
paramètres du noyaux.

--
TiChou


Avatar
JKB
Le 18-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

écrivait :

je peux écrire l'expression consacrée : chez moi ça marche (c).



Chez moi aussi et depuis fort bien longtemps.


;-)

Je regarde, et je vous tiens au courant...

JKB



Avatar
JKB
Le 18-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :


Bonjour,

Quelques remarques...

écrivait :

je peux écrire l'expression consacrée : chez moi ça marche (c).



Chez moi aussi et depuis fort bien longtemps.

Je n'ai pas tout mis en place comme dans ton installation, juste la
passerelle et une machine jouant le rôle de ton serveur, et rien sur les
interfaces vers les routeurs (finalement j'aurais pu faire avec une
seule carte réseau et deux interfaces dummy). La correspondance qui sert
à reconnaître les paquets à marquer est différente (sur adresse
destination pour faire simple) et il n'y avait pas de NAT mais je ne
pense pas que ça ait d'influence. J'ai bien réussi à faire en sorte que
des paquets émis par le serveur et marqués sortent par une interface
alors que la route normale passait par l'autre interface.


Et avec le NAT ? Puis-je avoir votre configuration iproute ?
Surtout l'équivalent de mon ip route list table intranet.


Sur le principe, j'ai le même type de configuration que la votre (plusieurs
liens Internet, différents services derrière un lan devant être accédé que
par l'une ou par l'autre des connexions Internet, etc), mais le nombre de
règles iproute2, la diversité de ses règles iproute2 et le nombres de règles
iptables font que donner ma configuration n'aiderait pas à la compréhension
et serait un mauvais modèle.
C'est pour quoi j'ai monté comme l'a fait Pascal une petite machine pour
simuler quelque chose de beaucoup plus proche à votre configuration, à ceci
près que les interfaces ne sont pas toutes en Ethernet mais en PPP.

Soit la machine herbizarre avec la configuration réseau suivante :

herbizarre root # ip -4 addr show
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
inet 192.168.151.2/23 brd 192.168.151.255 scope global eth0
5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1200 qdisc pfifo_fast qlen 3
inet 192.168.254.1 peer 192.168.254.254/32 scope global ppp0
6: ppp1: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1200 qdisc pfifo_fast qlen 3
inet 192.168.126.1 peer 192.168.126.254/32 scope global ppp1


Root kant:[~] > ip -4 addr show
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.254.1/24 brd 192.168.254.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.0.128/24 brd 192.168.0.255 scope global eth1
4: eth2: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
inet 192.168.1.1/24 brd 192.168.1.255 scope global eth2

Ça me semble cohérent.

herbizarre root # ip -4 route show table all
default via 192.168.126.254 dev ppp1 table web
192.168.126.0/24 dev ppp1 scope link
192.168.254.0/24 dev ppp0 scope link
192.168.150.0/23 dev eth0 proto kernel scope link src 192.168.151.2
default via 192.168.150.1 dev eth0
[snip broadcast and co]


Root kant:[~] > ip -4 route show table all
default via 192.168.1.254 dev eth2 table intranet
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
[idem, les informations broadcast sont cohérentes]

herbizarre root # ip rule show
0: from all lookup local
100: from 192.168.126.1 lookup web
101: from all fwmark 0x1 lookup web
32766: from all lookup main
32767: from all lookup default


Root kant:[~] > ip rule show
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

Le problème ne viendrait-il pas d'ici ? Inversion des deux règles
fwmark et lookup intranet ? Bon, je change les priorités, et je
reboote...

eth0 est l'interface du lien Internet principal, l'équivalent de votre
interface eth0.
ppp0 est l'interface où est accessible un serveur web (192.168.254.3),
l'équivalent de votre interface eth1.
ppp1 est l'interface d'un autre lien Internet par lequel doit être accéder
le serveur web 192.168.254.3 se trouvant derrière l'interface ppp0, bref
l'équivalent de votre interface eth2.

Les règles iptables :

iptables -t nat -A PREROUTING -p tcp -d 192.168.126.1 --dport 80
-j DNAT --to-destination 192.168.254.3

iptables -t mangle -A PREROUTING -p tcp -s 192.168.254.3 --sport 80
-j MARK --set-mark 0x1

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp1 -s 192.168.254.0/24 -j MASQUERADE


Pourquoi natez-vous l'interface qui ne sert qu'à votre serveur web ?

<snip>

Comme vous pouvez le voir, depuis une machine extérieure qui attaque
l'interface ppp1 sur son port 80 j'accède bien au serveur web se trouvant
derrière l'interface ppp0 alors que la route de sortie par défaut est se
fait sur eth0.

Si on supprime la règle iproute2 qui redirige les paquets marqués sur la
bonne table de routage, on observe alors que les paquets sortent bien sur
l'interface eth0, celle de la route par défaut :

http://magnolia.tichou.org/~tichou/JKB-sansmark

La machine tourne sur un vieux noyaux 2.4.20 sauce Gentoo (pas à jour du
tout... ;p), la version de iproute2 est la 2.6.10.20050112 (comme Pascal je
m'étonnais de la valeur des mark affichés contrairement à la votre mais cela
fonctionnait aussi très bien avec la version 20010824) et la version de
iptables est là 1.2.9.

Voilà, j'espère que le détail de la configuration et de ma démonstration
pourra vous aider ou vous mettre sur la bonne piste. À mon avis ça se situe
au niveau du cache de routage comme la fait remarquer Pascal ou des
paramètres du noyaux.


Les seuls paramètres du noyaux différents des vôtres sont :

#echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
#echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
#echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

Mais a priori, il ne s'agit pas de cela. Seul
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
est nécessaire au fonctionnement de l'interface eth2 (qui fonctionne,
c'est un problème de routage...). Bon, je reboote kant et je vous tiens
au courant...

Cordialement,

JKB



Avatar
JKB
Le 20-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
JKB écrivait dans fr.comp.os.linux.configuration :
Le 18-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :


Bonjour,

Quelques remarques...


Et quelques retours ;-)

Je loggue la chaîne forward de la table main et la chaîne prerouting
de mangle :

rayleigh:[~] > telnet monserveur 3000
Feb 20 11:25:57 kant kernel: Forward : IN=eth2 OUT=eth1
SRC!3.41.173.141 DST2.168.0.130 LEN` TOS=0x10 PREC=0x00 TTLX
IDX903 DF PROTO=TCP SPTC452 DPT000 WINDOWX40 RES=0x00 SYN URGP=0

La propagation se fait donc bien sur le bon port du bon serveur qui
répond :

Feb 20 11:25:57 kant kernel: Mangle : IN=eth1 OUT MAC:00:20:c0:ff:ee:00:11:11:10:93:05:08:00 SRC2.168.0.130
DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLd ID=0 DF PROTO=TCP
SPT000 DPTC452 WINDOWW92 RES=0x00 ACK SYN URGP=0

Le paquet est donc bine marqué, puis relayé et hop, ressort par
eth0.

Feb 20 11:25:57 kant kernel: Forward : IN=eth1 OUT=eth0
SRC2.168.0.130 DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLc
ID=0 DF PROTO=TCP SPT000 DPTC452 WINDOWW92 RES=0x00 ACK SYN URGP=0

Pourtant, j'ai bien maintenant :

Root kant:[~] > ip rule list
0: from all lookup local
100: from 192.168.1.1 lookup intranet
101: from all fwmark 0x1 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:[~] >

J'ai essayé de rajouter :

ip route add table intranet 192.168.1.0/24 dev eth2 proto kernel scope
link src 192.168.1.1

mais le résultat est le même ! Et au passage, j'ai rebooté la machine
pour être sûr de vider le cache. Pourquoi est-ce que @#^{[@{^[
d'iproute ignore superbement ma table intranet ?

JKB


Avatar
JKB
Le 20-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
JKB écrivait dans fr.comp.os.linux.configuration :
Le 20-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
JKB écrivait dans fr.comp.os.linux.configuration :
Le 18-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :


Bonjour,

Quelques remarques...


Et quelques retours ;-)

Je loggue la chaîne forward de la table main et la chaîne prerouting
de mangle :

rayleigh:[~] > telnet monserveur 3000
Feb 20 11:25:57 kant kernel: Forward : IN=eth2 OUT=eth1
SRC!3.41.173.141 DST2.168.0.130 LEN` TOS=0x10 PREC=0x00 TTLX
IDX903 DF PROTO=TCP SPTC452 DPT000 WINDOWX40 RES=0x00 SYN URGP=0

La propagation se fait donc bien sur le bon port du bon serveur qui
répond :

Feb 20 11:25:57 kant kernel: Mangle : IN=eth1 OUT > MAC:00:20:c0:ff:ee:00:11:11:10:93:05:08:00 SRC2.168.0.130
DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLd ID=0 DF PROTO=TCP
SPT000 DPTC452 WINDOWW92 RES=0x00 ACK SYN URGP=0

Le paquet est donc bine marqué, puis relayé et hop, ressort par
eth0.

Feb 20 11:25:57 kant kernel: Forward : IN=eth1 OUT=eth0
SRC2.168.0.130 DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLc
ID=0 DF PROTO=TCP SPT000 DPTC452 WINDOWW92 RES=0x00 ACK SYN URGP=0

Pourtant, j'ai bien maintenant :

Root kant:[~] > ip rule list
0: from all lookup local
100: from 192.168.1.1 lookup intranet
101: from all fwmark 0x1 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:[~] >

J'ai essayé de rajouter :

ip route add table intranet 192.168.1.0/24 dev eth2 proto kernel scope
link src 192.168.1.1

mais le résultat est le même ! Et au passage, j'ai rebooté la machine
pour être sûr de vider le cache. Pourquoi est-ce que @#^{[@{^[
d'iproute ignore superbement ma table intranet ?


On avance...

J'ai rajouté une règle pour que :
Root kant:[/var/log] > ip rule show
0: from all lookup local
90: from 192.168.0.130 lookup intranet
100: from 192.168.1.1 lookup intranet
101: from all fwmark 0x1 lookup intranet
32766: from all lookup main
32767: from all lookup default
Root kant:[/var/log] >

Et là, tous mes paquets issus de 192.168.0.130 sortent par
l'interface eth2 (or je ne veux que les ports 3000 et 3001).
Donc, ce qui coince, c'est la règle 101 sur la marque 0x1.
J'ai pourtant autant de paquets marqués que loggués :

59 3540 MARK tcp -- * * 192.168.0.130
0.0.0.0/0 tcp spts:3000:3001 MARK set 0x1
59 3540 LOG all -- * * 192.168.0.130
0.0.0.0/0 LOG flags 0 level 4 prefix `Mangle : '


Et dans /var/log/syslog :

Feb 20 13:32:34 kant kernel: Mangle : IN=eth1 OUT MAC:00:20:c0:ff:ee:00:11:11:10:93:05:08:00 SRC2.168.0.130
DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLd ID=0 DF PROTO=TCP
SPT000 DPTC516 WINDOWW92 RES=0x00 ACK SYN URGP=0
Feb 20 13:32:34 kant kernel: Forward : IN=eth1 OUT=eth2
SRC2.168.0.130 DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLc
ID=0 DF PROTO=TCP SPT000 DPTC516 WINDOWW92 RES=0x00 ACK SYN URGP=0

les paquets sont bien marqués avant d'être forwardés. J'ai essayé de
marquer les paquets à la source (sur 192.168.0.130), d'utiliser le
TOS, mais le résultat est le même...

JKB



Avatar
TiChou
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

herbizarre root # ip rule show
0: from all lookup local
100: from 192.168.126.1 lookup web
101: from all fwmark 0x1 lookup web
32766: from all lookup main
32767: from all lookup default


Root kant:[~] > ip rule show
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

Le problème ne viendrait-il pas d'ici ? Inversion des deux règles
fwmark et lookup intranet ?


L'ordre des règles concernant la table intranet n'a ici aucune importance
ainsi que leurs numéros de priotités.

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp1 -s 192.168.254.0/24 -j MASQUERADE


Pourquoi natez-vous l'interface qui ne sert qu'à votre serveur web ?


Je ne comprends pas bien votre question. D'autant plus que vous en faites de
même sur votre machine et vous faites bien de le faire. Il faut que les
paquets venant de l'interface ppp0 et qui seront forwardés vers l'interface
ppp1 soient natés sinon la passerelle/routeur se trouvant derrière
l'interface ppp1 ne sera pas où renvoyer les paquets retours.

--
TiChou


Avatar
JKB
Le 20-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

herbizarre root # ip rule show
0: from all lookup local
100: from 192.168.126.1 lookup web
101: from all fwmark 0x1 lookup web
32766: from all lookup main
32767: from all lookup default


Root kant:[~] > ip rule show
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

Le problème ne viendrait-il pas d'ici ? Inversion des deux règles
fwmark et lookup intranet ?


L'ordre des règles concernant la table intranet n'a ici aucune importance
ainsi que leurs numéros de priotités.

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp1 -s 192.168.254.0/24 -j MASQUERADE


Pourquoi natez-vous l'interface qui ne sert qu'à votre serveur web ?


Je ne comprends pas bien votre question. D'autant plus que vous en faites de
même sur votre machine et vous faites bien de le faire. Il faut que les
paquets venant de l'interface ppp0 et qui seront forwardés vers l'interface
ppp1 soient natés sinon la passerelle/routeur se trouvant derrière
l'interface ppp1 ne sera pas où renvoyer les paquets retours.


Je ne nate qu'une interface, le lien principal. Je ne vois pas
l'intérêt de le faire pour ma connexion intranet. Les paquets
sortent avec une adresse IP publique, et le routage suffit.

Pour mon problème, je suis en train de me demander si ce n'est pas
un bug du noyau 2.4.29.

JKB



Avatar
TiChou
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

Je loggue la chaîne forward de la table main et la chaîne prerouting
de mangle :

rayleigh:[~] > telnet monserveur 3000
Feb 20 11:25:57 kant kernel: Forward : IN=eth2 OUT=eth1
SRC!3.41.173.141 DST2.168.0.130 LEN` TOS=0x10 PREC=0x00 TTLX
IDX903 DF PROTO=TCP SPTC452 DPT000 WINDOWX40 RES=0x00 SYN URGP=0

La propagation se fait donc bien sur le bon port du bon serveur qui
répond :

Feb 20 11:25:57 kant kernel: Mangle : IN=eth1 OUT > MAC:00:20:c0:ff:ee:00:11:11:10:93:05:08:00 SRC2.168.0.130
DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLd ID=0 DF PROTO=TCP
SPT000 DPTC452 WINDOWW92 RES=0x00 ACK SYN URGP=0

Le paquet est donc bine marqué,


Qu'est ce qui vous permet d'affirmer que le paquet est bien marqué ? Car
finallement rien ne nous permet de l'affirmer et c'est bien une lacune du
noyau Linux.

--
TiChou

Avatar
JKB
Le 20-02-2005, à propos de
Re: Problème de routage (iproute2 + iptables),
TiChou écrivait dans fr.comp.os.linux.configuration :
Dans le message <news:,
*JKB* tapota sur f.c.o.l.configuration :

Je loggue la chaîne forward de la table main et la chaîne prerouting
de mangle :

rayleigh:[~] > telnet monserveur 3000
Feb 20 11:25:57 kant kernel: Forward : IN=eth2 OUT=eth1
SRC!3.41.173.141 DST2.168.0.130 LEN` TOS=0x10 PREC=0x00 TTLX
IDX903 DF PROTO=TCP SPTC452 DPT000 WINDOWX40 RES=0x00 SYN URGP=0

La propagation se fait donc bien sur le bon port du bon serveur qui
répond :

Feb 20 11:25:57 kant kernel: Mangle : IN=eth1 OUT >> MAC:00:20:c0:ff:ee:00:11:11:10:93:05:08:00 SRC2.168.0.130
DST!3.41.173.141 LEN` TOS=0x00 PREC=0x00 TTLd ID=0 DF PROTO=TCP
SPT000 DPTC452 WINDOWW92 RES=0x00 ACK SYN URGP=0

Le paquet est donc bine marqué,


Qu'est ce qui vous permet d'affirmer que le paquet est bien marqué ? Car
finallement rien ne nous permet de l'affirmer et c'est bien une lacune du
noyau Linux.


Il passe dans la règle. Donc à moi d'un bug du noyau... Est-ce que
vous pourriez tenter l'expérience avec un 2.4.29 (je ne peux pas
changer le noyau de la machine en question facilement) ?

Pour information, j'ai posé la question sur la liste linux-kernel.
J'attends.

JKB


1 2 3 4 5