Je suis nouveau dans l'utilisation de tc et de netem . Je souhaite retarder l'envoi de paquets à une adresse IP spécifique. Cependant, les commandes ci-dessous entraînent le retard de tous les paquets sur le système, au lieu de simplement l'adresse IP 1.2.3.4:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 2: netem delay 500ms
tc filter add dev eth0 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip dst 1.2.3.4 flowid 2:1
Je suppose que j'ai besoin d'une sorte de filtre fourre-tout à la fin pour spécifier que tout le trafic restant ne doit pas passer par Netem. Mais je ne peux rien faire travailler. Comment pourrais-je faire fonctionner cela?
la source
La réponse choisie est incorrecte / incomplète. J'ai rencontré un problème similaire, la réponse choisie a donné de l'aide, mais pas assez.
Tout d'abord, la commande suivante n'est pas vraiment nécessaire.
Il «supprimera» le qdisc racine, mais sera immédiatement remplacé par un pfifo_fast (afin de ne pas perdre la connectivité).
La deuxième commande:
Remplacera le qdisc pfifo_fast par le prio one. Par défaut, la file d'attente prio a 3 bandes (0, 1, 2) chacune gérée par une classe (1: 1, 1: 2 et 1: 3).
Les paquets seront envoyés à l'une de ces bandes en utilisant le champ TOS du paquet IP. Cette configuration s'affiche lorsque vous exécutez:
en regardant les valeurs «priomap».
Ensuite, vous ajoutez un qdisc netem:
Avec cette commande, vous retardez tout le trafic vers la bande 1: 1 (jusqu'à ce que le filtre soit en place).
Mais il y a deux mises en garde:
Ce qui suit a résolu mon problème de ne pas être affecté par le netem alors que le filtre n'est pas appliqué. Au lieu des étapes ci-dessus, j'ai fait:
Cela enverra tout le trafic par défaut à la bande 1: 3.
Ensuite, j'ai ajouté la règle pour retarder le trafic:
Cela crée le qdisc dans la bande 0, mais comme tout le trafic va à la bande 3, cela ne m'a pas affecté.
Ensuite, j'ai ajouté le filtre:
Maintenant avec le filtre, seul l'IP / port choisi sera affecté, puisque nous redirigeons le trafic choisi vers la bande 0.
Tous les autres trafics ne sont pas affectés, car ils continuent de circuler vers la bande 3.
la source
Exemple simple de https://wiki.linuxfoundation.org/networking/netem qui vous permet de retarder les paquets vers une IP donnée sans affecter tout autre trafic, même pendant la configuration:
la source
Je n'ai pas réussi à retarder le trafic vers une IP tout en gardant le trafic normal aux autres IP normal avec la méthode décrite dans ce fil.
Cependant, j'arrive à le faire en utilisant les commandes suivantes.
Pour retarder le
15001ms
trafic vers IP1.2.3.4
depuis l'hôte sur lequel la commande est exécutée. La commandehostname -I
est utilisée pour obtenir l'IP principale de l'hôte mais la valeur peut être remplacée directement à l'intérieur de la commande.J'ai dû ajouter un autre filtre avec
0ms
délai pour correspondre au trafic provenant de l'hôte. C'est sûr que ce n'est pas élégant mais je n'ai pas réussi à faire quelque chose de plus agréable.La dernière commande peut être remplacée pour correspondre à un seul port.
Pour retarder le trafic vers le port
18583
au lieu de l'IP1.2.3.4
.J'ai également trouvé une deuxième méthode sur cette réponse pour retarder le trafic
1.2.3.4:18583
sans impact sur les autres trafics.la source