Simuler un réseau WAN entre deux réseaux LAN
A partir de sa version 2.6, le noyau Linux dispose d'une fonction permettant de simuler certaines caractéristiques comme un délais de transit, une perte de paquets ou même un débit maximal sur une simple interface réseau locale. J'avais déjà parlé de ce sujet il y a quelques temps pour simuler une liaison WAN entre une machine et son réseau. Suite à une question d'un lecteur, voici un billet dans lequel nous allons mettre en place un simulateur de liaison WAN entre deux réseaux LAN. Cette infrastructure pourra être utile à toutes personnes devant valider sur table une architecture inter-site.
De quoi avons nous besoin ?
Pour bâtir cette infrastructure, nous avons besoins de deux réseaux LAN (mais deux PC peuvent suffirent) et d'une machine GNU/Linux disposant de deux interfaces réseaux permettant de faire un pont entre ces deux LAN. Le choix d'une architecture en pont (bridgé) permet d'insérer facilement le simulateur dans une architecture réseau existante.
Configuration du bridge
Personnellement, j'ai utilisé une distribution GNU/Linux Debian Squeeze pour mettre en place le simulateur. Mais toutes les distributions GNU/Linux avec une version de Kernel >= 2.6 peuvent faire l'affaire.
Après une installation standard du système d'exploitation Debian, il faut ajouter le paquet bridge-utils pour permettre à ce dernier de créer le pont entre les deux interfaces réseaux:
sudo aptitude install bridge-utils
Il faut ensuite éditer le fichier de configuration /etc/network/interfaces de la manière suivante:
auto lo
iface lo inet loopback
iface eth0 inet manual
iface eth1 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1
Puis on fait prendre en compte cette configuration par le système:
sudo /etc/init.d/networking restart
Note: il faut attendre une trentaine de seconde lors de l'initialisation.
On vient donc de créer une nouvelle interface virtuelle (br0) qui fait un pont entre les deux interfaces physiques (eth0 et eth1).
Si vous connectez en l'état le simulateur entre vos deux LAN, tout le trafic transitera de manière transparente à la vitesse maximale de vos interfaces eth0 et eth1.
Configuration du simulateur
On passe maintenant à la partie intéressante de ce billet: comment simuler un lien WAN à partir de notre simulateur.
Vous allez voir que c'est relativement simple. Nous allons utiliser un script de configuration automatique qui va activer / désactiver le simulateur à la demande. Les caractéristiques du WAN à simuler seront codées en dur dans la section configuration du script. A vous de l'adapter à vos besoins.
Voici le script en question (également disponible sur mon GitHub):
#!/bin/bash # # simulwan-bridge.sh # Nicolargo - 2012 # ############################################################################## # Nom des interfaces ou l'on doit faire les simulations # eth0 cote LAN local # eth1 cote LAN distant IF=eth1 # Liaison sortante (UPLOAD) a appliquer sur IF # Debit sortant BWU=8mbit # Délai de transit sortant DELAYU=15ms # % de paquets perdus sortant LOSSU=0.0001% # Liaison entrante (DOWNLOAD) a appliquer sur IF # Debit entrant BWD=1mbit # Délai de transit entrant DELAYD=15ms # % de paquets perdus entrant LOSSD=0.00001% ############################################################################## start() { modprobe ifb ip link set dev ifb0 up tc qdisc add dev $IF ingress tc filter add dev $IF parent ffff: \\ protocol ip u32 match u32 0 0 flowid 1:1 \\ action mirred egress redirect dev ifb0 # Liaison entrante tc qdisc add dev ifb0 root handle 1:0 \\ netem delay $DELAYD 10ms distribution normal \\ loss $LOSSD 25% tc qdisc add dev ifb0 parent 1:1 handle 10: \\ tbf rate $BWD buffer 3200 limit 6000 # Liaison sortante tc qdisc add dev $IF root handle 2:0 \\ netem delay $DELAYU 10ms distribution normal \\ loss $LOSSU 25% tc qdisc add dev $IF parent 2:1 handle 10: \\ tbf rate $BWU buffer 3200 limit 6000 } stop() { tc qdisc del dev ifb0 root tc qdisc del dev $IF root # ip link set dev ifb0 down } restart() { stop sleep 1 start } show() { echo "Liaison entrante" tc -s qdisc ls dev ifb0 echo "Liaison sortante" tc -s qdisc ls dev $IF } case "$1" in start) echo -n "Starting WAN simul: " start echo "done" ;; stop) echo -n "Stopping WAN simul: " stop echo "done" ;; restart) echo -n "Restarting WAN simul: " restart echo "done" ;; show) echo "WAN simul status for $IF:" show echo "" ;; *) echo "Usage: $0 {start|stop|restart|show}" ;; esac exit 0
Par défaut, le script simule une liaison WAN de type ADSL (8 Mbps en download et 1 Mbps en upload avec un délais de transit de 30ms en aller/retour et un taux de perte de 10^-4).
Pour l'installer, il suffit de saisir les commandes suivantes:
sudo wget -O /etc/init.d/simulwan.sh https://raw.github.com/nicolargo/simulwan/master/simulwan-bridge.sh sudo chmod a+x /etc/init.d/simulwan.sh
Pour lancer le simulateur WAN:
sudo /etc/init.d/simulwan.sh start
Pour arrêter le simulateur WAN:
sudo /etc/init.d/simulwan.sh stop
Pour avoir un état des interfaces:
sudo /etc/init.d/simulwan.sh show
Conclusion
Vous venez donc à moindre coût de mettre en place une architecture permettant de simuler des liaisons WAN. Le PC sur lequel se base votre simulateur n'a pas besoin d'être une bête de course et vous pouvez donc facilement récupérer du vieux matériel pour mettre en place ce système.
Cet article Simuler un réseau WAN entre deux réseaux LAN est apparu en premier sur Le blog de NicoLargo.