LINUX.ORG.RU
решено ФорумAdmin

tc не видит маркированные пакеты.

 , ,


0

1

Есть сервер на Ubunut 18.04 (ядро 4.15). Два интерфейса объединены в мост. br_netfilter и xt_mark загружены.

Делаю

tc qdisc delete dev enp3s0f1 root
tc qdisc add dev enp3s0f1 root handle 1: htb

tc class add dev enp3s0f1 parent 1:0 classid 1:1 htb rate 10000mbit burst 15k  mtu 1470 quantum 1470
tc class add dev enp3s0f1 parent 1:1 classid 1:20 htb rate 10000mbit prio 00  quantum 1470
tc class add dev enp3s0f1 parent 1:20 classid 1:201 htb rate 100mbit ceil 3000mbit prio 1 burst 15k

tc qdisc add dev enp3s0f1 parent 1:201 handle 201: sfq limit 256 perturb 10 quantum 1470

tc filter add dev enp3s0f1 protocol ip parent 1:0 prio 1 handle 21 fw flowid 1:201


iptables -t mangle -F
iptables -t mangle -A POSTROUTING -m physdev --physdev-out  enp3s0f1 -m ndpi  --ssl  -j MARK --set-mark 21


Выхлопы.
root@server:~# iptables -t mangle -L POSTROUTING -vn
Chain POSTROUTING (policy ACCEPT 286M packets, 306G bytes)
 pkts bytes target     prot opt in     out     source               destination
  31M   34G MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-out enp3s0f1 ndpi protocol ssl MARK set 0x15

root@server:~# tc -s -d -r filter show dev enp3s0f1
filter parent 1: protocol ip pref 1 fw chain 0
filter parent 1: protocol ip pref 1 fw chain 0 handle 0x15 classid 1:201


но в нужный класс трафик не попадает.
tc -s class show dev enp3s0f1                                                                                                          dpi: Sun Jun  6 11:51:20 2021

class htb 1:1 root rate 10Gbit ceil 10Gbit burst 13750b cburst 0b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 187 ctokens: 15

class htb 1:20 parent 1:1 rate 10Gbit ceil 10Gbit burst 0b cburst 0b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 15 ctokens: 15

class htb 1:201 parent 1:20 leaf 10: prio rate 100Mbit ceil 3Gbit burst 15337b cburst 1125b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 19187 ctokens: 62


Второй день голову ломаю. Что ему не нравится?

★★

mangle работает, косяк где-то в tc. надо tcpdump-ить. хотя прочитав по диагонали конфигурацию ошибок какбэ не видать.

anonymous
()
Ответ на: комментарий от anonymous

Самый прикол, что недавно все работало. Поменял только скорости.

as_lan ★★
() автор топика
Ответ на: комментарий от anonymous

Тут явно что-то с tc. Я убрал все filter и оставил только

tc filter add dev enp3s0f1 parent 1:0 protocol ip u32 match ip sport 443 0xffff flowid 1:201


Но счетчики все так же по нулям.

as_lan ★★
() автор топика
Ответ на: комментарий от as_lan

Странно. Я всегда считал, что tc filter отрабатывется до iptables/nftables, в районе ingress. ( https://inai.de/images/nf-packet-flow.svg )

Так что то, что ты не видишь в «tc -s -d -r filter show dev enp3s0f1» imho нормально.

Добавь фильтр action simple (man 8 tc-simple)

Вместе с -j TRACE/-j LOG можно понять в какой момент где и что происходит.

vel ★★★★★
()

Что-то я запутался. Зачем классифицировать трафик в двух местах?

PS Кстати, я классифицирую в FORWARD. Не знаю, что там будет в POSTROUTING. Хотя, qdisc сидит на выходе.

Oleg_Iu
()
Ответ на: комментарий от Oleg_Iu

Я не в двух местах. Я просто для проверки во всех цепочках делал. -j LOG говорит, что пакет промаркирован.

as_lan ★★
() автор топика
Ответ на: комментарий от as_lan

А, ну да. Не туда посмотрел.

Я бы предложил tc filter убрать совсем, а в iptables не маркировать, а сразу классифицировать, что-то типа такого

iptables -t mangle -A FORWARD -o enp3s0f1 -m ndpi --ssl -j CLASSIFY --set-class 0001:0015
Oleg_Iu
()
Ответ на: комментарий от Oleg_Iu

А вы хорошую наводку дали. Действительно. Заменил protocol ip на protocol all и трафик пошел. Но тогда prio в filter нельзя использовать

as_lan ★★
() автор топика
Ответ на: комментарий от Oleg_Iu

Да. Опцией protocol просто проверяются 2 байта после Source MAC.

i586 ★★★★★
()

Всем спасибо. Проблема решена.

as_lan ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.