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

tc шейпинг. Использование fw и u32 вместе.


0

0

Доброго дня всем!
Есть это:
/sbin/tc filter d dev eth1 parent 1:0 protocol ip prio 1 handle 10 fw flowid 1:100
И это:
/sbin/tc filter a dev eth1 parent 1:0 protocol ip prio 1 u32 ht 9:23: match ip dst 192.168.2.35/255.255.255.255 hashkey mask 0x0 at 16 flowid 1:100
По отдельности работает. А как это соединить между собой, чтобы в правиле фильтрации одновременно учитывались метки iptables и u32 селектор?

Фаервол метки делает:
[root@hoochine tc]# iptables -L -t mangle -vxn

8 480 MARK icmp — * eth1 0.0.0.0/0 0.0.0.0/0 length 28:1500 limit: avg 2/sec burst 5 MARK xset 0xa/0xffffffff



Последнее исправление: gich (всего исправлений: 2)
#создаем хеш таблицу с одним бакетом
filter add dev ${UP_DEV} protocol ip prio 5 parent 1: handle 4: u32 divisor 1"
#заворачиваем все что идет в 192.168.2.35/32 в эту хеш таблицу (4)
filter add dev ${UP_DEV} protocol ip prio 5 u32 ht 800:: match ip dst 192.168.2.35/255.255.255.255 link 4:
#в хештаблицу 4 клади свое правило которое по fw матчит
ventilator ★★★
()

Каждый критерий может быть использован только по отдельности.

Разруливай все на уровне меток iptables.

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

iptables лучше использовать как можно меньше, если хочется производительности, а как критерии поочереди использовать я показал выше.

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

Спасибо. Попробую! Собственно iptables метит только порты. Там около 10 правил. В таблицах осуществляется весь разбор по адресам дальше

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

таблицы умеет только u32 как оказалось, анонимус был в чем то прав. Пожалуй можно таким костылем сделать:

modprobe ifb
ip link set up dev ifb0
tc qdisc add dev eth1 root handle 1: htb default fe21
tc filter add dev eth1 protocol ip prio 5 u32 ht 800:: match ip dst 192.168.2.35/255.255.255.255 action mirred egress mirror dev ifb0
tc qdisc add dev ifb0 root handle 1: htb default fe21
tc filter add dev ifb0 parent 1:0 protocol ip prio 1 handle 0xa fw flowid 1:100
классы на ifb вешать. Только костыльно это. Какая полностью задача?

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

На самом деле таблицы там уже использовались. В итоге получилось что-то примерно такое:


/sbin/tc class add dev eth1 parent 1:2 classid 1:100 htb rate 5kbit ceil 10kbit prio 1
/sbin/tc class add dev eth0 parent 1:2 classid 1:100 htb rate 5kbit ceil 10kbit prio 1
/sbin/tc qdisc add dev eth1 parent 1:100 handle 100: sfq perturb 10
/sbin/tc qdisc add dev eth0 parent 1:100 handle 100: sfq perturb 10
/sbin/tc class add dev eth1 parent 1:3 classid 1:101 htb rate 136kbit ceil 136kbit
/sbin/tc class add dev eth0 parent 1:3 classid 1:101 htb rate 136kbit ceil 136kbit
/sbin/tc class add dev eth1 parent 1:101 classid 1:102 htb rate 1024bps ceil 136kbit prio 2
/sbin/tc class add dev eth0 parent 1:101 classid 1:102 htb rate 1024bps ceil 136kbit prio 2
/sbin/tc qdisc add dev eth1 parent 1:102 handle 102: sfq perturb 10
/sbin/tc qdisc add dev eth0 parent 1:102 handle 102: sfq perturb 10
/sbin/tc class add dev eth1 parent 1:101 classid 1:103 htb rate 1024bps ceil 136kbit prio 3
/sbin/tc class add dev eth0 parent 1:101 classid 1:103 htb rate 1024bps ceil 136kbit prio 3
/sbin/tc qdisc add dev eth1 parent 1:103 handle 103: sfq perturb 10
/sbin/tc qdisc add dev eth0 parent 1:103 handle 103: sfq perturb 10
/sbin/tc class add dev eth1 parent 1:101 classid 1:104 htb rate 1024bps ceil 136kbit prio 4
/sbin/tc class add dev eth0 parent 1:101 classid 1:104 htb rate 1024bps ceil 136kbit prio 4
/sbin/tc qdisc add dev eth1 parent 1:104 handle 104: sfq perturb 10
/sbin/tc qdisc add dev eth0 parent 1:104 handle 104: sfq perturb 10
/sbin/tc class add dev eth1 parent 1:101 classid 1:105 htb rate 1024bps ceil 136kbit prio 5
/sbin/tc class add dev eth0 parent 1:101 classid 1:105 htb rate 1024bps ceil 136kbit prio 5
/sbin/tc qdisc add dev eth1 parent 1:105 handle 105: sfq perturb 10
/sbin/tc qdisc add dev eth0 parent 1:105 handle 105: sfq perturb 10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip u32 ht 6:c0: match ip dst 192.0.0.0/8 hashkey mask 0xff0000 at 16 link 7:
/sbin/tc filter add dev eth0 parent 1:0 protocol ip u32 ht 6:c0: match ip src 192.0.0.0/8 hashkey mask 0xff0000 at 12 link 7:
/sbin/tc filter add dev eth1 parent 1:0 protocol ip u32 ht 7:a8: match ip dst 192.168.0.0/16 hashkey mask 0xff00 at 16 link 8:
/sbin/tc filter add dev eth0 parent 1:0 protocol ip u32 ht 7:a8: match ip src 192.168.0.0/16 hashkey mask 0xff00 at 12 link 8:
/sbin/tc filter add dev eth1 parent 1:0 protocol ip u32 ht 8:2: match ip dst 192.168.2.0/24 hashkey mask 0xff at 16 link 9:
/sbin/tc filter add dev eth0 parent 1:0 protocol ip u32 ht 8:2: match ip src 192.168.2.0/24 hashkey mask 0xff at 12 link 9:
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 ht 9:23: match ip dst 192.168.2.35/255.255.255.255 hashkey mask 0x0 at 16 flowid 1:101
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 ht 9:23: match ip src 192.168.2.35/255.255.255.255 hashkey mask 0x0 at 12 flowid 1:101
/sbin/tc filter add dev eth1 parent 1:101 protocol ip prio 1 handle 10 fw flowid 1:100
/sbin/tc filter add dev eth0 parent 1:101 protocol ip prio 1 handle 10 fw flowid 1:100
/sbin/tc filter add dev eth1 parent 1:101 protocol ip prio 2 handle 11 fw flowid 1:102
/sbin/tc filter add dev eth0 parent 1:101 protocol ip prio 2 handle 11 fw flowid 1:102
/sbin/tc filter add dev eth1 parent 1:101 protocol ip prio 3 handle 12 fw flowid 1:103
/sbin/tc filter add dev eth0 parent 1:101 protocol ip prio 2 handle 12 fw flowid 1:103
/sbin/tc filter add dev eth1 parent 1:101 protocol ip prio 4 handle 13 fw flowid 1:104
/sbin/tc filter add dev eth0 parent 1:101 protocol ip prio 4 handle 13 fw flowid 1:104
/sbin/tc filter add dev eth1 parent 1:101 protocol ip prio 5 u32 match ip dst 192.168.2.35/255.255.255.255 flowid 1:105
/sbin/tc filter add dev eth0 parent 1:101 protocol ip prio 5 u32 match ip src 192.168.2.35/255.255.255.255 flowid 1:105

#--------------------------------------------------------------------
#Легенда
#mark 10 1 преоритет в обход data цепи на прямую в канал. Полоса 10 килобит.
#mark 11 1 преоритет общий поток data цепи
#mark 12 2 преоритет общий поток data цепи
#mark 13 3 преоритет общий поток data цепи
#mark 14 4 преоритет на всякий случай. Сюда уезжает все, что в фаерволе не отмечено
# служебные пакеты, самый высокий приоритет
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --syn -m length --length 40:68 -j MARK --set-mark 10
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --tcp-flags ALL SYN,ACK -m length --length 40:68 -j MARK --set-mark 10
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --tcp-flags ALL ACK -m length --length 40:100 -j MARK --set-mark 10
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --tcp-flags ALL RST -j MARK --set-mark 10
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --tcp-flags ALL ACK,RST -j MARK --set-mark 10
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --tcp-flags ALL ACK,FIN -j MARK --set-mark 10
# icmp чтобы пинг казался шоколадным, но при этом хрен задосиш
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p icmp -m length --length 28:1500 -m limit --limit 2/s --limit-burst 5 -j MARK --set-mark 10
# траффик высокого приоритета
#interactive ssh
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --sport ssh -m length --length 40:100 -j MARK --set-mark 11
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --dport ssh -m length --length 40:100 -j MARK --set-mark 11

# тоже высокий приоритет
# исходящий, входящий траффик c порта радио и прочего потокового вещания, которое икает иначе
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --sport 8000:8500 -j MARK --set-mark 11
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --dport 8000:8500 -j MARK --set-mark 11
# Скайп, аська, тоннели, удаленное администрирование
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp -m multiport --sport 1723,4899,5060,5500,5190,8767,53835 -j MARK --set-mark 11
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp -m multiport --dport 1723,4899,5060,5500,5190,8767,53835 -j MARK --set-mark 11
# ftp,https Игрушки и иже с ними
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp -m multiport --sport 20,21,443,1725,2106,3724,6112,7777,9014,9015,27015 -j MARK --set-mark 12
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp -m multiport --dport 20,21,443,1725,2106,3724,6112,7777,9014,9015,27015 -j MARK --set-mark 12
# scp
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --sport 22 -m length --length 101: -j MARK --set-mark 12
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp --dport 22 -m length --length 101: -j MARK --set-mark 12
# Весь udp, чтобы геймеры не ныли, если сайты смотрят и торрент раздают
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p udp -j MARK --set-mark 12
# NORMAL PRI
# исходящий траффик на веб сервера и почту
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp -m multiport --dport 25:143 -j MARK --set-mark 13
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -p tcp -m multiport --sport 25:143 -j MARK --set-mark 13
# Торренты в студию! Но в самую жопу.Емуль торренты и прочее. Это делается tc фильтром в цепи 5 преоритета

Малые значения скорости выставлены для удобства и наглядности тестирования, за одно проверить не залебывается ли чего. В общем пока по тестированию идея показалась удачной.

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