Auteur Sujet: Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm  (Lu 2050 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 6 938
    • Twitter LaFibre.info
Tutoriel pour générer des pertes de paquets / latence / gigue sur un équipement avec NetEm.

Matériel nécessaire : 2 cartes réseau Ethernet.

Il faut installer Linux Ubuntu car on va mettre en place un pont afin que les 2 interface Ethernet de ton PC deviennent les 2 port d'un Switch.
Il est possible d’installer Ubuntu sous Windows (il réserve un gros fichier de 5 Go dans c:\ubuntu qui simule un disque dur pour Ubuntu avec l'utilitaire Wubi.exe).

Sous linux les interface sont :
- eth0 : première interface Ethernet
- eth1 : seconde interface Ethernet
- wlan0 : première carte Wi-Fi
- br0 : le bridge que l'on va rajouter ci-dessous
- lo : LoopBack qui est une interface virtuelle présent sous linux pour que 127.0.0.1 soit ton PC

On va commencer par rajouter les paquets nécessaire. Dans la logithèque Ubuntu, installe les logiciels suivants :
- bridge-utils (permet faire le switch virtuel)
- wireshark (pour faire une capture)
- ubuntu restricted (facultatif, ce paquet installe tout ce qui aurait été installé si les licences auraient été libre. Dans la liste : flash, codec MP3, H264, java, polices TrueTypes microsoft, winrar...)

Note : Il n'y a rien à installer pour NetEm, il est directement intégré au noyau Linux d'Ubuntu.

Configuration réseau :
Démarre un terminal et tape la commande sudo nano -w /etc/network/interfaces
Cela permet d'éditer le fichier de configuration réseau en tant que super-utilisateur.
Le fichier est vide car la configuration est laissée a un outil graphique plus simple. Pour faire un pont, on est obligé de passer par cet configuration en fichier texte.


# The loopback network interface
auto lo
iface lo inet loopback

#-------------- ETH 0
auto eth0
iface eth0 inet manual

#-------------- ETH 1
auto eth1
iface eth1 inet manual

#-------------- BRIDGE 0

auto br0
iface br0 inet static
   #address 192.168.1.90
   #netmask 255.255.255.0
   #gateway 192.168.1.254
   bridge_ports eth0 eth1
   bridge_stp off
   bridge_fd 0
   bridge_maxwait 0

J'ai commenté L'IP / masque / passerelle car pas d’accès Internet. Si tu avait besoin de configurer une IP quand tu a un bridge, c'est là et pas au niveau des interface comme on le fait habituellement. Le DNS devrait déja etre renseigné automatiquement dans le fichier /etc/resolv.conf

Connecte la box sur un port Ethenet et le décodeur TV sur le second port Ethernet. Redémarre ensuite ton PC. Normalement le décodeur TV devrait fonctionne normalement. Ouvre un terminal pour lancer les commandes NetEm pour modifier les pertes de paquet / latence :

Commande Netm pour générer les pertes sur les paquets émis par l'interface Eth0 :
- Premier lancement avec 1% de paquet perdu :  sudo tc qdisc add dev eth0 root netem loss 1%
- Modification des pertes à 0,3% : sudo tc qdisc change dev eth0 root netem loss 0.3%
- Arrêt des pertes de paquets : sudo tc qdisc change dev eth0 root netem loss 0%

Commande Netm pour générer les pertes sur les paquets émis par l'interface Eth1 :
- Premier lancement avec 1% de paquet perdu :  sudo tc qdisc add dev eth1 root netem loss 1%
- Modification des pertes à 0,3% : sudo tc qdisc change dev eth1 root netem loss 0.3%
- Arrêt des pertes de paquets : sudo tc qdisc change dev eth1 root netem loss 0%

Commande NetEm pour rajouter du délai sur les paquets émis par l'interface Eth0 :
- Premier lancement avec 100ms de latence : sudo tc qdisc add dev eth0 root netem delay 100ms
- Modification de la latence à 10ms : sudo tc qdisc change dev eth0 root netem delay 10ms
- Suppression de la latence supplémentaire : sudo tc qdisc change dev eth0 root netem delay 0ms

Pour aller plus loin avec NetEm :
- http://www.linuxfoundation.org/en/Net:Netem
- http://devresources.linux-foundation.org/shemminger/netem/example.html

Capture Wireshark :
Si tu souhaites faire une capture Wireshak, il est nécessaire de démarrer Wireshark avec les droits "root" pour faire la capture. On va modifier la commande de lancement pour donner les droits "root" en rajoutant "gksudo" : Clique en haut a droite sur l’icône pour arrêter Ubuntu et clique sur "Réglages du système". Dans ce panneau de configuration, clique sur "Menu principal". Cela permet d'éditer les icônes du menu. Dans Internet, Wireshark est présent. Fait bouton droit propriétés dessus. remplace la commande wireshark par gksudo wireshark. Cela permet de démarrer Wiresahk en root.

Il est possible de faire des captures su l'interface br0 mais aussi eth0 et eth1. Si tu souhaite voir les pertes de paquets générées sur l'interface Eth0, il est nécessaire de faire la capture sur Eth0, les pertes n'étant pas présentes en entrée sur Eth1 ni sur br0.

vivien

  • Administrateur
  • *
  • Messages: 6 938
    • Twitter LaFibre.info
Autre méthode : Il est également possible de définir des alias pour mettre en place le pont

Commandes :
- pogo        : monter le pont
- postop      : démonter le pont         
- pert        : perturber le flux - arg          
         1) s (si première perturbation)    
         2) port (sortie du pont)      
         3) % perte            

Définition des Alias :


$ alias
alias dir='dir --color=auto'
alias helpme='cat /var/local/doc_alias.txt'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -l'
alias ls='ls --color=auto'
alias pert='sudo /var/local/create_perturbation.sh'
alias pogo='sudo ifconfig eth2 0.0.0.0 up &&
     sudo ifconfig eth0 0.0.0.0 up &&
     sudo brctl addbr br0 &&
     sudo brctl addif br0 eth0 &&
     sudo brctl addif br0 eth2 &&
     sudo ifconfig br0 up'
alias postop='sudo ifconfig br0 down &&
       sudo brctl delif br0 eth0 &&
       sudo brctl delif br0 eth2 &&
       sudo brctl delbr br0
       #sudo ifconfig -dynamic eth0 &&
       sudo ifconfig eth0 up &&
       #sudo ifconfig -dynamic addr eth0 &&
       sudo ifconfig eth2 up'



Fichier /var/local/create_perturbation.sh :

#!/bin/sh

echo "   ----------------------------------   "
echo "   | first use arguments : s eth X% |   "
echo "   | after : eth X%       |   "
echo "   ----------------------------------   "

if [$# = 3]
then
   sudo tc qdisc add dev "$2" root netem loss "$3"%
else
   sudo tc qdisc change dev "$1" root netem loss "$2"%
fi


Configurer un serveur pour qu'il soit à 100ms de + que normalement même aprés un reboot :
(c'est la configuration pour le serveur http://100ms.lafibre.info/ )

sudo nano -w /etc/rc.local

rajouter la ligne
/sbin/tc qdisc add dev eth0 root netem delay 100ms
avant la ligne "exit 0"


vivien

  • Administrateur
  • *
  • Messages: 6 938
    • Twitter LaFibre.info
Configuration réseau d'un PC possédant 2 cartes PCI avec 4 ports ethernet soit un total de 9 ports Ethernet.

Eth0 - carte réseau intégré au PC : Pour l’accès  à Internet sur le PC
Eth1 et Eth5 (premier port de chaque carte PCI) : Premier swith (br0) pour perturber un premier équipement
Eth2 et Eth6 (second port de chaque carte PCI) : Second swith (br1) pour perturber un premier équipement
Eth3 et Eth7 : Troisième switch (br2)
Eth4 et Eth8 : Quatrième switch(br3)


auto lo
iface lo inet loopback

#-------------- ETH 0
#auto eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
gateway 192.168.1.254


#-------------- BRIDGE 0

auto eth1
iface eth1 inet manual

auto eth5
iface eth5 inet manual

auto br0
iface br0 inet manual
bridge_ports eth1 eth5
bridge_stp off
bridge_fd 0
bridge_maxwait 0


#-------------- BRIDGE 1

auto eth2
iface eth2 inet manual

auto eth6
iface eth6 inet manual

auto br1
iface br1 inet manual
bridge_ports eth2 eth6
bridge_stp off
bridge_fd 0
bridge_maxwait 0


#-------------- BRIDGE 2

auto eth3
iface eth3 inet manual

auto eth7
iface eth7 inet manual

auto br2
iface br2 inet manual
bridge_ports eth3 eth7
bridge_stp off
bridge_fd 0
bridge_maxwait 0


#-------------- BRIDGE 3

auto eth4
iface eth4 inet manual

auto eth8
iface eth8 inet manual

auto br3
iface br3 inet manual
bridge_ports eth4 eth8
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Grincheux

  • Technicien agréé SFR
  • SFR adsl
  • *
  • Messages: 123
  • Mathenay (39)
Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm
« Réponse #3 le: 12 août 2011 à 22:39:05 »
Je vais approfondir NetEm, c'est hard et Linux j'aime pas. Je viens d'installer Ubuntu 11 la semaine dernière, je vais tester.

Un MTU de 1500 ne me semble pas optimum. Le mien en général est de 1442.

vivien

  • Administrateur
  • *
  • Messages: 6 938
    • Twitter LaFibre.info
Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm
« Réponse #4 le: 12 août 2011 à 22:58:28 »
Sur ton ubuntu lance simplement la commande sudo tc qdisc add dev eth0 root netem delay 100ms dans un terminal et tu va voir que ta latence à pris 100ms de plus.

Le tuto avec les 2 cartes Ethernet c'est si tu souhaite rajouter de la latence (ou des pertes de paquets) à un 2éme PC.

J'ai compris que tu n'aimais pas trop la ligne de commande : ne t’inquiète pas il est possible de s'en passer pour un usage classique de Linux, maintenant cela permet des fonctions avancées (qui généralement n'existent pas avec Windows).

Grincheux

  • Technicien agréé SFR
  • SFR adsl
  • *
  • Messages: 123
  • Mathenay (39)
Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm
« Réponse #5 le: 12 août 2011 à 23:04:43 »
Je ferai des essais ce week-end.

corrector

  • Free adsl
  • *
  • Messages: 2 513
  • sur Paris
Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm
« Réponse #6 le: 14 août 2011 à 00:41:55 »
Je vais approfondir NetEm, c'est hard et Linux j'aime pas.
En quoi si ce n'est pas indiscret?

Grincheux

  • Technicien agréé SFR
  • SFR adsl
  • *
  • Messages: 123
  • Mathenay (39)
Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm
« Réponse #7 le: 14 août 2011 à 09:42:14 »
Je n'aime pas Linux et mes connaissances en réseau / téléphonie sont très loin des votres.

bdecagny

  • Bbox fibre
  • *
  • Messages: 1
Tutoriel pour générer des pertes de paquets / latence / gigue avec NetEm
« Réponse #8 le: 06 septembre 2011 à 16:01:41 »
FYI

pour ce qui est de la perte de paquet, Netem est effectivement fonctionnel mais peut poser des problèmes si on souhaite avoir un effet un peu plus complexe et maitrisé.
En effet, l'option de correlation est relativement obscure et peu fonctionnelle (même buggée si on écoute certaines personnes sur le net)
Une solution possible est une évolution de Netem qu'un petit groupe a développé nommée NetemCLG.
Cette version est fonctionnelle et permet de générer des bursts de pertes de façon très précise.
Seul inconvéniant : il faut appliquer les patchs aux sources de tc et iproute2 et recompiler un kernel.
OK et testé sur kernel 2.6.32.46

http://netgroup.uniroma2.it/twiki/bin/view.cgi/Main/NetemCLG

Enjoy !!