Перейти к содержимому
Калькуляторы

Как сделать все на 1х1 (NFT+ NAT + IFB + QOS + billing +++) с помощи LXC

Проблем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 --- 

 

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема не связана, что данная схема не работает, а потому что для реализации надо пользоватся контрак-а. 

При помощи 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)).

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

От контейнера требуется только netns? Зачем тогда контейнер, если можно использовать поименованный netns?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изложение просто отвратительное. Абсолютно ничего невозможно понять.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 hours ago, h3ll1 said:

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

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 hour ago, vop said:

Закидываете туда один из

А если только один?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 hour ago, vop said:

чрез ipset

пользуюсь nft sets. (tc filter умеет разбиратся с ipset, но не и с nft set).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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,

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Извините.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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 (нс-чужой)?

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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).

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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: класифицировать уже в шейп.

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

revert

Изменено пользователем h3ll1
revert to original

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

revert to original

 

 

Изменено пользователем h3ll1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.