h3ll1 Posted April 12, 2021 Posted April 12, 2021 (edited) Проблем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 --- Edited April 12, 2021 by h3ll1 Вставить ник Quote
h3ll1 Posted April 17, 2021 Author Posted April 17, 2021 (edited) Проблема не связана, что данная схема не работает, а потому что для реализации надо пользоватся контрак-а. При помощи 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)). Edited April 17, 2021 by h3ll1 Вставить ник Quote
vop Posted April 18, 2021 Posted April 18, 2021 От контейнера требуется только netns? Зачем тогда контейнер, если можно использовать поименованный netns? Вставить ник Quote
vurd Posted April 18, 2021 Posted April 18, 2021 Изложение просто отвратительное. Абсолютно ничего невозможно понять. Вставить ник Quote
h3ll1 Posted April 20, 2021 Author Posted April 20, 2021 (edited) 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 Edited April 20, 2021 by h3ll1 Вставить ник Quote
vop Posted April 21, 2021 Posted April 21, 2021 3 hours ago, h3ll1 said: Для дела нужна (ВМ) чтоб била промежуточая связка интерфейсов. НО, не подходит все интрефейси на БРидж. Зачем вам VM? ЗАчем вам бриджи. Вам достаточно netns. Закидываете туда один из физических интерфейсов, пробрасываете виртуальный линк veth, и настраиваете в том newtwork namespace, что хотите. Потом, для двухстороннего шейпера ifb особо и не нужен. Маркируйте трафик, например, чрез ipset, и шейпите полученные классы, как надо и куда надо. Вставить ник Quote
h3ll1 Posted April 21, 2021 Author Posted April 21, 2021 1 hour ago, vop said: Закидываете туда один из А если только один? Вставить ник Quote
h3ll1 Posted April 21, 2021 Author Posted April 21, 2021 1 hour ago, vop said: чрез ipset пользуюсь nft sets. (tc filter умеет разбиратся с ipset, но не и с nft set). Вставить ник Quote
h3ll1 Posted April 21, 2021 Author Posted April 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 пача. Вставить ник Quote
vop Posted April 21, 2021 Posted April 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, Вставить ник Quote
h3ll1 Posted April 21, 2021 Author Posted April 21, 2021 то, как минимум, 2, не так. >=1 . Физика и все остальное - интерфейси можно називать как хочеш. Тут вопрос (может бить баг) для nft возможно ли или нет. Юзеркейс - не только у меня. Извините. Вставить ник Quote
h3ll1 Posted April 25, 2021 Author Posted April 25, 2021 (edited) 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 (нс-чужой)? Edited April 25, 2021 by h3ll1 Вставить ник Quote
h3ll1 Posted April 27, 2021 Author Posted April 27, 2021 (edited) 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 А где там "промежуточая часть" ?? Edited April 27, 2021 by h3ll1 Вставить ник Quote
vop Posted April 27, 2021 Posted April 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 цепляете к классам дисциплины. Вставить ник Quote
h3ll1 Posted April 27, 2021 Author Posted April 27, 2021 (edited) 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). Edited May 1, 2021 by h3ll1 Вставить ник Quote
h3ll1 Posted May 7, 2021 Author Posted May 7, 2021 (edited) 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: класифицировать уже в шейп. Edited May 7, 2021 by h3ll1 Вставить ник Quote
vop Posted May 9, 2021 Posted May 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... А можно поручить классифицировать пакеты нетфильтру. При этом пакет получает класс приоритета, и потом его можно роутить, натить, форвардить, бить балдой по столу - класс приоритета за ним будет прицеплен, поэтому шейпиться он будет замечательно на любом выходе. Поэтому классифицируйте пакеты хоть в построутинге, хоть в прероутинге, хоть в форварде (все зависит откуда и куда вы классифицируете), и забудьте про проблему. Для чего вы маркируете пакеты - я так и не понял, но это уже другая тема. Вставить ник Quote
h3ll1 Posted May 9, 2021 Author Posted May 9, 2021 (edited) revert Edited May 9, 2021 by h3ll1 revert to original Вставить ник Quote
h3ll1 Posted May 9, 2021 Author Posted May 9, 2021 (edited) revert to original Edited May 9, 2021 by h3ll1 Вставить ник Quote
h3ll1 Posted May 9, 2021 Author Posted May 9, 2021 6 hours ago, vop said: Поэтому классифицируйте пакеты хоть в построутинге, хоть в прероутинге, хоть в форварде Делаем ето. Благодарю. Вставить ник 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.