h3ll1 Опубликовано 12 апреля, 2021 (изменено) · Жалоба Проблемa - сейчас вход + выход на множество вланов и множество интерфейсов. debian 9 + ( iptables + ipset + IMQ + nft + НАТ) )+ kernel 4.19.XXX. Видде, все хорошо, но там есть лимитация в softirq, связаная с tc+imq (вроде 4г трафика больше нет), но с кернел >5.9 не работает IMQ, и услышал что есть решение с LXC, когда сам контейнер может быть промежуточний шлюз для НАТа и для самого QOSa. Я сам протестовал, но с VLC, не все там работают macvlan|bridge|veth интерфейси. Ну и вопрос - как сделать промежуточний интерфейс вроде IFB с контейнера, чтоб сделать nft(-iptables-imq)+nat+qos на одной машине. подумал для nft "fw to" интерфейс. ps. Ето не для тя QOS-a полисинг, а для шейпинг. --eth1.1--- | ifb0 | | | local connected -- ex-> --eth1.2 -- | ifb0 | | | pppXXX -- --eth2.2 --- | ifb0 | | | dhcp --- как сделать QOS в переди НАТ-а --ethX.X --- | idb0 | | | vlan4 --- Изменено 12 апреля, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 17 апреля, 2021 (изменено) · Жалоба Проблема не связана, что данная схема не работает, а потому что для реализации надо пользоватся контрак-а. При помощи IMQ - после postrouting делять все что угодно, Но нельзя на ingress. IFB - делается все, НО нельзя с машиной взять соединение (типа VPN) и его исходящий трафик на QOS. Ну и затем вопрос - как поможет LXC (с помощи редиректа для тех - (нат адрессации)), когда сам контейнер связивается к остольном миру только через BRIDGE ( а не надо bridge-ит всех интерфейсов). ps. у nft есть проблем, связан с редирект (dev vs inet) - не работают одинаково (они сказали что после 0.9.0 так, но нет, я так думаю (https://stackoverflow.com/questions/66976852/nftables-difference-between-netdev-and-inet-hooks)). Изменено 17 апреля, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 18 апреля, 2021 · Жалоба От контейнера требуется только netns? Зачем тогда контейнер, если можно использовать поименованный netns? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vurd Опубликовано 18 апреля, 2021 · Жалоба Изложение просто отвратительное. Абсолютно ничего невозможно понять. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 20 апреля, 2021 (изменено) · Жалоба On 4/18/2021 at 7:41 PM, vurd said: ничего невозможно понять. Впервие: схема (ВПН+- очереди на одного интефейса) или (етХХ---етХХ) Схема сети: что-то ----- етХ ....нат и тд. ---- еtY.... Проблема сети: связано с QOS и ACCOUNTING не само то что на етY, но и етХ! Если нат, (сделаете после или впереди Ваше значение) надо сделать QOS. Нашел что то: Quote http://patchwork.ozlabs.org/project/netfilter-devel/patch/14ab7e5af20124a34a50426fd570da7d3b0369ce.1583927267.git.lukas@wunner.de/ Сделали люди чтото ВСЕ хочут: марк на ипт"Х", а класифай на ifb (+нфмарк) On 4/18/2021 at 4:11 AM, vop said: требуется только netns? НУ и сам человек сказал что контейнер для NS-a, но для задачи нужно сделять (ВиртМ). Для дела нужна (ВМ) чтоб била промежуточая связка интерфейсов. НО, не подходит все интрефейси на БРидж. Вот и ИДЕЯ, что делают: https://lwn.net/Articles/671458/ tc qdisc add dev eth0 clsact tc filter add dev eth0 egress matchall action mirred egress redirect dev ifb1 nft add rule inet mark-rules marks2 ip saddr @mynets meta priority set 2:322 ct mark set 322 counter Работает для IN+OUT пс. попровобал: Quote http://patchwork.ozlabs.org/project/netfilter-devel/patch/14ab7e5af20124a34a50426fd570da7d3b0369ce.1583927267.git.lukas@wunner.de/ не сработало, но идея добра.( множество правил будет сюда. Юзерспейс) . cat /proc/cpuinfo | grep MHz | wc 4 16 80 Изменено 20 апреля, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 21 апреля, 2021 · Жалоба 3 hours ago, h3ll1 said: Для дела нужна (ВМ) чтоб била промежуточая связка интерфейсов. НО, не подходит все интрефейси на БРидж. Зачем вам VM? ЗАчем вам бриджи. Вам достаточно netns. Закидываете туда один из физических интерфейсов, пробрасываете виртуальный линк veth, и настраиваете в том newtwork namespace, что хотите. Потом, для двухстороннего шейпера ifb особо и не нужен. Маркируйте трафик, например, чрез ipset, и шейпите полученные классы, как надо и куда надо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 21 апреля, 2021 · Жалоба 1 hour ago, vop said: Закидываете туда один из А если только один? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 21 апреля, 2021 · Жалоба 1 hour ago, vop said: чрез ipset пользуюсь nft sets. (tc filter умеет разбиратся с ipset, но не и с nft set). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 21 апреля, 2021 · Жалоба 6 hours ago, h3ll1 said: не сработало nft add chain netdev dev egress-eth0 { type filter hook egress device "eth0" priority 0\; policy accept\;} Error: Could not process rule: Operation not supported add chain netdev dev egress-eth0 { type filter hook egress device eth0 priority 0; policy accept;} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ps. https://www.spinics.net/lists/netfilter-devel/msg70104.html пача. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 21 апреля, 2021 · Жалоба 8 hours ago, h3ll1 said: А если только один? Тогда у вас не роутер, а хост, если я не правильно понял. :) Если же роутер, то, как минимум, 2, включая физические и логические интерфейсы (все, которые в поднимите или склонируете). 8 hours ago, h3ll1 said: пользуюсь nft sets. (tc filter умеет разбиратся с ipset, но не и с nft set). А ему и не надо разбираться. С классами рабзирается ядро, а кто эти классы поставит - совсем не важно. То ли tc filter, то ли ipset skbprio, то ли nft meta priority set, Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 21 апреля, 2021 · Жалоба то, как минимум, 2, не так. >=1 . Физика и все остальное - интерфейси можно називать как хочеш. Тут вопрос (может бить баг) для nft возможно ли или нет. Юзеркейс - не только у меня. Извините. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 25 апреля, 2021 (изменено) · Жалоба On 4/21/2021 at 1:35 PM, vop said: а хост Сам хост и меня интересует. Как (с хостом и трафик промежуточний - без CT флоу) захватить на QOS-a. On 4/21/2021 at 3:27 AM, vop said: потом, для двухстороннего шейпера Можно там ползоваться ipset-a (нс-чужой)? Изменено 25 апреля, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 27 апреля, 2021 (изменено) · Жалоба On 4/21/2021 at 1:35 PM, vop said: То ли tc filter, то ли ipset skbprio, то ли nft meta priority set За то и мое непонимание: досегда понял что tc впереди nft (ingress): 1.tc filter add ...... ACCTION connmark 2. nft add rule mark YYY fwd to XX eto NE rabotaet: 1. nft mark ct mark 1: tc filter.... ACTION MIRRED.... Quote https://netdevconf.info/1.1/proceedings/slides/pablo-neira-nft-ingress.pdf А где там "промежуточая часть" ?? Изменено 27 апреля, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 27 апреля, 2021 · Жалоба 37 minutes ago, h3ll1 said: За то и мое непонимание: досегда понял что tc впереди nft (ingress): 1.tc filter add ...... ACCTION connmark 2. nft add rule mark YYY fwd to XX eto NE rabotaet: 1. nft mark ct mark 1: tc filter.... ACTION MIRRED.... Что-то вы совсем не о том... Зачем маркируете трафик? Вам надо его классифицировать. А классифицировать вы можете его или при помощи tc, или iptables, или ipset, или nft - выбираете любимый способ, учитывая, что ts filter, пожалуй, не самый симпотичный. После того, как трафик у вас классифицирован, вы уже при помощи tc цепляете к классам дисциплины. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 27 апреля, 2021 (изменено) · Жалоба On 4/28/2021 at 2:37 AM, vop said: А классифицировать Делаем в "postrouting" $nft_skbs_rules[]="define ns1 = 8.8.8.8"; $nft_skbs_rules[]="define ns61 = 2a00:1450:4017:80b::200e"; if ($shapertype == 'shaper' && !empty($nft_skbs_arr)){ foreach ($nft_skbs_arr as $nfsk => $nfsv){ $nft_skbs_rules[]="add map inet mark-rules ".$nfsk." { type ipv4_addr : classid; flags interval; }"; $nft_skbs_rules[]="add map inet mark-rules v6.".$nfsk." { type ipv6_addr : classid; flags interval; }"; $nft_skb_ips=array(); $nft_skb_ips6=array(); if (!empty($nfsv)){ foreach ($nfsv as $nfsvk => $nfsvv){ if (validateIPNETv4($nfsvk) !== false){ $nft_skb_ips[]="$nfsvk : $nfsvv"; } else if ($ipv6en != 'n' && validateIPNETv6($nfsvk) !== false){ $nft_skb_ips6[]="$nfsvk : $nfsvv"; } } if (!empty($nft_skb_ips)){ $nft_skbs_rules[]="add element inet mark-rules ".$nfsk." { ".implode(', ' , $nft_skb_ips)." }"; $nft_skbs_rules[]="nft add rule inet mark-rules marks ip saddr $ns1 ip daddr map ".nfsk." counter "; } if (!empty($nft_skb_ips6)){ $nft_skbs_rules[]="add element inet mark-rules v6.".$nfsk." { ".implode(', ' , $nft_skb_ips6)." }"; $nft_skbs_rules[]="nft add rule inet mark-rules marks ip6 saddr $ns61 ip6 daddr map v6.".nfsk." counter"; } } } } //ps - nft_skb_ips is array of 10.0.0.1 : 1:1, 10.0.0.2 : 1:2 (hex) etc.... On 4/28/2021 at 2:37 AM, vop said: пожалуй, не самый симпотичный. После того, как трафик у вас классифицирован, А знаете, что ето в класс... 0хААААААА ... Сам и вопрос я сделал - почему не подходить только с nft? Почему надо tc филтра? On 4/28/2021 at 2:37 AM, vop said: Зачем маркируете трафик? Для НАТ акаунтинг-а(QOS). Изменено 1 мая, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 7 мая, 2021 (изменено) · Жалоба On 4/28/2021 at 2:37 AM, vop said: Что-то вы совсем не о том... Зачем маркируете трафик? Сделал для теста, потому что nft inet не работает как сказали с netdev ( ingress hook ). Для меня, оптимальний вариант - ето сделатъ все в inet. В netdev нет понимания о CLASSIFY + fwd to - ето только в inet, но наоборот. И я сделал - 1. - марк, 2 - fwd - 3 - match mark (+classify)... и тд., а нужно: 1: classify (у ingress inet + fwd to "devXX"). 2: класифицировать уже в шейп. Изменено 7 мая, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 9 мая, 2021 · Жалоба On 5/7/2021 at 11:29 PM, h3ll1 said: Сделал для теста, потому что nft inet не работает как сказали с netdev ( ingress hook ). Для меня, оптимальний вариант - ето сделатъ все в inet. В netdev нет понимания о CLASSIFY + fwd to - ето только в inet, но наоборот. И я сделал - 1. - марк, 2 - fwd - 3 - match mark (+classify)... и тд., а нужно: 1: classify (у ingress inet + fwd to "devXX"). 2: класифицировать уже в шейп. Или я старый стал, и чего-то не догоняю. Или не совсем понимаю, что вы хотите сделать. Давайте по порядку? Зачем вам netdev нужен? Вы собираетесь фильтровать MAC- адреса? Там еще даже фрагменты не собраны. Хотя, идея учитывать абонентов по макам у меня давно хранится в запасе. При выдаче дуалстека - самое то. Далее, Шейпер. У вас задача классифицировать трафик. Вы можете его классиифицивровать при помощи tc. Но вот незадача, он классифицируется в том месте, где вызывается - т.е. на выходе - и пакеты, прошедшие нат уже не имеют признаков клиентского ip, Проэтому приходитя городить разные псевдоинтерфейсыm типа ifb... А можно поручить классифицировать пакеты нетфильтру. При этом пакет получает класс приоритета, и потом его можно роутить, натить, форвардить, бить балдой по столу - класс приоритета за ним будет прицеплен, поэтому шейпиться он будет замечательно на любом выходе. Поэтому классифицируйте пакеты хоть в построутинге, хоть в прероутинге, хоть в форварде (все зависит откуда и куда вы классифицируете), и забудьте про проблему. Для чего вы маркируете пакеты - я так и не понял, но это уже другая тема. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 9 мая, 2021 (изменено) · Жалоба revert Изменено 9 мая, 2021 пользователем h3ll1 revert to original Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 9 мая, 2021 (изменено) · Жалоба revert to original Изменено 9 мая, 2021 пользователем h3ll1 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
h3ll1 Опубликовано 9 мая, 2021 · Жалоба 6 hours ago, vop said: Поэтому классифицируйте пакеты хоть в построутинге, хоть в прероутинге, хоть в форварде Делаем ето. Благодарю. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...