LINUX.ORG.RU
ФорумAdmin

ndpi-netfilter - правила

 , ,


0

1

Доброго времени суток. Собрал из GitHub самую свежую ветку flow_info-3.2. Пока без патча ядра. По моим представлениям (ложным?), патч нужен если не хотеть пользоваться connlabel.

Дальше: modprobe xt_ndpi bt_hash_size=32 bt_hash_timeout=1200 ndpi_enable_flow=1

cat /proc/net/xt_ndpi/flows - работает.

Хочу использовать в tc.

Пробовал конструкции и типа: iptables -t mangle -A POSTROUTING -m ndpi –proto bittorrent -j CLASSIFY –set-class 1:12

и типа: iptables -t mangle -A POSTROUTING -o eth0 -j NDPI –ndpi-id –set-clsf

плюс: echo «bittorrent 10012» >/proc/net/xt_ndpi/proto

Все равно все летит в дефолтную очередь. Может я не правильно решил, что патч для классификации не нужен? Подскажите, плиз.


Для справки. Очереди собираются (чисто для тестов) вот так:

#!/bin/bash

export tc="/sbin/tc"

iface="enp2s0"

speed_full="10mbit"
speed_big="9mbit"
speed_low="5mbit"
speed_fix="1mbit"

${tc} qdisc del dev ${iface} root

${tc} qdisc add dev ${iface} root handle 1: htb default 14

${tc} class add dev ${iface} parent 1: classid 1:1 htb rate ${speed_full} ceil ${speed_full} burst 12500
${tc} class add dev ${iface} parent 1:1 classid 1:12 htb rate ${speed_big} ceil ${speed_full} burst 12500
${tc} class add dev ${iface} parent 1:1 classid 1:13 htb rate ${speed_low} ceil ${speed_full} burst 12500
${tc} class add dev ${iface} parent 1:1 classid 1:14 htb rate ${speed_fix} ceil ${speed_fix} burst 12500

tc qdisc add dev ${iface} parent 1:12 handle 20: pfifo limit 500
tc qdisc add dev ${iface} parent 1:13 handle 30: sfq perturb 10
tc qdisc add dev ${iface} parent 1:14 handle 40: sfq perturb 10

lsmod | grep ifb 2>&1>/dev/null;
if [ $? = 1 ]; then
        modprobe ifb numifbs=1
        ip link set dev ifb0 up
        echo "Load IFB module"
else
        echo "IFB module already loaded"
fi;

${tc} qdisc del dev ${iface} ingress
${tc} qdisc add dev ${iface} handle ffff: ingress
${tc} filter add dev ${iface} parent ffff: protocol ip prio 10 u32 match u32 0 0 action xt -j MARK --set-mark 0x02 action mirred egress redirect dev ifb0

iface="ifb0"

${tc} qdisc del dev ${iface} root
${tc} qdisc add dev ${iface} root handle 1: htb default 14
${tc} class add dev ${iface} parent 1: classid 1:1 htb rate ${speed_full} ceil ${speed_full} burst 12500
${tc} class add dev ${iface} parent 1:1 classid 1:12 htb rate ${speed_big} ceil ${speed_full} burst 12500
${tc} class add dev ${iface} parent 1:1 classid 1:13 htb rate ${speed_low} ceil ${speed_full} burst 12500
${tc} class add dev ${iface} parent 1:1 classid 1:14 htb rate ${speed_fix} ceil ${speed_fix} burst 12500

tc qdisc add dev ${iface} parent 1:12 handle 20: pfifo limit 500
tc qdisc add dev ${iface} parent 1:13 handle 30: sfq perturb 10
tc qdisc add dev ${iface} parent 1:14 handle 40: sfq perturb 10

MARK делаю, чисто для логирования.

artp ()

Патч не нужен, если не используется connlabel.

Не заметил, что ты пытаешься работать с ifb

ifb это достаточно унылая, но якобы идеологически правильная поделка. Она работает до iptables/nftables

В твоем варианте проще всего использовать imq. Но это обязательный патч на ядро.

С ifb оно теоретически тоже будет работать, но нужно использовать action который умеет получать из connmark метку, а в ndpi кроме пакета нужно маркировать соединение через CONNMARK, тогда ifb тоже будет работать.

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

@vel , спасибо за ответ. Я уже и сам дообразовался до понимания, что ifb, в отличие от imq, живет ДО нетфильтра и начал размышлять нельзя ли, что-то скомбинировать с CONNMARK. Буду пробовать обоими способами (ifb и imq). Стало интересно, как получится проще (изящнее?).

Не посоветуешь, imq брать из https://github.com/imq/linuximq или откуда-то еще? Я видел, что ты им занимался, но сложилось ощущение, что ты довольно давно с ним завязал.

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

linuximq у меня живет и я на новые ветки патчи применял без рашпиля.

Я старый и мне уже лень каждый раз выкладывать изменения, тем более, что у меня немного отличается реализация самого устройства imqX в плане поддержки netns.

В борьбе с ifb тебе видимо может помочь «man 8 tc-connmark»

vel ★★★★★ ()