kayot Опубликовано 20 августа, 2013 (изменено) · Жалоба Есть 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 Изменено 27 августа, 2013 пользователем kayot Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 21 августа, 2013 · Жалоба Коряво описал свою хотелку, или никто таким не заморачивался? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 21 августа, 2013 · Жалоба может смещения ip scr/dst надо поправить с учетом qinq? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 21 августа, 2013 · Жалоба Пробовал все комбинации, не в нем дело. Тем более на нетегированном и тегированном с 1 меткой работает вообще без правок. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 22 августа, 2013 · Жалоба В чем вообще смысл такой оптимизации? Дерево служит для ускорения выборки листа, но если дисциплина повешена на интерфейс, то проблемы с ее выборкой нет вообще. Т.е. (теоретически) набор бесклассовых шейперов для клиентских интерфейсов будет (как минимум) не медленнее, чем общее дерево для бонда. Но при этом имхо значительно проще в обслуживании. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 22 августа, 2013 (изменено) · Жалоба А фиг его знает нынче честно говоря. Раньше приоритезировали http и узкие внешние каналы делили между пользователями. Нынче там классовость разве что для разделения на локальный и внешний трафик, наверное действительно проще все это выкосить и резать на клиентских вланах. Да, вопрос вообще возник т.к. биллинг генерирует готовые конфиги на все сервера доступа(те самые классовые), и мне проще припинать то что уже работает а не пилить с нуля. Изменено 22 августа, 2013 пользователем kayot Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 22 августа, 2013 · Жалоба Нынче там классовость разве что для разделения на локальный и внешний трафик, На локале ответил. Маркировать трафик иптейблсом, и вешать 2 (или более) классов на ифейс дабы уменьшить кол-во создаваемых фильтров. Один класс - мир (можно с подклассами, дабы у абона при активно качающем торренте серфинг был мягким и шелковистым), один (или более) - локалка/IX/что там еще... Да, в LEAF запилен подобный шейпер в пакете ppp-hsh, оттуда можно дернуть такую реализацию шейпера входящего трафика. Исход там через ifb+хеши (через скрипт-обертку из пакета hsh дергаются скорости классов). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 23 августа, 2013 · Жалоба Тем более на нетегированном и тегированном с 1 меткой работает вообще без правок. Там с 2 тегами начинается веселье - один тег "программный", второй может оффлоадиться NIC'ом, или два тега программных. Еще REORDER_HDR привносит веселья. Не то смещение - самое простое объяснение. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SABRE Опубликовано 23 августа, 2013 (изменено) · Жалоба 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) Изменено 23 августа, 2013 пользователем SABRE Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 23 августа, 2013 (изменено) · Жалоба protocol all/any пробовал, нет такого варианта. Ну а 8100 врядли имеет смысл, не тот это протокол.. Изменено 23 августа, 2013 пользователем kayot Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SABRE Опубликовано 23 августа, 2013 (изменено) · Жалоба 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 Изменено 23 августа, 2013 пользователем SABRE Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SABRE Опубликовано 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), вот правила и не работают. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 24 августа, 2013 · Жалоба Попробовал, работает с protocol all, не знаю как я до этого проверял. И даже смещения править не нужно. Спасибо! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SABRE Опубликовано 24 августа, 2013 (изменено) · Жалоба 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. Изменено 25 августа, 2013 пользователем SABRE Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...