Обрана відповідь невірна / неповна. Я зіткнувся з подібним питанням, обрана відповідь дала деяку допомогу, але недостатньо.
По-перше, наступна команда насправді не потрібна.
tc qdisc del dev eth0 root
Він 'видалить' корінь qdisc, але негайно замінить його на pfifo_fast (так що ви не втратите підключення).
Друга команда:
tc qdisc Додати dev eth0 root ручка 1: prio
Буде замінювати pfifo_fast qdisc пріоритетним. За замовчуванням у черзі пріорі є 3 смуги (0, 1, 2), кожна з яких керується одним класом (1: 1, 1: 2 та 1: 3).
Пакети будуть відправлені в один з цих діапазонів, використовуючи поле TOS пакету IP. Ця конфігурація відображається при виконанні:
tc qdisc ls
дивлячись на значення 'пріомапи'.
Потім ви додаєте netem qdisc:
tc qdisc додати dev eth0 батьків 1: 1 ручка 2: затримка netem 500ms
За допомогою цієї команди ви затримуєте весь трафік, що йде до смуги 1: 1 (поки фільтр не буде встановлений).
Але є два застереження:
- Ваш трафік може мати інше значення TOS, після чого він буде відправлений в інший діапазон.
- Пріоритет qdisc може бути налаштований так, що трафік переходить в іншу смугу.
Наступне вирішило мою проблему, щоб нетем не вплинуло, поки фільтр не застосовано. Замість описаних вище кроків я зробив:
tc qdisc додати кореневу обробку dev eth0 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Це передасть увесь трафік за замовчуванням до смуги 1: 3.
Потім я додав правило про затримку руху:
tc qdisc додати dev eth0 батьків 1: 1 ручка 10: затримка немета 100ms 10ms
Це створює qdisc в діапазоні 0, але оскільки весь трафік йде в діапазон 3, на мене це не вплинуло.
Потім я додав фільтр:
tc фільтр додавати протокол dev eth0 ip батьків 1: 0 prio 1 u32 матч ip dst 10.0.0.1/32 матч ip dport 80 0xffff flowid 1: 1
Тепер з фільтром впливатиме лише обраний IP / порт, оскільки ми перенаправляємо вибраний трафік до смуги 0.
Весь інший трафік не змінюється, оскільки він продовжує надходити до смуги 3.