Назад | Перейти на главную страницу

Добавить задержку и случайное отбрасывание пакетов, за исключением пакетов SSH

Я хочу добавить случайную задержку / отбрасывание для всех пакетов, кроме SSH пакеты.

Я могу сделать это со всеми пакетами следующим образом:

tc qdisc change dev $NIC root netem delay 100ms 10ms 25%
tc qdisc change dev $NIC root netem loss 10% 25%

И я могу пометить пакеты SSH, используя iptables сюда:

iptables -N TOP
iptables -I OUTPUT -j TOP
iptables -A TOP -p tcp --dport 22 -j RETURN
iptables -A TOP -p tcp --sport 22 -j RETURN
iptables -A TOP -j MARK --set-mark 9

service iptables save

Но я не знаю, как их совместить? Я имею в виду, что не могу найти способ применить задержку / отбрасывание ко всем пакетам без отмеченных!

Вы действительно можете применить QoS только к исходящему трафику, так как вы не можете контролировать, что вам отправляют. Так что добавление правил в цепочку INPUT не закончится хорошо.

Вы можете использовать цель CLASSIFY в цепочке POSTROUTING таблицы mangle для классификации пакетов для работы tc.

КЛАССИФИКАЦИЯ

Этот модуль позволяет вам установить значение приоритета skb-> (и таким образом классифицировать пакет в определенный класс CBQ).

--set-class major: minor Установить значение основного и второстепенного класса. Значения всегда интерпретируются как шестнадцатеричные, даже если не указан префикс 0x.

Класс major: minor - это то, что вы используете в tc для обработки трафика. Если вы классифицируете какой-то конкретный трафик как, скажем, classid 10: 201, тогда в tc вы создаете родительский 10: 200 и добавляете к нему класс 10: 201.

Обратите внимание, что для добавления правил в цепочку POSTROUTING вы должны явно использовать таблицу mangle

iptables -t mangle -A POSTROUTING -p tcp -m tcp --sport 22 --set-class 100:22 -j CLASSIFY