next up previous contents Next:  Aliasing d'interfaces - Multiples Up: Introduction à IP. Previous: Scripts réseau de Debian.   Table des matières  


26.8  Routage complexe - Exemple ``à sauts          multiples''.

Considérons deux réseaux LAN qui doivent communiquer entre eux. Deux machines (une dans chaque LAN) jouent le rôle de relai. En l'occurence, elles sont connectées par une ligne série permanente (voir la figure 9).


Figure 9:
Cas de deux réseaux interconnectés (B-C) et communiquant avec l'internet par X.
Image rmtlynet


Ce montage peut être réduit à cinq machines ``clés'' X, A, B, C et D. Les machines X, A et B forment le réseau LAN 1 192.168.1.0/26. Les machines C et D constituent le réseau LAN 2 192.168.1.128/26. Remarquez qu'en attribuant 26 bits sur les 32 associés à l'adressage (c'est la notation ``/26'' que nous venons d'utiliser), on fait de LAN 1 et de LAN 2 des réseaux de classe C. Les 6 autres bits sont utilisés pour les adresses IP des machines. Ceci implique donc qu'il ne peut y avoir au plus que $2^{6}=64$ adresses IP pour chaque LAN. Le lien série de communication entre LAN 1 et LAN 2 doit être établi entre les machines B et C.

La machine X a pour adresse IP (dans LAN 1): 192.168.1.1. Cette machine est une passerelle vers l'internet. Le port Ethernet de la machine B est simplement configuré avec une adresse IP 192.168.1.2 et la passerelle par défaut (pour pouvoir sortir vers l'internet via X) est 192.168.1.1. Observez que l'adresse de broadcast est 192.168.1.63 (les 6 derniers bits valent 1).

Le port Ethernet de la machine C (LAN 2) est configuré avec une adresse IP égale à 192.168.1.129. Aucune passerelle par défaut ne devrait être déclarée avant que la connexion série ne soit configurée.

Nous devons établir le réseau entre B et le sous-réseau 192.168.1.128/26 via la machine C. Il s'agit d'un sous-réseau en soi, même s'il n'y a que deux machines interconnectées. Nous allons attribuer les adresses 192.168.1.252 à la machine B et 192.168.1.253 à la machine C pour ce qui concerne les ports se faisant face. Ceci constitue un exemple réel avec un lien série non fiable. Sont requis, pppd [NdT: le démon pppd est associé au Point-to-Point Protocol qui fournit une méthode de transmission des datagrammes via des liens séries en mode point-à-point. Voir pppd(8).] pour conserver le lien actif et, un script shell pour redémarrer le lien s'il disparaissait. Le script sur la machine B sera:

#/!bin/sh 
while true;do 
   pppd lock local mru 296 mtu 296 nodetach nocrtscts nocdtrcts \ 
   192.168.1.252:192.168.1.253 /dev/ttyS0 115200 noauth \ 
   lcp-echo-interval 1 lcp-echo-failure 2 lcp-max-terminate 1 lcp-restart 1 
done 


Notez que si le lien était de type Ethernet (sur une seconde carte Ethernet de la machine B) et que nous avions à faire à un véritable LAN entre les machines B et C (avec un sous-réseau 192.168.1.252/26), le script équivalent serait:

/sbin/ifconfig eth1 192.168.1.252 broadcast 192.168.1.255 netmask 255.255.255.192 


Dans ce cas, tous les ppp0 seraient changés en eth1 dans les scripts qui suivent.

Le routage sur la machine B est réalisé avec le script suivant, pourvu que le lien soit activé. Le script doit être exécuté chaque fois que pppd vient de négocier la connexion et il peut donc être placé dans le fichier /etc/pppd/ip-up. Ce script sera exécuté par pppd automatiquement dès que l'interface ppp0 est disponible:

/sbin/route del default 
/sbin/route add -net 192.168.1.192 netmask 255.255.255.192 dev ppp0 
/sbin/route add -net 192.168.1.128 netmask 255.255.255.192 gw 192.168.1.253 
/sbin/route add default gw 192.168.1.1 
 
echo 1 > /proc/sys/ipv4/ip_forward 


Notre table de routage complète et la liste des interfaces pour la machine B ressemblent à ceci [RedHat 6 préfère ajouter des routes explicites (redondantes) pour chaque périphérique, ce qui n'est pas nécessaire sur votre système]: 
 
Kernel IP routing table
Destination 
192.168.1.2 
192.168.1.253 
192.168.1.0 
192.168.1.192 
192.168.1.128 
127.0.0.0 
0.0.0.0 
 
Gateway 
0.0.0.0 
Gateway 
0.0.0.0 
0.0.0.0 
0.0.0.0 
0.0.0.0 
192.168.1.253 
0.0.0.0 
192.168.1.1 
 
Genmask 
255.255.255.255 
Genmask 
255.255.255.255 
255.255.255.255 
255.255.255.192 
255.255.255.192 
255.255.255.192 
255.0.0.0 
0.0.0.0 
Flags 
UH 
Flags 
UH 
UH 
U 
U 
UG 
U 
UG
Metric 
0 
Metric 
0 
0 
0 
0 
0 
0 
0 
Ref 
0 
Ref 
0 
0 
0 
0 
0 
0 
0 
Use 
0 
Use 
0 
0 
0 
0 
0 
0 
0 
Iface 
eth0 
Iface 
eth0 
ppp0 
eth0 
ppp0 
ppp0 
lo 
eth0

eth0   Link  encap:Ethernet  HWaddr  00:A0:24:75:3B:69 
       inet addr:192.168.1.2 Bcast:192.168.1.63 Mask:255.255.255.192 
lo     Link encap:Local Loopback 
       inet addr:127.0.0.1 Mask:255.0.0.0 
ppp0   Link encap:Point-to-Point Protocol 
       inet addr:192.168.1.252 P-t-P:192.168.1.253 Mask:255.255.255.255 


Sur la machine C, nous pouvons exécuter le script suivant:

#/!bin/sh 
while true; do 
   pppd lock local mru 296 mtu 296 nodetach nocrtscts nocdtrcts \ 
   192.168.1.253:192.168.1.252 /dev/ttyS0 115200 noauth \ 
   lcp-echo-interval 1 lcp-echo-failure 2 lcp-max-terminate 1 lcp-restart 1 
done 


et, à présent, créer les routes avec les commandes:

/sbin/route del default 
/sbin/route add -net 192.168.1.192 netmask 255.255.255.192 dev ppp0 
/sbin/route add default gw 192.168.1.252 
 
echo 1 > /proc/sys/net/ipv4/ip_forward 


La table de routage complète pour la machine C devrait ressembler à ceci:


Kernel IP routing table
Destination 
192.168.1.129 
192.168.1.252 
192.168.1.192 
192.168.1.128 
127.0.0.0 
0.0.0.0 
Gateway 
0.0.0.0  
0.0.0.0 
0.0.0.0 
0.0.0.0 
0.0.0.0 
192.168.1.252 
Genmask 
255.255.255.255 
255.255.255.255 
255.255.255.192 
255.255.255.192 
255.255.255.0 
0.0.0.0 
Flags 
UH 
UH 
U 
U 
U 
UG 
Metric 
0 
0 
0 
0 
0 
0 
Ref 
0 
0 
0 
0 
0 
0 
Use 
0 
0 
0 
0 
0 
0  
Iface 
eth0 
ppp0 
ppp0 
eth0 
lo 
ppp0 

eth0   Link encap:Ethernet HWaddr 00:A0:CC:D5:D8:A7 
       inet addr:192.168.1.129 Bcast:192.168.1.191 Mask:255.255.255.192 
lo     Link encap:Local Loopback 
       inet addr:127.0.0.1 Mask:255.0.0.0 
ppp0   Link encap:Point-to-Point Protocol 
       inet addr:192.168.1.253 P-t-P:192.168.1.252 Mask:255.255.255.255 



La machine D peut être configurée comme toute machine ordinaire d'un LAN. Il faut lui indiquer que la passerelle par défaut est 192.168.1.129. En revanche, la machine A doit être capable d'envoyer des paquets destinés au sous-réseau 192.168.1.128/26 via la machine B. Sa table de routage doit donc présenter une ligne pour le LAN 192.168.1.128/26. La table de routage complète de la machine A est:

Kernel IP routing table
Destination 
192.168.1.0 
192.168.1.128 
127.0.0 
0.0.0.0 
 
Gateway 
0.0.0.0 
102.168.1.2 
0.0.0.0 
192.168.1.1 
Genmask 
255.255.255.192 
255.255.255.192 
255.255.0.0 
0.0.0.0 
Flags 
U 
UG 
U 
UG 
Metric 
0 
0 
0 
0 
Ref 
0 
0 
0 
0 
Use 
0 
0 
0 
0 
Iface 
eth0 
eth0 
lo 
eth0 


De manière à éviter de devoir ajouter cette route supplémentaire sur la machine A, vous pouvez décrire la même route sur la machine X. Ceci peut sembler curieux, mais cela signifie que tous les paquets provenant de A et destinés au réseau LAN 2 doivent d'abord essayer de passer par X (vu qu'A ne possède qu'une route), et ensuite, ils seront redirigés par X pour passer via B.

La configuration qui précède permet aux machines d'envoyer correctement les paquets entre les machines A et D mais également sur l'internet. Un avertissement toutefois: parfois la commande ping (voir la sous-section 26.10.1) ne fonctionne pas alors que telnet est opérationnel. Ceci peut être une particularité de certaines versions du noyau que nous utilisons, **shrug** [sic].


next up previous contents Next:  Aliasing d'interfaces - Multiples Up: Introduction à IP. Previous: Scripts réseau de Debian.   Table des matières  
1-01-2006