Jump to content

Recommended Posts

Posted (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 by h3ll1
Posted (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 by h3ll1
Posted (edited)
On 4/18/2021 at 7:41 PM, vurd said:

ничего невозможно понять.

Впервие: схема (ВПН+- очереди на одного интефейса) или (етХХ---етХХ)

Схема сети: что-то ----- етХ ....нат и тд. ---- еtY....

Проблема сети: связано с QOS и ACCOUNTING не само то что на етY, но и етХ! Если нат, (сделаете после или впереди Ваше значение) надо сделать QOS.

Нашел что то:

Quote

 

Сделали люди чтото ВСЕ хочут: марк на ипт"Х", а класифай на 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

не сработало, но идея добра.( множество правил будет сюда. Юзерспейс) .

 

cat /proc/cpuinfo | grep MHz | wc 

 4      16      80

Edited by h3ll1
Posted
3 hours ago, h3ll1 said:

Для дела нужна (ВМ) чтоб била промежуточая связка интерфейсов. НО, не подходит все интрефейси на БРидж.

 

Зачем вам VM? ЗАчем вам бриджи. Вам достаточно netns. Закидываете туда один из физических интерфейсов, пробрасываете виртуальный линк veth, и настраиваете в том newtwork namespace, что хотите.

 

Потом, для двухстороннего шейпера ifb особо и не нужен. Маркируйте трафик, например, чрез ipset, и шейпите полученные классы, как надо и куда надо.

 

Posted
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 пача.

Posted
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,

Posted
то, как минимум, 2,

не так. >=1 . Физика и все остальное - интерфейси можно називать как хочеш. Тут вопрос (может бить баг) для nft возможно ли или нет.

Юзеркейс - не только у меня. 

Извините.

Posted (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 by h3ll1
Posted (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

А где там "промежуточая часть" ??

Edited by h3ll1
Posted
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 цепляете к классам дисциплины.

Posted (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 by h3ll1
  • 2 weeks later...
Posted (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 by h3ll1
Posted
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... А можно поручить классифицировать пакеты нетфильтру. При этом пакет получает класс приоритета, и потом его можно роутить, натить, форвардить, бить балдой по столу - класс приоритета за ним будет прицеплен, поэтому шейпиться он будет замечательно на любом выходе.

 

Поэтому классифицируйте пакеты хоть в построутинге, хоть в прероутинге, хоть в форварде (все зависит откуда и куда вы классифицируете), и забудьте про проблему.

 

Для чего вы маркируете пакеты - я так и не понял, но это уже другая тема.

 

Posted
6 hours ago, vop said:

Поэтому классифицируйте пакеты хоть в построутинге, хоть в прероутинге, хоть в форварде

Делаем ето. Благодарю.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.