Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 17 Jul 2006 20:58:05

jm_special_newsgroups
Affranchi(e)
 
Date d'inscription: 17 Jul 2006
Messages: 3

routage multi-carte / multi sous-reseau

Bonjour,

j'ai un probleme de routage dans une configuration un peu particuliere dont voici le schema:


- FAI1 ------|
Routeur LINUX ------ Passerelle AV ------ Reseau interne
- FAI2 ------|


Sur le reseau interne,passerelle pas défaut = Passerelle AV, reseau= 192.168.1.0

Sur Passerelle AV, passerelle par defaut = Routeur LINUX, reseau= 192.168.2.0

Sur Routeur LINUX, 3 cartes réseau :
- ETH0 sur FAI1 (en connexion ppp, adresse fournie par le FAI)
- ETH1 sur FAI2 (adresse via DHCP du FAI)
- ETH2 vers Passerelle AV

J'utilise 3 tables de routage :
- table ETH0, def via ppp0, 192.168.1.0 dev ETH2, 192.168.2.0 dev ETH2 via Passerelle AV
- table ETH1, def via ETH1, 192.168.1.0 dev ETH2, 192.168.2.0 dev ETH2 via Passerelle AV
- table MAIN, def via ppp0, 192.168.1.0 dev ETH2, 192.168.2.0 dev ETH2 via Passerelle AV

J'utilise Shorewall et les commandes DNAT pour permettre l'accès aux serveurs depuis Internet

Lorsque j'essaie d'acceder aux machines depuis Internet via le FAI1, tout fonctionne parfaitement.
Par contre, lorsque je fais le meme essai via le FAI2, j'ai le message "martian source 192.168.1.5 from 'Ads ETH1' on dev ETH1

par contre, l'accès au routeur LINUX via FAI1 et FAI2 fonctionne correctement (je n'attaque pas le reseau 192.168.1.0 dans ce cas)

ip_forwarding est à 1
le masquerading est activé sur l'interface ETH2

je me suis très largement inspiré de l'article suivant : http://www.supinfo-projects.com/fr/2005 … 5Flinux/2/

Ou est mon erreur ?

Celui qui trouve gagne toute ma reconnaissance

Hors ligne

 

#2 18 Jul 2006 00:09:47

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: routage multi-carte / multi sous-reseau

Hello,

  malheureusement le site a l'air down et google cache ne contient que la table des matières sad

  C'est pas une configuration courante, elle pose quelques problèmes non triviaux qui dépendent de l'implémentation de l'OS et de qqs autres détails auxquels on ne s'intéresse habituellement pas. Je n'ai encore jamais expérimenté une configuration pareille.

C'est délicat à cause du problème suivant (enfin je crois): lorsqu'une nouvelle connexion arrive sur une des interfaces externes, le dest. nat change la destination et la connexion est enregistrée dans le conntrack, avant le routage (parce que le routage a besoin de voir les adresses internes pour opérer correctement). Similairement, pour les paquets sortants, le routage a d'abord lieu, et le src nat opère seulement après, pour la même raison. Donc, la 'frontière' du NAT est attachée à l'interface externe plutot qu'a l'interface interne. C'est logique dans la mesure ou avec deux interfaces externes, tu NAT derrière deux IP externes différentes.

  Donc, dans ce contexte, dire que le nat est activé sur ETH2 est confus. Cela signifie probablement qu'il est activé sur ETH0, eventuellement seulement en provenance de ETH2.

  Le souci potentiel, c'est que quand la réponse à une connexion externe arrive depuis une machine interne, la réponse n'inclut aucune information qui permet de déterminer vers quelle interface router. La table du conntrack peut éventuellement révéler cette information, mais dans une configuration de nat simple il n'y a pas forcément besoin de la consulter avant la décision de routage. La faisabilité ou non de ce scénario dépend de l'implémentation (j'imagine que c'est documenté plus en détail dans ton article). Il y a un post qui indique clairement que le routage est stateless sous linux (pas bon), mais il date de 2001.

  A chaud, je dirais que le problème vient du nat, qu'il ne suffit pas de configurer une fois pour l'interface interne, mais deux pour les deux interfaces externes... mais même pas garanti que ce soit faisable.

  Peut-être que le plus simple, pour les machines internes qui doivent être accessibles a travers du DNAT depuis les deux FAIs, est d'avoir deux IP séparées. A ce moment, tu peux faire du policy routing pour assigner a chacune des ips internes une route par défaut différente..

Hors ligne

 

#3 18 Jul 2006 20:47:36

jm_special_newsgroups
Affranchi(e)
 
Date d'inscription: 17 Jul 2006
Messages: 3

Re: routage multi-carte / multi sous-reseau

Voici in extenso la page parlant du routage sur l'article en question.

2 Tables de routages
2.1 Création et initialisation des tables
Iproute2 permet de créer plusieurs tables de routages, nous allons donc créer 2 tables supplémentaires, une par connexion: TADSL et TCABLE. Les déclarations de tables sont stockés dans /etc/iproute2/rt_tables .

#echo '201 TADSL' >>/etc/iproute2/rt_tables
#echo '202 TCABLE' >>/etc/iproute2/rt_tables

La première chose à faire, est de nettoyer les différentes tables, afin d'effacer une hypothétique pollution DHCP, ainsi que les routes déjà connues du serveur.

ip route flush table TADSL
ip route flush table TCABLE
ip route flush table main ip route flush cache

2.1 Les tables de routage
Nous allons maintenant peupler la table main :

ip route add 127.0.0.0/8 dev lo src 127.0.0.1
ip route add $NET_LOCAL dev $ETH_LOCAL src $IP_LOCAL
ip route add $NET_ADSL dev $ETH_ADSL src $IP_ADSL
ip route add $NET_CABLE dev $ETH_CABLE src $IP_CABLE

Il s'agit des 3 réseaux directement accessibles. A noter qu'il est important de re-spécifier l'interface lookup, vu que nous avons complètement réinitialisé la table.

Nous allons maintenant peupler la table TADSL. Il s'agit d'une table ne tenant compte que de la connexion Internet par ADSL. Néanmoins, on y retrouve donc tout les réseaux, directement connecté, y compris le réseau de la connexion "câble".

ip route add $NET_ADSL dev $ETH_ADSL src $IP_ADSL table TADSL
ip route add $NET_LOCAL dev $ETH_LOCAL src $IP_LOCAL table TADSL
ip route add $NET_CABLE dev $ETH_CABLE src $IP_CABLE table TADSL
ip route add 127.0.0.0/8 dev lo src 127.0.0.1 table TADSL
ip route add default dev $ETH_ADSL src $IP_ADSL via $GAT_ADSL table TADSL


Idem pour la table TCABLE

ip route add $NET_CABLE dev $ETH_CABLE src $IP_CABLE table TCABLE
ip route add $NET_LOCAL dev $ETH_LOCAL src $IP_LOCAL table TCABLE
ip route add $NET_ADSL dev $ETH_ADSL src $IP_ADSL table TCABLE
ip route add 127.0.0.0/8 dev lo src 127.0.0.1 table TCABLE
ip route add default dev $ETH_CABLE src $IP_CABLE via $GAT_CABLE table TCABLE

2.3 Route par défaut
Nous allons maintenant définir la passerelle par défaut via la quelle on accèdera à internet, en l'occurrence ici, l'Adsl.

ip route add default dev $ETH_ADSL src $IP_ADSL via $GAT_ADSL


2.4 Règles de routage
Nous allons maintenant mettre en place les règles de routage.

ip rule add from $IP_CABLE pref 100 table TCABLE
ip rule add from $IP_ADSL pref 200 table TADSL
ip rule add pref 300 table main


Le principe général issu de ces règles est d'utiliser la table de routage adéquate, lorsqu'on souhaite communiquer via l'Adsl ou le Câble. Afin de communiquer via l'interface souhaitée, et avec la bonne ip source




Egalement le petit script que j'utilise pour les routes (après que ppp0 soit monté):


#Px = passerelle par defaut pour l'interface
#IPx = adresse de la carte
#Px_NET = adresse du reseau
#IFx = interface du routeur
#Tx = nom logique pour la table de routage

P1=81.36.132.254
IP1=81.36.132.166
P1_NET=81.36.132.0
IF1=eth2
T1=free

P2=193.253.160.3
IP2=193.253.93.58
P2_NET=193.253.160.0
IF2=ppp0
T2=wanadoo

P0=192.168.1.2
IP0=192.168.1.126
P0_NET=192.168.1.0/24
IF0=eth1
T0=local

#5=reseau interne
P5_NET=192.168.2.0/24

ip route flush table $T1
ip route flush table $T2
ip route add default via $P1 table $T1
ip route add default via $P2 table $T2
ip route add $P1_NET dev $IF1 src $IP1 table $T1
ip route add $P2_NET dev $IF2 src $IP2 table $T2
ip route add $P0_NET dev $IF0 table $T1
ip route add $P5_NET via $IP0 table $T1
ip route add 127.0.0.0/8 dev lo table $T1
ip route add $P0_NET dev $IF0 table $T2
ip route add $P5_NET via $IP0 table $T2
ip route add 127.0.0.0/8 dev lo table $T2

ip rule flush
ip rule add pref 32766 table main
ip rule add from $IP1 pref 100 table $T1
ip rule add from $IP2 pref 200 table $T2

ip route del default
ip route add default via $IP2 table main
ip route flush cache

Hors ligne

 

Pied de page des forums

Powered by FluxBB