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

Добавление задержки к исходящим UDP-пакетам с помощью tc

Я хотел бы наложить произвольную задержку на исходящие UDP-пакеты, используя фильтр fw в tc; однако я не могу заставить фильтр работать должным образом:

tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:3 handle 30: netem delay 200ms
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 1 fw flowid 1:3

iptables -A PREROUTING -i eth0 -t mangle -p udp -j MARK --set-mark 1

Если вместо этого я использую следующий фильтр u32, я получаю желаемый эффект:

tc filter add dev eth0 parent 1:0 protocol ip prio 3 u32 match ip dport 53 0xffff flowid 1:3

Я не хочу использовать фильтры u32, и, что более важно, я не могу получить --ttl-set или --set-tos манглеры для работы в Ubuntu 10.04.

Эти два могут быть совершенно не связаны, но меня беспокоит, что пакеты не помечаются iptables. Мне не удалось найти способ проверить маркировку.

Я закончил решение своей проблемы с помощью другой функции iptables вместо того --set-mark:

iptables -t mangle -A POSTROUTING -o eth0 -p udp -j CLASSIFY --set-class 1:3

Надеюсь, это поможет кому-то, когда я трудился над сложностями tc на некоторое время, прежде чем выполнить эту, казалось бы, простую задачу.

РЕДАКТИРОВАТЬ:

Энди Смит прав, я должен был отмечать цепочку POSTROUTING! Следующее правило должно работать с --set-mark:

iptables -A POSTROUTING -t mangle -p udp -j MARK --set-mark 1