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

Формирование трафика Linux tc для IPv6

У меня есть формирование трафика с tc и htb, и все работает нормально для IPv4. Теперь я хочу ограничить полосу пропускания для входящего трафика ssh / sftp IPv6 до некоторой разумной суммы, чтобы она не мешала более критическому трафику. Короче ничего не получилось:

tc class add dev eth0 parent 1:0 classid 1:14 htb rate 3000kbit ceil 3000kbit prio 3

ip6tables -A POSTROUTING -t mangle -o eth0 -p tcp --dport 22 -j MARK --set-mark 14
tc filter add dev eth0 parent 1:0 protocol ip handle 14 fw flowid 1:14
# or
tc filter add dev eth0 parent 1:0 protocol ipv6 u32 match ip6 protocol 6 0xff match ip6 dport 22 0xffff flowid 1:14
# or variations of these...

Как один трафик формирует данные IPv6 с помощью tc?

По крайней мере, на моем модеме / маршрутизаторе (Actiontec C1000A, BusyBox v1.17.2, версия ядра 2.6.30) я смог сопоставить непосредственно с IPv6-адресом назначения, используя tc (т.е. нет необходимости в ip6tables для маркировки пакетов):

tc class add dev eth0 parent 1:0 classid 1:14 htb rate 3000kbit ceil 3000kbit prio 3
tc filter add dev eth0 parent 1:0 protocol ipv6 prio 16 \
    u32 match ip6 dst $IPV6_ADDR flowid 1:14

Итак, это предположение, но я думаю, что следующее сработает:

tc filter add dev eth0 parent 1:0 protocol ipv6 prio 16 u32 match ip6 dport 80 flowid 1:14

Или, используя свой ip6tables искажение:

tc filter add dev eth0 parent 1:0 protocol ipv6 handle 14 fw flowid 1:14

К сожалению, tc пока не работает для IPv6.

Цитата:

База данных политики маршрутизации (RPDB) заменила структуру маршрутизации и адресации IPv4 в ядре Linux, что привело ко всем замечательным функциям, описанным в этом HOWTO. К сожалению, структура IPv6 в Linux была реализована вне этой базовой структуры. Хотя они и разделяют некоторые возможности, основная структура RPDB не участвует в структурах адресации и маршрутизации IPv6.

Это обязательно изменится, нам просто нужно подождать еще немного.

Источник: http://lartc.org/lartc.html#AEN1446

Если кто-нибудь знает, исправлено ли это в определенной версии ядра или есть план исправить это в будущей версии, не стесняйтесь обновлять!

Возможный обходной путь (пока я не проверял) - туннелировать трафик IPv6 (туннель SIT) и фильтровать пакеты IPv4, содержащие пакеты IPv6.