Чуть не вывихнул мозг, разбираясь с «Linux Advanced Routing & Traffic Control», и наконец-то дописал правила TC для домашнего роутера, а теперь представляю Вам на рецензию.
Имеется входящий 4-мегабитный канал от Avangard DSL с 8-мегабитной внутренней локальной сетью и «Яндекс.Локальная сеть». Максимальная скорость исходящего канала так же варьируется, в моем случае от полумегабита до мегабита.
Весь трафик разделен на 5 частей:
- SSH — для беспрепятственного доступа на шлюз извне;
- ICMP (для красивого пинга) + DNS — опытным путем выявлено, что быстрый ответ DNS-сервера влияет на работу;
- IM (ICQ, Jabber);
- Почта и HTTP(S);
- Остальной трафик, к которому в частности относится торрент-трафик.
Приоритезация делалась в основном для того, чтобы не останавливать и не ограничивать торрент-клиент, когда пользователи домашней сети сёрфят Интернеты.
#!/bin/bash
ip link set dev ifb0 down >/dev/null 2>&1
modprobe ifb
ip link set dev ifb0 up
# reset all qdisc
tc qdisc del dev ppp0 root > /dev/null 2>&1
tc qdisc del dev ifb0 root > /dev/null 2>&1
tc qdisc del dev ppp0 ingress > /dev/null 2>&1
tc qdisc del dev ifb0 ingress > /dev/null 2>&1
#
tc qdisc add dev ppp0 root handle 1:0 htb default 15 r2q 1
tc qdisc add dev ifb0 root handle 1:0 htb default 15 r2q 1
tc qdisc add dev ppp0 handle ffff: ingress
tc class add dev ppp0 parent 1: classid 1:1 htb rate 512kbit ceil 1mbit
tc class add dev ifb0 parent 1: classid 1:1 htb rate 8mbit ceil 8mbit
#
tc class add dev ppp0 parent 1:1 classid 1:11 htb rate 512kbit ceil 1mbit prio 1
tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 512kbit ceil 1mbit prio 2
tc class add dev ppp0 parent 1:1 classid 1:13 htb rate 512kbit ceil 1mbit prio 3
tc class add dev ppp0 parent 1:1 classid 1:14 htb rate 256kbit ceil 1mbit prio 4
tc class add dev ppp0 parent 1:1 classid 1:15 htb rate 8kbit ceil 1mbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:11 htb rate 8mbit ceil 8mbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:12 htb rate 8mbit ceil 8mbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:13 htb rate 8mbit ceil 8mbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:14 htb rate 4mbit ceil 8mbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:15 htb rate 8kbit ceil 8mbit prio 5
#
tc qdisc add dev ppp0 parent 1:11 handle 11: sfq perturb 10 quantum 1500
tc qdisc add dev ppp0 parent 1:12 handle 12: sfq perturb 10 quantum 1500
tc qdisc add dev ppp0 parent 1:13 handle 13: sfq perturb 10 quantum 1500
tc qdisc add dev ppp0 parent 1:14 handle 14: sfq perturb 10 quantum 1500
tc qdisc add dev ppp0 parent 1:15 handle 15: sfq perturb 10 quantum 1500
tc qdisc add dev ifb0 parent 1:11 handle 11: sfq perturb 10 quantum 1500
tc qdisc add dev ifb0 parent 1:12 handle 12: sfq perturb 10 quantum 1500
tc qdisc add dev ifb0 parent 1:13 handle 13: sfq perturb 10 quantum 1500
tc qdisc add dev ifb0 parent 1:14 handle 14: sfq perturb 10 quantum 1500
tc qdisc add dev ifb0 parent 1:15 handle 15: sfq perturb 10 quantum 1500
#
# ssh
tc filter add dev ppp0 parent 1:0 prio 1 protocol ip u32 match ip protocol 6 0xff match ip dport 22 0xfffe classid 1:11
tc filter add dev ppp0 parent 1:0 prio 1 protocol ip u32 match ip protocol 6 0xff match ip sport 22 0xfffe classid 1:11
tc filter add dev ifb0 parent 1:0 prio 1 protocol ip u32 match ip protocol 6 0xff match ip dport 22 0xfffe classid 1:11
tc filter add dev ifb0 parent 1:0 prio 1 protocol ip u32 match ip protocol 6 0xff match ip sport 22 0xfffe classid 1:11
# icmp
tc filter add dev ppp0 parent 1:0 prio 2 protocol ip u32 match ip protocol 1 0xff classid 1:12
tc filter add dev ifb0 parent 1:0 prio 2 protocol ip u32 match ip protocol 1 0xff classid 1:12
# dns
tc filter add dev ppp0 parent 1:0 prio 2 protocol ip u32 match ip dport 53 0xffff classid 1:12
tc filter add dev ifb0 parent 1:0 prio 2 protocol ip u32 match ip sport 53 0xffff classid 1:12
# icq
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 5190 0xffff classid 1:13
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 5190 0xffff classid 1:13
# jabber
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 5222 0xffff classid 1:13
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 5223 0xffff classid 1:13
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 5222 0xffff classid 1:13
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 5223 0xffff classid 1:13
# smtp
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 25 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 25 0xffff classid 1:14
# pop3
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 110 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 110 0xffff classid 1:14
# imap
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 143 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 143 0xffff classid 1:14
# ftp
tc filter add dev ppp0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip dport 20 0xffff classid 1:14
tc filter add dev ppp0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip dport 21 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip sport 20 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip sport 21 0xffff classid 1:14
# http
tc filter add dev ppp0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip dport 80 0xffff classid 1:14
tc filter add dev ppp0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip sport 80 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip dport 80 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 4 protocol ip u32 match ip protocol 6 0xff match ip sport 80 0xffff classid 1:14
# https
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 443 0xffff classid 1:14
tc filter add dev ppp0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 443 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip dport 443 0xffff classid 1:14
tc filter add dev ifb0 parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match ip sport 443 0xffff classid 1:14
#
tc filter add dev ppp0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0