Расширение фильтра tc / netem

Я новичок в tc и я нахожу это очень запутанным, я смог найти и немного понять небольшой поток команд, чтобы выдать задержку на определенном IP, но я не думаю, что он работает должным образом - задержка всего трафика, возможного для этого IP. Я думаю, что неправильно понял / не понял некоторые параметры.

Иногда это определенно работает, но у меня есть сомнения, так как это не соответствует, а если трафик иногда принимает разные приоритеты, которые не задерживаются мабые? Не уверен

(откуда я знаю - иногда я могу сломать приложение, которое отправляет запрос на сервер, на который я задерживаю трафик, иногда это работает так, как будто ничего не задерживается даже при использовании вроде 50000 мс)

Это то, что я использую:

tc qdisc add dev eth1 root handle 1: prio
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip src 1.1.1.1 flowid 1:3
tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 20000ms 
1
задан 13 June 2018 в 16:25
1 ответ

Вы может направлять фильтр только к классу или корневому диску. Поэтому, если вы хотите применить разные qdisc к каждому источнику IP, вам понадобится более одного класса. Затем у вас будет:

root qdisc <--> несколько классов <--> на qdisc в каждом классе

Затем ваш фильтр будет направлять трафик в класс, листовой qdisc этого класса будет использовать netem. Например (это часть одного из моих скриптов, это не совсем то же самое, этот код здесь, чтобы объяснить корень и листья):

# root qdisc
# Interface eth1, qdisc: htb, default leaf: 1000
tc qdisc add dev $LAN_IFACE root handle 1:0 htb default 1000 r2q 200

# root class
# Interface eth1, parent: 2:0, id: 2:11
tc class add dev $LAN_IFACE parent 1:0 classid 1:10 htb rate ${LOCAL_DL_USED}kbit ceil ${LOCAL_DL_USED}kbit quantum 100

# CLASS 1
tc class add dev $LAN_IFACE parent 1:10 classid 1:100 htb rate ${LOCAL_DL_INTERACTIVE}kbit ceil ${LOCAL_DL_INTERACTIVE}kbit burst 5k prio 0 linklayer ethernet quantum 1000
# QDISC of class 1
tc qdisc add dev $LAN_IFACE parent 1:100 handle 110: pfifo limit 1000
# FILTER to class 1
tc filter add dev $LAN_IFACE parent 1:0 protocol ip prio 0 handle 100 fw flowid 1:100

# CLASS 2
tc class add dev $LAN_IFACE parent 1:10 classid 1:200 htb rate ${LOCAL_DL_SSH}kbit ceil ${LOCAL_DL_SSH}kbit prio 1 linklayer ethernet quantum 1000
# QDISC of class 2
tc qdisc add dev $LAN_IFACE parent 1:200 handle 210: sfq perturb 10
# FILTER to class 2
tc filter add dev $LAN_IFACE parent 1:0 protocol ip prio 1 handle 200 fw flowid 1:200

Вы можете взглянуть на Путешествие к центру Linux ядро для подробных объяснений.

0
ответ дан 4 December 2019 в 03:53

Теги

Похожие вопросы