Auteur Sujet: Linux: configuration pour proposer un test de débit avec 100ms de ping en +  (Lu 4713 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 183
    • Twitter LaFibre.info
Experts Linux : configuration pour proposer un test de débit avec 100ms de ping en +

Je cherche à mettre en place un test de débit simulant une latence supplèmentaire.
J'aurais besoin de conseils d'experts Linux pour mettre en place la configuration.

Élèments à ma disposition :
- Un serveur (sans virtualisation possible)
- Deux cartes réseaux qui ont chacune leur IP publique et leur passerelle.

- Eth0 est l'interface sans latence supplèmentaire
- Eth1 est l'interface avec 100ms de latence supplèmentaire.
Pour générer la latence supplèmentaire, j'utilise NetEm (cf Tutoriel pour générer des pertes de paquets / latence / gigue sur un équipement avec NetEm)
Voici la ligne de commande utilisée : tc qdisc add dev eth1 root netem delay 100ms
Les paquets émis (et non ceux reçus) sur eth1 prennent 100ms de retard.

Voici à quoi j'ai pensé comme fichier /etc/network/interfaces :

auto eth0
iface eth0 inet static
        address 89.89.89.22
        netmask 255.255.255.252
        gateway 89.89.89.21
        metric  10

auto eth1
iface eth1 inet static
   address 89.89.89.6
   netmask 255.255.255.252
        gateway 89.89.89.5
        metric  1000


Ce qui donne en routage :
# route
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         89.89.89.21    0.0.0.0         UG    10     0        0 eth0
default         89.89.89.5     0.0.0.0         UG    1000   0        0 eth1
89.89.89.4     *               255.255.255.252 U     0      0        0 eth1
89.89.89.20    *               255.255.255.252 U     0      0        0 eth0


La problématique avec cette configuration :
après avoir mis rp_filter à 0 (sinon rien ne passe), le problème c'est que les paquets reçus par Eth1 partent par Eth0. La latence de 100ms n'est donc pas appliquée.

Quand je fais ping 89.89.89.56 depuis Internet, le paquet rentre sur le serveur par eth1 et sort par eth0 (métrique plus faible)

Ce que je cherche à faire est la chose suivante :
- Les connexions initiées par le serveur partent vers eth0 (89.89.89.22)
- Les connexions initiées par Internet sur l'IP 89.89.89.22 rentrent par eth0 et sortent par eth0
- Les connexions initiées par Internet sur l'IP 89.89.89.6 rentrent par eth1 et sortent par eth1 (avec le +100ms de NetEm)

Autre solution : que NetEm rajoute la latence de 100ms sur les paquets reçus par eth1 (au lieu des paquets émis)

Je prends aussi toutes les idées pour faire ce test avec 100ms de + sans virtualiser un serveur

corrector

  • Invité
# route
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         89.89.89.21    0.0.0.0         UG    10     0        0 eth0
default         89.89.89.5     0.0.0.0         UG    1000   0        0 eth1
89.89.89.4     *               255.255.255.252 U     0      0        0 eth1
89.89.89.20    *               255.255.255.252 U     0      0        0 eth0


La problématique avec cette configuration :
après avoir mis rp_filter à 0
Bien sûr, puisque tes routes ne définissent pas une partition des adresses IP routables : rp_filter voudrait dire que toute adresse IP routable non locale (autre que 89.89.89.4 et 89.89.89.20) est accessible uniquement via eth0 et uniquement via eth1.

le problème c'est que les paquets reçus par Eth1 partent par Eth0.
Oui, bien sûr.

Ce que je cherche à faire est la chose suivante :
- Les connexions initiées par le serveur partent vers eth0 (89.89.89.21 89.89.89.22)
- Les connexions initiées par Internet sur l'IP 89.89.89.21 89.89.89.22 rentrent par eth0 et sortent par eth0
- Les connexions initiées par Internet sur l'IP 89.89.89.5 89.89.89.6 rentrent par eth1 et sortent par eth1 (avec le +100ms de NetEm)
Autrement dit :
1) les sockets non liées localement (adresse IP locale = 0) doivent avoir IP locale = 89.89.89.22
2) les paquets avec IP source = 89.89.89.22 sortent par eth0
3) les paquets avec IP source = 89.89.89.6 sortent par eth1

Pour le 1) c'est le paramètre src de la route par défaut qui s'en charge.

Pour 2) et 3) il faut utiliser les politiques de routage avec "ip rule" :

Je pense qu'il faut quelque comme ça (pas testé) :
# politique de routage basé sur des règles

# créer les routes par défaut dans des tables spécifiques
# on nomme les tables plutôt que d'utiliser des numéros
ip route add to default   table route_to_eth0   dev eth0
ip route add to default   table route_to_eth1   dev eth1

# "table main" indique la table par défaut et pourrait être omis
# cette table est considérée en dernier
# les paquets localement générés qui ont une adresse locale 0 prennent l'adresse locale 89.89.89.22
ip route add to default   table main   src 89.89.89.22   dev eth0

# créer les sélecteurs de tables de routage
ip rule add from 89.89.89.22   table route_to_eth0
ip rule add from 89.89.89.6   table route_to_eth1

# il faut purger le cache de routage
ip route flush cache
Il faut que ces noms symboliques de tables de routage soient définis dans /etc/iproute2/rt_tables.

Pour afficher l'état des règles :
ip rule show
ip route show table all

EDIT : adresses IP corrigées
« Modifié: 24 juin 2012 à 13:26:49 par corrector »

vivien

  • Administrateur
  • *
  • Messages: 47 183
    • Twitter LaFibre.info
Merci, je vais tester ça.

vivien

  • Administrateur
  • *
  • Messages: 47 183
    • Twitter LaFibre.info
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #3 le: 17 décembre 2012 à 13:45:34 »
J'ai fait des tests avec un vieux PC équipé de deux cartes réseaux. Je n'arrive pas à faire marcher la configuration.

Environnement de test : deux box qui ont chacune une IP publique et une DMZ vers l'IP 192.168.x.100. Tous les masques sont des /24

=> Box N°1 connecté sur Eth0 : IP box 192.168.1.254 et DMZ vers 192.168.1.100
=> Box N°2 connecté sur Eth1 : IP box 192.168.0.254 et DMZ vers 192.168.0.100

Configuration réseau du PC :
# Box N°1
auto eth0
iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        gateway 192.168.1.254
        metric  10
        dns-nameservers 192.168.1.254

# Box N°2
auto eth1
iface eth1 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        gateway 192.168.0.254
        metric  100

J'ai rajouté les lignes qui vont bien à la fin du fichier /etc/iproute2/rt_tables
nano -w /etc/iproute2/rt_tables
1 route_to_eth0
2 route_to_eth1

Passage de eth0 et eth1 en fonctionnement de type routeur (je en sais pas si c'est nécessaire) :
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.eth1.rp_filter=0


Créer les routes par défaut dans des tables spécifiques :
ip route add to default table route_to_eth0 dev eth0
ip route add to default table route_to_eth1 dev eth1


Créer les sélecteurs de tables de routage :
ip rule add from 192.168.1.254 table route_to_eth0
ip rule add from 192.168.0.254 table route_to_eth1


Ce que cela donne :

ip rule show
0: from all lookup local
32764: from 192.168.0.254 lookup route_to_eth1
32765: from 192.168.1.254 lookup route_to_eth0
32766: from all lookup main
32767: from all lookup default

ip route show table all
default via 192.168.1.254 dev eth0  metric 10
default via 192.168.0.254 dev eth1  metric 100
192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.100
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.100
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.0.0 dev eth1  table local  proto kernel  scope link  src 192.168.0.100
local 192.168.0.100 dev eth1  table local  proto kernel  scope host  src 192.168.0.100
broadcast 192.168.0.255 dev eth1  table local  proto kernel  scope link  src 192.168.0.100
broadcast 192.168.1.0 dev eth0  table local  proto kernel  scope link  src 192.168.1.100
local 192.168.1.100 dev eth0  table local  proto kernel  scope host  src 192.168.1.100
broadcast 192.168.1.255 dev eth0  table local  proto kernel  scope link  src 192.168.1.100
fe80::/64 dev eth1  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101 hoplimit 255
local ::1 via :: dev lo  table local  proto none  metric 0
local fe80::215:e9ff:fe3d:b12b via :: dev lo  table local  proto none  metric 0
local fe80::215:f2ff:fe94:3244 via :: dev lo  table local  proto none  metric 0
ff00::/8 dev eth1  table local  metric 256
ff00::/8 dev eth0  table local  metric 256
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101 hoplimit 255

Depuis internet, j'arrive à me connecter en ssh sur la machine via la box N°1 (eth0) mais pas celle sur eth1.
Une analyse avec tcpdump montre que les paquets [SYN] arrivent sur eth1 mais partent via eth0.  :(

Quand je rajoute la commande suivante, je perds l’accès internet :
ip route add to default table main src 192.168.1.100 dev eth0

corrector

  • Invité
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #4 le: 18 décembre 2012 à 19:06:59 »
Configuration réseau du PC :
# Box N°1
auto eth0
iface eth0 inet static
        address 192.168.1.100

# Box N°2
auto eth1
iface eth1 inet static
        address 192.168.0.100

ip rule add from 192.168.1.254 table route_to_eth0
ip rule add from 192.168.0.254 table route_to_eth1

Déjà, il y a comme un problème!

vivien

  • Administrateur
  • *
  • Messages: 47 183
    • Twitter LaFibre.info
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #5 le: 19 décembre 2012 à 09:27:54 »
Quel problème ?

Deux box qui ont chacune leur nat et chacune leur passerelle en .254.

thenico

  • Expert.
  • Abonné OVH
  • *
  • Messages: 1 009
  • FTTH >500 Mb/s (13)
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #6 le: 19 décembre 2012 à 21:13:59 »
Quel problème ?

Deux box qui ont chacune leur nat et chacune leur passerelle en .254.

Tu n'as pas compris à quoi sert la régle ip rule from 1.2.3.4 table 123.
Cela signifie: les paquets sortants avec l'ipv4 source 1.2.3.4 doivent utiliser la table de routage 123.

« Modifié: 20 décembre 2012 à 00:26:57 par thenico »

vivien

  • Administrateur
  • *
  • Messages: 47 183
    • Twitter LaFibre.info
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #7 le: 19 décembre 2012 à 23:22:48 »
Effectivement, c'est donc :

ip rule add from 192.168.1.100 table route_to_eth0
ip rule add from 192.168.0.100 table route_to_eth1

vivien

  • Administrateur
  • *
  • Messages: 47 183
    • Twitter LaFibre.info
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #8 le: 03 janvier 2013 à 17:44:20 »
J'ai continué les tests avec mon vieux PC équipé de deux cartes réseaux. Je n'arrive toujours pas à faire marcher la configuration.

J'ai tout recopié pour éviter les différentes erreurs des posts précédents.

Environnement de test : deux box qui ont chacune une IP publique et une DMZ vers l'IP 192.168.x.100. Tous les masques sont des /24

=> Box N°1 connecté sur Eth0 : IP box 192.168.1.254 et DMZ vers 192.168.1.100
=> Box N°2 connecté sur Eth1 : IP box 192.168.0.254 et DMZ vers 192.168.0.100

Configuration réseau du PC :
# Box N°1
auto eth0
iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        gateway 192.168.1.254
        metric  10
        dns-nameservers 192.168.1.254

# Box N°2
auto eth1
iface eth1 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        gateway 192.168.0.254
        metric  100

J'ai fait des tests en modifiant le metric : il est possible de me connecter en ssh depuis Internet via l'interface qui a le metric le plus important

J'ai rajouté les lignes qui vont bien à la fin du fichier /etc/iproute2/rt_tables
nano -w /etc/iproute2/rt_tables
1 route_to_eth0
2 route_to_eth1

Passage de eth0 et eth1 en fonctionnement de type routeur (je en sais pas si c'est nécessaire) :
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.eth1.rp_filter=0


Créer les routes par défaut dans des tables spécifiques :
ip route add to default table route_to_eth0 dev eth0
ip route add to default table route_to_eth1 dev eth1


Créer les sélecteurs de tables de routage :
ip rule add from 192.168.1.100 table route_to_eth0 (à partir de cette commande, je perds l’accès à internet)
ip rule add from 192.168.0.100 table route_to_eth1

Ce que cela donne :

ip rule show
0: from all lookup local
32764: from 192.168.0.100 lookup route_to_eth1
32765: from 192.168.1.100 lookup route_to_eth0
32766: from all lookup main
32767: from all lookup default

ip route show table all
default dev eth1  table route_to_eth1  scope link
default via 192.168.0.254 dev eth1  metric 100
default via 192.168.1.254 dev eth0  metric 1000
192.168.0.0/24 dev eth1  proto kernel  scope link  src 192.168.0.100
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.100
default dev eth0  table route_to_eth0  scope link
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.0.0 dev eth1  table local  proto kernel  scope link  src 192.168.0.100
local 192.168.0.100 dev eth1  table local  proto kernel  scope host  src 192.168.0.100
broadcast 192.168.0.255 dev eth1  table local  proto kernel  scope link  src 192.168.0.100
broadcast 192.168.1.0 dev eth0  table local  proto kernel  scope link  src 192.168.1.100
local 192.168.1.100 dev eth0  table local  proto kernel  scope host  src 192.168.1.100
broadcast 192.168.1.255 dev eth0  table local  proto kernel  scope link  src 192.168.1.100
fe80::/64 dev eth1  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101 hoplimit 255
local ::1 via :: dev lo  table local  proto none  metric 0
local fe80::215:e9ff:fe3d:b12b via :: dev lo  table local  proto none  metric 0
local fe80::215:f2ff:fe94:3244 via :: dev lo  table local  proto none  metric 0
ff00::/8 dev eth1  table local  metric 256
ff00::/8 dev eth0  table local  metric 256
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101 hoplimit 255

thenico

  • Expert.
  • Abonné OVH
  • *
  • Messages: 1 009
  • FTTH >500 Mb/s (13)
Linux: configuration pour proposer un test de débit avec 100ms de ping en +
« Réponse #9 le: 03 janvier 2013 à 18:40:11 »
ip add add 192.168.1.100/24 dev eth0
ip add add 192.168.0.100/24 dev eth1

ip route flush

ip route add 192.168.1.100/24 dev eth0 scope link table route_to_eth0
ip route add 192.168.0.100/24 dev eth1 scope link table route_to_eth1
ip route add default via 192.168.1.254 dev eth0 table route_to_eth0
ip route add default via 192.168.0.254 dev eth1 table route_to_eth1

ip rule add from 192.168.1.100 table route_to_eth0
ip rule add fwmark 0xa0 table route_to_eth0
ip rule add from 192.168.0.100 table route_to_eth1
ip rule add fwmark 0xa1 table route_to_eth1

iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-xmark 0xa0/0xffffffff
iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-xmark 0xa1/0xffffffff

Oui l'utilisation de netfilter est bourrin :)