kayot Posted August 20, 2013 Posted August 20, 2013 (edited) Есть soft-BRAS на linux, терминирующий IPOE клиентов. У сервера 2 интерфейса - bond0 в мир(тут все понятно и просто) и bond1 с qinq на клиентов(тут возникают проблемы). Биллинговая система генерирует готовые развесистые конфиги для batch tc. Если вешаю шейпер на конечный клиентский влан(bond1.2000.1000 к примеру) - естественно работает. Вешаю на bond1.2000 - как ни странно тоже работает, клиентские вланы режутся. Но если повесить на основной интерфейс bond1 - не работает. И это портит всю красоту картины, тех же svlan несколько сотен и вешать по экземпляру на каждый - расточительство, да и смысл классового шейпера пропадает. В данный момент обошел проблему с помощью ifb и заворота трафика с аплинк-порта, но IMHO это костыль для машины без PPP-тоннелей. Как заставить tc понимать трафик с 2 метками и почему он собака видит трафик 1 меткой? Дебажил в меру сил ситуацию, на интерфейсе bond1 не отрабатывают фильтры, такое ощущение что TC считает что этот трафик вообще не IP. Вот кусок кусок конфига, использовал его для экспериментов // корень с дефолтным классом без ограничений qdisc add dev bond0.2 root handle 2 htb default d class add dev bond0.2 root htb rate 2000Mbit ceil 2000Mbit quantum 65535 // не режем внутрисетевой трафик class add dev bond0.2 parent 2:0 classid 2:7 htb rate 2000Mbit ceil 2000Mbit quantum 65535 filter add dev bond0.2 parent 2:0 protocol ip u32 match ip dst xx.xx.164.0/22 flowid 2:7 filter add dev bond0.2 parent 2:0 protocol ip u32 match ip dst yy.yy.64.0/19 flowid 2:7 qdisc add dev bond0.2 parent 2:7 handle 7 pfifo limit 10000 Смещения для всех полей задавал, в любых комбинациях и разных значений(0-4-8 байт) - никакой реакции. Пробовал даже переписать в сыром виде согласно lartc, не работает: class add dev bond1 parent 1:0 classid 1:7 htb rate 2000Mbit ceil 2000Mbit quantum 65535 filter add dev bond1 parent 1:0 u32 match u32 0xXXXXa400 0xfffff000 at 20 flowid 1:7 filter add dev bond1 parent 1:0 u32 match u32 0xYYYY5000 0xfffff000 at 20 flowid 1:7 qdisc add dev bond1 parent 1:7 handle 7 pfifo limit 10000 Edited August 27, 2013 by kayot Вставить ник Quote
kayot Posted August 21, 2013 Author Posted August 21, 2013 Коряво описал свою хотелку, или никто таким не заморачивался? Вставить ник Quote
vitalyb Posted August 21, 2013 Posted August 21, 2013 может смещения ip scr/dst надо поправить с учетом qinq? Вставить ник Quote
kayot Posted August 21, 2013 Author Posted August 21, 2013 Пробовал все комбинации, не в нем дело. Тем более на нетегированном и тегированном с 1 меткой работает вообще без правок. Вставить ник Quote
Ilya Evseev Posted August 22, 2013 Posted August 22, 2013 В чем вообще смысл такой оптимизации? Дерево служит для ускорения выборки листа, но если дисциплина повешена на интерфейс, то проблемы с ее выборкой нет вообще. Т.е. (теоретически) набор бесклассовых шейперов для клиентских интерфейсов будет (как минимум) не медленнее, чем общее дерево для бонда. Но при этом имхо значительно проще в обслуживании. Вставить ник Quote
kayot Posted August 22, 2013 Author Posted August 22, 2013 (edited) А фиг его знает нынче честно говоря. Раньше приоритезировали http и узкие внешние каналы делили между пользователями. Нынче там классовость разве что для разделения на локальный и внешний трафик, наверное действительно проще все это выкосить и резать на клиентских вланах. Да, вопрос вообще возник т.к. биллинг генерирует готовые конфиги на все сервера доступа(те самые классовые), и мне проще припинать то что уже работает а не пилить с нуля. Edited August 22, 2013 by kayot Вставить ник Quote
NiTr0 Posted August 22, 2013 Posted August 22, 2013 Нынче там классовость разве что для разделения на локальный и внешний трафик, На локале ответил. Маркировать трафик иптейблсом, и вешать 2 (или более) классов на ифейс дабы уменьшить кол-во создаваемых фильтров. Один класс - мир (можно с подклассами, дабы у абона при активно качающем торренте серфинг был мягким и шелковистым), один (или более) - локалка/IX/что там еще... Да, в LEAF запилен подобный шейпер в пакете ppp-hsh, оттуда можно дернуть такую реализацию шейпера входящего трафика. Исход там через ifb+хеши (через скрипт-обертку из пакета hsh дергаются скорости классов). Вставить ник Quote
vitalyb Posted August 23, 2013 Posted August 23, 2013 Тем более на нетегированном и тегированном с 1 меткой работает вообще без правок. Там с 2 тегами начинается веселье - один тег "программный", второй может оффлоадиться NIC'ом, или два тега программных. Еще REORDER_HDR привносит веселья. Не то смещение - самое простое объяснение. Вставить ник Quote
SABRE Posted August 23, 2013 Posted August 23, 2013 (edited) filter add dev bond0.2 parent 2:0 protocol ip u32 match ip dst yy.yy.64.0/19 flowid 2:7 А если попробовать protocol all Или конкретнее protocol 802.1Q (можно просто цифрами 0x8100) Edited August 23, 2013 by SABRE Вставить ник Quote
kayot Posted August 23, 2013 Author Posted August 23, 2013 (edited) protocol all/any пробовал, нет такого варианта. Ну а 8100 врядли имеет смысл, не тот это протокол.. Edited August 23, 2013 by kayot Вставить ник Quote
SABRE Posted August 23, 2013 Posted August 23, 2013 (edited) protocol all/any пробовал, нет такого варианта. Ну а 8100 врядли имеет смысл, не тот это протокол.. Странно. Специально проверил: ip address show: 3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP link/ether 00:11:00:00:00:06 brd ff:ff:ff:ff:ff:ff 4: eth0.10.20@eth0.10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 00:11:00:00:00:06 brd ff:ff:ff:ff:ff:ff inet 192.168.20.10/24 scope global eth0.10.20 inet6 fe80::211:ff:fe00:6/64 scope link valid_lft forever preferred_lft forever ip neigh show: 192.168.20.20 dev eth0.10.20 lladdr 00:aa:bb:cc:dd:ee PERMANENT ping 192.168.20.20 tcpdump [5015915.548333] device eth0 entered promiscuous mode tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 15:00:13.401969 00:11:00:00:00:06 (oui Unknown) > 00:aa:bb:cc:dd:ee (oui Unknown), ethertype 802.1Q (0x8100), length 106: vlan 10, p 0, ethertype 802.1Q, vlan 20, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 192.168.20.10 > 192.168.20.20: ICMP echo request, id 32723, seq 1, length 64 0x0000: 00aa bbcc ddee 0011 0000 0006 8100 000a ................ 0x0010: 8100 0014 0800 4500 0054 0000 4000 4001 ......E..T..@.@. 0x0020: 913a c0a8 140a c0a8 1414 0800 bc95 7fd3 .:.............. 0x0030: 0001 cd4e 1752 0000 0000 1222 0600 0000 ...N.R.....".... 0x0040: 0000 1011 1213 1415 1617 1819 1a1b 1c1d ................ 0x0050: 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d ...!"#$%&'()*+,- 0x0060: 2e2f 3031 3233 3435 3637 ./01234567 ^C Ну и главное tc -s filter show dev eth0 root@asterisk:~# tc -s filter show dev eth0 filter parent 1: protocol ip pref 49144 u32 filter parent 1: protocol ip pref 49144 u32 fh 808: ht divisor 1 filter parent 1: protocol ip pref 49144 u32 fh 808::800 order 2048 key ht 808 bkt 0 terminal flowid ??? (rule hit 114 success 0) match c0a81414/ffffffff at 16 (success 0 ) action order 1: gact action continue random type none pass val 0 index 25 ref 1 bind 1 installed 71 sec used 71 sec Action statistics: Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 filter parent 1: protocol 802.1Q pref 49145 u32 filter parent 1: protocol 802.1Q pref 49145 u32 fh 807: ht divisor 1 filter parent 1: protocol 802.1Q pref 49145 u32 fh 807::800 order 2048 key ht 807 bkt 0 terminal flowid ??? (rule hit 63 success 63) match 000a0000/00ff0000 at -8 (success 63 ) action order 33: gact action continue random type none pass val 0 index 21 ref 1 bind 1 installed 14106 sec used 6 sec Action statistics: Sent 6678 bytes 63 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 filter parent 1: protocol 802.1Q pref 49148 u32 filter parent 1: protocol 802.1Q pref 49148 u32 fh 804: ht divisor 1 filter parent 1: protocol 802.1Q pref 49148 u32 fh 804::800 order 2048 key ht 804 bkt 0 terminal flowid ??? (rule hit 72 success 72) match 00140000/0fff0000 at -4 (success 72 ) action order 129: gact action continue random type none pass val 0 index 18 ref 1 bind 1 installed 14363 sec used 6 sec Action statistics: Sent 7632 bytes 72 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 filter parent 1: protocol 802.1Q pref 49152 u32 filter parent 1: protocol 802.1Q pref 49152 u32 fh 800: ht divisor 1 filter parent 1: protocol 802.1Q pref 49152 u32 fh 800::800 order 2048 key ht 800 bkt 0 terminal flowid ??? (rule hit 87 success 87) match c0a81414/ffffffff at 16 (success 87 ) action order 257: gact action continue random type none pass val 0 index 14 ref 1 bind 1 installed 14825 sec used 6 sec Action statistics: Sent 9222 bytes 87 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Первый по порядку - protocol ip, match 192.168.20.20 at 16 Второй - protocol 802.1Q (0x8100), match по внешней метке VID 10 Третий - protocol 802.1Q (0x8100), match по внутренней метке VID 20 Четвертый - protocol 802.1Q (0x8100), match 192.168.20.20 at 16 Только-что попробовал root@asterisk:~# tc filter add dev eth0 protocol any parent 1:0 u32 match u32 0xc0a81414 0xffffffff at 16 action continue Error: argument "invalid protocol" is wrong: any С all все в порядке: root@asterisk:~# tc -s filter show dev eth0 filter parent 1: protocol all pref 49143 u32 filter parent 1: protocol all pref 49143 u32 fh 809: ht divisor 1 filter parent 1: protocol all pref 49143 u32 fh 809::800 order 2048 key ht 809 bkt 0 terminal flowid ??? (rule hit 66 success 16) match c0a81414/ffffffff at 16 (success 16 ) action order 1: gact action continue random type none pass val 0 index 26 ref 1 bind 1 installed 137 sec used 2 sec Action statistics: Sent 1696 bytes 16 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Edited August 23, 2013 by SABRE Вставить ник Quote
SABRE Posted August 23, 2013 Posted August 23, 2013 Ну а 8100 врядли имеет смысл, не тот это протокол.. filter parent 1: protocol ip pref 49142 u32 filter parent 1: protocol ip pref 49142 u32 fh 80b: ht divisor 1 filter parent 1: protocol ip pref 49142 u32 fh 80b::800 order 2048 key ht 80b bkt 0 terminal flowid ??? (rule hit 3 success 3) match 00000000/00000000 at 0 (success 3 ) action order 1: gact action continue random type none pass val 0 index 28 ref 1 bind 1 installed 39 sec used 28 sec Action statistics: Sent 877 bytes 3 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 3 пакета - SSH. Пинговал 6-ю пакетами. Ни один не прошел. Параметр protocol указывает на тип пакета, который матчится u32. Для QinQ это именно 0х8100, а не IP (0х0800), вот правила и не работают. Вставить ник Quote
kayot Posted August 24, 2013 Author Posted August 24, 2013 Попробовал, работает с protocol all, не знаю как я до этого проверял. И даже смещения править не нужно. Спасибо! Вставить ник Quote
SABRE Posted August 24, 2013 Posted August 24, 2013 (edited) kayot А с 802.1Q? Смещения действительно править не нужно. Более того, на таком бутерброде: root@asterisk:~# tcpdump -e -vvv -XX -i eth0 ether dst 00:aa:bb:cc:dd:ee tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 18:36:34.809490 00:11:00:00:00:06 (oui Unknown) > 00:aa:bb:cc:dd:ee (oui Unknown), ethertype 802.1Q (0x8100), length 110: vlan 10, p 0, ethertype 802.1Q, vlan 20, p 0, ethertype 802.1Q, vlan 30, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 192.168.20.10 > 192.168.20.20: ICMP echo request, id 809, seq 1, length 64 0x0000: 00aa bbcc ddee 0011 0000 0006 8100 000a ................ 0x0010: 8100 0014 8100 001e 0800 4500 0054 0000 ..........E..T.. 0x0020: 4000 4001 913a c0a8 140a c0a8 1414 0800 @.@..:.......... 0x0030: 2284 0329 0001 02d3 1852 0000 0000 ec59 "..).....R.....Y 0x0040: 0c00 0000 0000 1011 1213 1415 1617 1819 ................ 0x0050: 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 .......!"#$%&'() 0x0060: 2a2b 2c2d 2e2f 3031 3233 3435 3637 *+,-./01234567 ^C Имя устройства eth0.10.20.30 Смещения так-же не нужно править, Отсчет всегда с начала IP. Edited August 25, 2013 by SABRE Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.