Существует ли шейпер для исходящего трафика без маркировки пакетов?
Добрый день, хотелось бы узнать ли шейпер для исходящего трафика? Маркировку пакетов через iptables не предлагать, ну и готовые решения типа mastershaper. Хотелось бы увидеть примерчик
/sbin/tc qdisc add dev eth0 root handle 1: prio bands 3
/sbin/tc qdisc add dev eth0 parent 1:1 handle 10: pfifo
/sbin/tc qdisc add dev eth0 parent 1:2 handle 11: pfifo
/sbin/tc qdisc add dev eth0 parent 1:3 handle 12: htb default 0
/sbin/tc filter add dev eth0 parent 12: prio 3 handle 1: protocol ip u32 divisor 256
/sbin/tc filter add dev eth0 protocol ip parent 12: prio 3 u32 match ip dst 172.16.0.0/24 hashkey mask 0x000000ff at 16 link 1:
/sbin/tc class add dev eth0 parent 12: classid 12:15 htb rate 2048Kbit ceil 2048Kbit quantum 1514 mtu 16500
/sbin/tc qdisc add dev eth0 parent 12:15 handle 15: sfq perturb 5
/sbin/tc filter add dev eth0 protocol ip parent 12:15 prio 7 u32 ht 1:2: match ip dst 172.16.0.2 flowid 12:15
/sbin/tc class add dev eth0 parent 12: classid 12:16 htb rate 2048Kbit ceil 2048Kbit quantum 1514 mtu 16500
/sbin/tc qdisc add dev eth0 parent 12:16 handle 16: sfq perturb 5
/sbin/tc filter add dev eth0 protocol ip parent 12: prio 7 u32 ht 1:5: match ip dst 172.16.0.5 flowid 12:16
/sbin/tc class add dev eth0 parent 12: classid 12:17 htb rate 1024Kbit ceil 1024Kbit quantum 1514 mtu 16500
/sbin/tc qdisc add dev eth0 parent 12:17 handle 17: sfq perturb 5
/sbin/tc filter add dev eth0 protocol ip parent 12: prio 7 u32 ht 1:a: match ip dst 172.16.0.10 flowid 12:17
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 4 u32 match ip dst 172.16.0.0/24 flowid 1:3
Он шейпит входящий трафик eth0-локалка, eth1-провайдер.
Логично предположить чтобы шейпило исходящий трафик сделать все с точностью до наоборот на 2-м интерфейсе, можно даже без хеш таблицы:
/sbin/tc qdisc add dev eth1 root handle 1: prio bands 3
/sbin/tc qdisc add dev eth1 parent 1:1 handle 10: pfifo
/sbin/tc qdisc add dev eth1 parent 1:2 handle 11: pfifo
/sbin/tc qdisc add dev eth1 parent 1:3 handle 12: htb default 0
/sbin/tc class add dev eth1 parent 12: classid 12:15 htb rate 2048Kbit ceil 2048Kbit quantum 1514 mtu 16500
/sbin/tc qdisc add dev eth1 parent 12:15 handle 15: sfq perturb 5
/sbin/tc filter add dev eth1 protocol ip parent 12:15 prio 7 u32 ht 1:2: match ip src 172.16.0.2 flowid 12:15
/sbin/tc class add dev eth1 parent 12: classid 12:16 htb rate 2048Kbit ceil 2048Kbit quantum 1514 mtu 16500
/sbin/tc qdisc add dev eth1 parent 12:16 handle 16: sfq perturb 5
/sbin/tc filter add dev eth1 protocol ip parent 12: prio 7 u32 ht 1:5: match ip src 172.16.0.5 flowid 12:16
/sbin/tc class add dev eth1 parent 12: classid 12:17 htb rate 1024Kbit ceil 1024Kbit quantum 1514 mtu 16500
/sbin/tc qdisc add dev eth1 parent 12:17 handle 17: sfq perturb 5
/sbin/tc filter add dev eth1 protocol ip parent 12: prio 7 u32 match ip src 172.16.0.10 flowid 12:17
При таком раскладе не шейпит исходящий трафик. Однако если через iptables присвоить метки:
iptables -t mangle -A PREROUTING -s 172.16.0.2 -j MARK --set-mark 101
iptables -t mangle -A PREROUTING -s 172.16.0.2 -j RETURN
iptables -t mangle -A PREROUTING -s 172.16.0.5 -j MARK --set-mark 102
iptables -t mangle -A PREROUTING -s 172.16.0.5 -j RETURN
iptables -t mangle -A PREROUTING -s 172.16.0.10 -j MARK --set-mark 103
iptables -t mangle -A PREROUTING -s 172.16.0.10 -j RETURN
И в шейпере на исходящий трафик указать эти метки, то работает. В чем прикол не понимаю
Воспользуйтесь htb.init я им все настраивал, а потом просто гляньте что он сгенерит или почитайте все таки матчасть, ибо шейпится все таки исходящий трафик, а не входящий. www.opennet.ru/openforum/vsluhforumID11/20.html
htb.init тоже работает только с метками.Вот пример рабочего шейпера на htb.init с метками:
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 htb default 20 r2q 1
/sbin/tc qdisc del dev eth1 root
/sbin/tc qdisc add dev eth1 root handle 1 htb default 20 r2q 1
/sbin/tc class add dev eth0 parent 1: classid 1:2 htb rate 100Mbit
/sbin/tc class add dev eth0 parent 1:2 classid 1:10 htb rate 100Mbit
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip src 172.16.0.1 classid 1:10
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip src X.X.X.X classid 1:10
/sbin/tc class add dev eth0 parent 1:2 classid 1:20 htb rate 6144Kbit ceil 6144Kbit
/sbin/tc class add dev eth0 parent 1:20 classid 1:21 htb rate 5000Kbit ceil 6000Kbit prio 5
/sbin/tc qdisc add dev eth0 parent 1:21 handle 21 sfq perturb 10
/sbin/tc class add dev eth0 parent 1:21 classid 1:31 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.2 classid 1:31
/sbin/tc class add dev eth0 parent 1:21 classid 1:32 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.5 classid 1:32
/sbin/tc class add dev eth0 parent 1:21 classid 1:33 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.10 classid 1:33
/sbin/tc class add dev eth0 parent 1:21 classid 1:34 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.0/24 classid 1:34
/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 20Mbit ceil 20Mbit
/sbin/tc class add dev eth1 parent 1:2 classid 1:10 htb rate 2Mbit ceil 20Mbit prio 5
/sbin/tc qdisc add dev eth1 parent 1:10 handle 10 sfq perturb 10
/sbin/tc class add dev eth1 parent 1:10 classid 1:21 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 200 handle 101 fw classid 1:21
/sbin/tc class add dev eth1 parent 1:10 classid 1:22 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 200 handle 102 fw classid 1:22
/sbin/tc class add dev eth1 parent 1:10 classid 1:23 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 200 handle 103 fw classid 1:23
К нему нареканий нет, если бы он не тупил, да и маркировка нагружает и в логах не вываливало:
Jan 24 00:42:01 promeline kernel: [227188.455801] HTB: quantum of class 10002 is big. Consider r2q change.
Jan 24 00:42:01 promeline kernel: [227188.468883] HTB: quantum of class 10010 is big. Consider r2q change.
Jan 24 00:42:01 promeline kernel: [227188.505408] HTB: quantum of class 10020 is big. Consider r2q change.
Jan 24 00:42:01 promeline kernel: [227188.523841] HTB: quantum of class 10030 is big. Consider r2q change.
Jan 24 00:48:49 promeline kernel: [227596.549608] HTB: quantum of class 10002 is big. Consider r2q change.
Jan 24 00:48:49 promeline kernel: [227596.554105] HTB: quantum of class 10010 is big. Consider r2q change.
Jan 24 00:48:49 promeline kernel: [227596.567500] HTB: quantum of class 10020 is big. Consider r2q change.
Jan 24 00:48:50 promeline kernel: [227596.597421] HTB: quantum of class 10030 is big. Consider r2q change.
А вот если сделать на основе ip-адреса тогда шейпится только входящий, а исходящий нет:
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 htb default 20 r2q 1
/sbin/tc qdisc del dev eth1 root
/sbin/tc qdisc add dev eth1 root handle 1 htb default 20 r2q 1
/sbin/tc class add dev eth0 parent 1: classid 1:2 htb rate 100Mbit
/sbin/tc class add dev eth0 parent 1:2 classid 1:10 htb rate 100Mbit
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip src 172.16.0.1 classid 1:10
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip src X.X.X.X classid 1:10
/sbin/tc class add dev eth0 parent 1:2 classid 1:20 htb rate 6144Kbit ceil 6144Kbit
/sbin/tc class add dev eth0 parent 1:20 classid 1:21 htb rate 5000Kbit ceil 6000Kbit prio 5
/sbin/tc qdisc add dev eth0 parent 1:21 handle 21 sfq perturb 10
/sbin/tc class add dev eth0 parent 1:21 classid 1:31 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.2 classid 1:31
/sbin/tc class add dev eth0 parent 1:21 classid 1:32 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.5 classid 1:32
/sbin/tc class add dev eth0 parent 1:21 classid 1:33 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.10 classid 1:33
/sbin/tc class add dev eth0 parent 1:21 classid 1:34 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.0/24 classid 1:34
/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 20Mbit ceil 20Mbit
/sbin/tc class add dev eth1 parent 1:2 classid 1:10 htb rate 2Mbit ceil 20Mbit prio 5
/sbin/tc qdisc add dev eth1 parent 1:10 handle 10 sfq perturb 10
/sbin/tc class add dev eth1 parent 1:10 classid 1:21 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 172.16.0.2 classid 1:21
/sbin/tc class add dev eth1 parent 1:10 classid 1:22 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 172.16.0.5 classid 1:22
/sbin/tc class add dev eth1 parent 1:10 classid 1:23 htb rate 100Kbit ceil 2Mbit prio 5
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 172.16.0.10 classid 1:23
Что значит тупил? Я резал канал на 30 мегабит и ничего не тупило.
По сути если у вас серые ипы то они натятся и на исходящем интерфейсе вы не видите серых айпи адресов, поэтому приходится маркировать в ядре пакеты.
Почитайте все таки матчасть, все станет понятнее.
Переведите в гуглтранслейте HTB: quantum of class 10002 is big. Consider r2q change.
и сделав правильную настройку у вас таких строчек наверно не будет в логах.