Voici mon problème : J'ai une machine qui a deux cartes réseaux, avec une
IP différente sur chaque interface, mettons 1.1.1.10 sur eth0 et 1.1.2.20
sur eth1. Il y a donc les deux reseaux 1.1.1.0/24 et 1.1.2.0/24.
Les gateways de chacun de ses reseaux ne routent QUE les paquets dont la
sources appartient à leur sous-reseau, et sont accessibles aux ip 1.1.1.1
et 1.1.2.1.
Donc, lorsque la machine répond à une connection, elle doit absolument
renvoyer la réponse par le sous-reseaux par lequel la connection est entrée.
C'est un problème classique, qui se résoud classiquement avec iproute2.
Voilà donc la config initiale :
# ip rule ls
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
# ip route ls table main
1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20
1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10
default via 1.1.2.1 dev eth1
symptomes : la machine ne répond pas à ping 1.1.1.10, mais bien à ping
1.1.2.20 - logique, elle répond via 1.1.2.1 qui ne route pas si l'ip source
est 1.1.1.10
Donc, j'ai crée une règle supplémantaire, de priorité 100, pour tout ce qui
provient de l'interface eth0 :
# ip rule add iif eth0 table 10 pref 100
et je crée ensuite la table de routage 10 comme ceci :
# ip route add to 1.1.1.0/24 src 1.1.1.10 table 10 dev eth0 [proto kernel]
( le "proto kernel" est là pour l'estetique je pense)
et
# ip route add default via 1.1.1.1 table 10 dev eth0
Je vérifie avec ip rule show et ip route show que tout est bien passé, et
je fait
# ip route flush cache
Mais ca ne change rien, le comportement reste inchangé. D'ou mon inquétude
(pour ne rien dire de l'inquiétude du propriétaire du serveur :-) )
Y'a deux choses qui me titillent :
premièrement, quand je test avec un IP lointain (google.com) :
# ip route get 216.239.39.99 oif eth1
216.239.39.99 via 1.1.2.1 dev eth1 src 1.1.2.20
cache mtu 1500 rtt 375ms
mais :
# ip route get 216.239.39.99 oif eth0
216.239.39.99 dev eth0 src 1.1.1.10
cache mtu 1500 rtt 375ms
vous noterez l'abscence troublante du "via 1.1.1.1" auquel je me serait
attendu.
deuxième détail choquant : en jouant avec tcpdump, j'ai l'impression que le
kernel drop purement et simplement le paquet qui arrive de eth0, sans meme
envoyer au routeur ; sans meme faire de requete arp, rien. Mais là je peut
me tromper, vu le trafic qu'il y a sur les interfaces...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
TiChou
Dans l'article news:4045cbab$0$28116$, Cedric écrivait :
Bonjour à tous.
Bonjour,
Voici mon problème : J'ai une machine qui a deux cartes réseaux, avec une IP différente sur chaque interface, mettons 1.1.1.10 sur eth0 et 1.1.2.20 sur eth1. Il y a donc les deux reseaux 1.1.1.0/24 et 1.1.2.0/24.
Les gateways de chacun de ses reseaux ne routent QUE les paquets dont la sources appartient à leur sous-reseau, et sont accessibles aux ip 1.1.1.1 et 1.1.2.1.
Donc, lorsque la machine répond à une connection, elle doit absolument renvoyer la réponse par le sous-reseaux par lequel la connection est entrée.
C'est un problème classique, qui se résoud classiquement avec iproute2.
Voilà donc la config initiale :
# ip rule ls 0: from all lookup local 32766: from all lookup main 32767: from all lookup default # ip route ls table main 1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20 1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10 default via 1.1.2.1 dev eth1
A partir de là je ferais ainsi :
Les paquets dont l'IP source est 1.1.1.10 doivent utiliser la table 10 :
ip rule add from 1.1.1.10 table 10 pref 100
et ceux dont l'IP source est 1.1.2.20 doivent utiliser la table 20 :
ip rule add from 1.1.2.20 table 20 pref 100
Les paquets utilisant la table 10 sont routés vers la passerelle 1.1.1.1 en passant par l'interface eth0 :
ip route add table 10 via 1.1.1.1 dev eth0
et ceux utilisant la table 20 sont routés vers la passerelle 1.1.2.1 en passant par l'interface eth1 :
ip route add table 20 via 1.1.2.1 dev eth1
Si on récapitule on a :
$ ip rule show 0: from all lookup local 100: from 1.1.1.10 lookup 10 100: from 1.1.2.20 lookup 20 32766: from all lookup main 32767: from all lookup default
$ ip route show table main 1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20 1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10 default via 1.1.2.1 dev eth1
$ ip route show table 10 default via 1.1.1.1 dev eth0
$ ip route show table 20 default via 1.1.2.1 dev eth1
-- TiChou
Dans l'article news:4045cbab$0$28116$636a15ce@news.free.fr,
Cedric <rixed@free.NOSPAM.fr> écrivait :
Bonjour à tous.
Bonjour,
Voici mon problème : J'ai une machine qui a deux cartes réseaux, avec une
IP différente sur chaque interface, mettons 1.1.1.10 sur eth0 et 1.1.2.20
sur eth1. Il y a donc les deux reseaux 1.1.1.0/24 et 1.1.2.0/24.
Les gateways de chacun de ses reseaux ne routent QUE les paquets dont la
sources appartient à leur sous-reseau, et sont accessibles aux ip 1.1.1.1
et 1.1.2.1.
Donc, lorsque la machine répond à une connection, elle doit absolument
renvoyer la réponse par le sous-reseaux par lequel la connection est
entrée.
C'est un problème classique, qui se résoud classiquement avec iproute2.
Voilà donc la config initiale :
# ip rule ls
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
# ip route ls table main
1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20
1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10
default via 1.1.2.1 dev eth1
A partir de là je ferais ainsi :
Les paquets dont l'IP source est 1.1.1.10 doivent utiliser la table 10 :
ip rule add from 1.1.1.10 table 10 pref 100
et ceux dont l'IP source est 1.1.2.20 doivent utiliser la table 20 :
ip rule add from 1.1.2.20 table 20 pref 100
Les paquets utilisant la table 10 sont routés vers la passerelle 1.1.1.1 en
passant par l'interface eth0 :
ip route add table 10 via 1.1.1.1 dev eth0
et ceux utilisant la table 20 sont routés vers la passerelle 1.1.2.1 en
passant par l'interface eth1 :
ip route add table 20 via 1.1.2.1 dev eth1
Si on récapitule on a :
$ ip rule show
0: from all lookup local
100: from 1.1.1.10 lookup 10
100: from 1.1.2.20 lookup 20
32766: from all lookup main
32767: from all lookup default
$ ip route show table main
1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20
1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10
default via 1.1.2.1 dev eth1
$ ip route show table 10
default via 1.1.1.1 dev eth0
$ ip route show table 20
default via 1.1.2.1 dev eth1
Dans l'article news:4045cbab$0$28116$, Cedric écrivait :
Bonjour à tous.
Bonjour,
Voici mon problème : J'ai une machine qui a deux cartes réseaux, avec une IP différente sur chaque interface, mettons 1.1.1.10 sur eth0 et 1.1.2.20 sur eth1. Il y a donc les deux reseaux 1.1.1.0/24 et 1.1.2.0/24.
Les gateways de chacun de ses reseaux ne routent QUE les paquets dont la sources appartient à leur sous-reseau, et sont accessibles aux ip 1.1.1.1 et 1.1.2.1.
Donc, lorsque la machine répond à une connection, elle doit absolument renvoyer la réponse par le sous-reseaux par lequel la connection est entrée.
C'est un problème classique, qui se résoud classiquement avec iproute2.
Voilà donc la config initiale :
# ip rule ls 0: from all lookup local 32766: from all lookup main 32767: from all lookup default # ip route ls table main 1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20 1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10 default via 1.1.2.1 dev eth1
A partir de là je ferais ainsi :
Les paquets dont l'IP source est 1.1.1.10 doivent utiliser la table 10 :
ip rule add from 1.1.1.10 table 10 pref 100
et ceux dont l'IP source est 1.1.2.20 doivent utiliser la table 20 :
ip rule add from 1.1.2.20 table 20 pref 100
Les paquets utilisant la table 10 sont routés vers la passerelle 1.1.1.1 en passant par l'interface eth0 :
ip route add table 10 via 1.1.1.1 dev eth0
et ceux utilisant la table 20 sont routés vers la passerelle 1.1.2.1 en passant par l'interface eth1 :
ip route add table 20 via 1.1.2.1 dev eth1
Si on récapitule on a :
$ ip rule show 0: from all lookup local 100: from 1.1.1.10 lookup 10 100: from 1.1.2.20 lookup 20 32766: from all lookup main 32767: from all lookup default
$ ip route show table main 1.1.2.0/24 dev eth1 proto kernel scope link src 1.1.2.20 1.1.1.0/24 dev eth0 proto kernel scope link src 1.1.1.10 default via 1.1.2.1 dev eth1
$ ip route show table 10 default via 1.1.1.1 dev eth0
$ ip route show table 20 default via 1.1.2.1 dev eth1