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

ipt-ratelimit трафик полисинг в iptables

14 часов назад, AlKov сказал:

А с IPoE + QinQ + IP unnumbered сей продукт реально подружить?

Я подружил. Пока нагрузка небольшая, но работает :)

Правда пришлось dhcp-server вынести на отдельную виртуалку...

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


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

3 часа назад, Antares сказал:
15 часов назад, AlKov сказал:

Плюс функционал "ночных скоростей"

придётся костылить

Простой скрипт, который перебирает клиентов, у которых в базе "турбо" и отдаёт на выполнение такому:

В доке на модуль есть:

#!/bin/bash

. /etc/boot/incl.sh

IP=$1
DNL=$2
UPL=$3

let "DNL1=$DNL*1000000"
let "UPL1=$UPL*1000000"

echo "@+$IP $DNL1" > $users_down
echo "@+$IP $UPL1" > $users_up

А раньше приходилось вычислять хеш, что оказалось нетривиальной задачей, дня три кодил и то до конца был не уверен, что работало правильно.

Сравните с этим:

#!/bin/bash

. /etc/boot/incl.sh

RULE=$1
LOGIN=$2
let mark=${LOGIN}+1000
let mark2=${LOGIN}+1000
ip=$3
mask=$4
DNL=$5
UPL=$6
DNL_CEIL=$7
UPL_CEIL=$8

SEG=`echo $ip | awk -F. '{ print $3 }'`
IP2=`echo $ip | awk -F. '{ print $4 }'`
SEGhex=`printf %x $SEG`
IP2hex=`printf %x $IP2`


case $RULE in
-A)
### ADD NEW RULE ###

if [ ! -f /ramdisk/shaper/${LOGIN} ]
then
    $tc class add dev $INTIF parent 1:1 classid 1:$mark htb rate ${DNL}mbit ceil ${DNL_CEIL}mbit quantum 3000
    $tc qdisc add dev $INTIF parent 1:$mark handle $mark: sfq perturb 10
    $tc filter add dev $INTIF parent 1: protocol ip prio 5 u32 ht ${SEGhex}:${IP2hex}: match ip dst $ip flowid 1:$mark

    $tc class add dev $EXTIF parent 1:1 classid 1:$mark2 htb rate ${UPL}mbit ceil ${UPL_CEIL}mbit quantum 3000
    $tc qdisc add dev $EXTIF parent 1:$mark2 handle $mark2: sfq perturb 10
    $tc filter add dev $EXTIF parent 1: protocol ip prio 5 u32 ht ${SEGhex}:${IP2hex}: match ip src $ip flowid 1:$mark2

    echo "$DNL $UPL" > /ramdisk/shaper/${LOGIN}
fi
;;



-D)
### DELETE RULE ###

if [ -f /ramdisk/shaper/${LOGIN} ]
then

    for h in `$tc filter show dev $INTIF | grep ":$mark" | cut -d" " -f10`;
        do
            $tc filter del dev $INTIF parent 1: protocol ip prio 5 handle $h u32
        done

    $tc qdisc del dev $INTIF parent 1:$mark handle $mark: sfq perturb 10
    $tc class del dev $INTIF parent 1:1 classid 1:$mark htb rate ${DNL}mbit ceil ${DNL_CEIL}mbit quantum 3000

    for h in `$tc filter show dev $EXTIF | grep ":$mark2" | cut -d" " -f10`;
        do
            $tc filter del dev $EXTIF parent 1: protocol ip prio 5 handle $h u32
        done

    $tc qdisc del dev $EXTIF parent 1:$mark2 handle $mark2: sfq perturb 10
    $tc class del dev $EXTIF parent 1:1 classid 1:$mark2 htb rate ${UPL}mbit ceil ${UPL_CEIL}mbit quantum 3000

    /bin/rm -f /ramdisk/shaper/${LOGIN}
fi
;;

*)
    echo "Usage: `basename $0` -A|-D RULEID UIP UBITS DOWNLOAD UPLOAD DOWNLOAD_CEIL UPLOAD_CEIL" 
exit 64
;;

esac

Знаю, что у tc есть replace, но мне так проще. Так эта конструкция у меня отрабатывала минут 12, счас минуту.

 

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


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

Добрый день. Подскажите пожалуйста, беспокоят вот эти значения в Perf top

  9.88%  [kernel]                  [k] ipt_do_table
   9.58%  [kernel]                  [k] i40e_napi_poll
   5.64%  [kernel]                  [k] _raw_spin_lock

 

при трафике 2 гига, на машине бегают и реальные адреса и нат

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 5439180 587704 1177096    0    0     0     1    0    6  0  8 92  0  0

прерывания раскиданы

46:          0          0          0          0          0          0        635          0   PCI-MSI 1572864-edge      i40e-0000:03:00.0:misc
 47: 2562674416          0          1          0          0          0          0          0   PCI-MSI 1572865-edge      i40e-ens5f0-TxRx-0
 48:          0 1835352639          0          0          1          0          0          0   PCI-MSI 1572866-edge      i40e-ens5f0-TxRx-1
 49:          0          0 1772755685          0          0          1          0          0   PCI-MSI 1572867-edge      i40e-ens5f0-TxRx-2
 50:          0          0          0 2204772948          0          0          1          0   PCI-MSI 1572868-edge      i40e-ens5f0-TxRx-3
 51:          0          0          0          0 1769309477          0          0          1   PCI-MSI 1572869-edge      i40e-ens5f0-TxRx-4
 52:          1          0          0          0          0 1817750699          0          0   PCI-MSI 1572870-edge      i40e-ens5f0-TxRx-5
 53:          0          1          0          0          0          0 1721942464          0   PCI-MSI 1572871-edge      i40e-ens5f0-TxRx-6
 54:          0          0          1          0          0          0          0 1800411534   PCI-MSI 1572872-edge      i40e-ens5f0-TxRx-7
 55:          0          0          0          0          0          0          0          0   PCI-MSI 1572873-edge      i40e-0000:03:00.0:fdir-TxRx-0
 90:          0          0          0          0          0          0          0          0   PCI-MSI 1574912-edge      i40e-0000:03:00.1:misc
 99:          0          0          0          0          0          0          0          0   PCI-MSI 1574921-edge      i40e-0000:03:00.1:fdir-TxRx-0
126:          0          0          0          0          0          0          0          0   PCI-MSI 4718592-edge      i40e-0000:09:00.0:misc
135:          0          0          0          0          0          0          0          0   PCI-MSI 4718601-edge      i40e-0000:09:00.0:fdir-TxRx-0
152:          0          0          0          0          0          2          0          0   PCI-MSI 4720640-edge      i40e-0000:09:00.1:misc
153: 2626365712          0          0          0          0          0          1          0   PCI-MSI 4720641-edge      i40e-ens3f1-TxRx-0
154:          0 1913746365          0          0          0          0          0          1   PCI-MSI 4720642-edge      i40e-ens3f1-TxRx-1
155:          1          0 1852590434          0          0          0          0          0   PCI-MSI 4720643-edge      i40e-ens3f1-TxRx-2
156:          0          1          0 2312190469          0          0          0          0   PCI-MSI 4720644-edge      i40e-ens3f1-TxRx-3
157:          0          0          1          0 1843220283          0          0          0   PCI-MSI 4720645-edge      i40e-ens3f1-TxRx-4
158:          0          0          0          1          0 1895687565          0          0   PCI-MSI 4720646-edge      i40e-ens3f1-TxRx-5
159:          0          0          0          0          1          0 1802796199          0   PCI-MSI 4720647-edge      i40e-ens3f1-TxRx-6
160:          0          0          0          0          0          1          0 1879610207   PCI-MSI 4720648-edge      i40e-ens3f1-TxRx-7
161:          0          0          0          0          0          0          0          0   PCI-MSI 4720649-edge      i40e-0000:09:00.1:fdir-TxRx-0

 

сетевка 03:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+

не велики ли значения, и почему прерываний так много?

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

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


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

А кто и как решает проблему с приоритезацией трафика?

Например в htb есть опция prio

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


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

Можно попросить топистартера запилить модуль "ipt_hasjump". Суть его в хешировании цепочек правил iptables по отношению к подсетям.

 

Суть вопроса:

Хочется убрать много лишних правил в фаерволе, которые нельзя объединить IPSETом в одно правило, тем самым снизить нагрузку на процессоры.

 

Правила NAT трансляций невозможно объединить IPSETом. И если таких правил много (например, NAT 1к1 большого кол-ва адресов), то каждый пакет будет пробегать по большому кол-ву лишних правил фаервола, чего оооооочень хочется избежать.

 

Короче, хочется модуль, который будет обрабатывать правило типа:

iptables -A -m ipt_hashjump --ipt_hashjump-set "name" --ipt_hashjump-mode=src[,dst] -j HASHJUMP

 

файл /proc/net/ipt_hashjump/name содержит соответствия IP сетей к цепочкам фаервола:

x.x.x.x/x    сhainname1

y.y.y.y/y    сhainname2

.......

 

Заранее спасибо)))

 

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

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


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

Решил поковырять на досуге. Впал в ступор.

echo @+10.1.1.0/24,10.1.10.0/21,10.10.3.0/24,10.111.11.0/24 200000000 > /proc/net/ipt_ratelimit/download
bash: echo: write error: Invalid argument

Куда копать?
 

/sbin/modinfo ipt_ratelimit
filename:       /lib/modules/3.18.19/extra/xt_ratelimit.ko
alias:          ip6t_ratelimit
alias:          ipt_ratelimit
version:        0.3
license:        GPL
description:    iptables ratelimit policer mt module
author:         <abc@telekom.ru>
srcversion:     4DD302109E2E4AC9AF56D06
depends:        x_tables
vermagic:       3.18.19 SMP mod_unload modversions
parm:           hashsize:default size of hash table used to look up IPs (uint)

 

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


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

Прошу прощения, я лопух. До этого стоял старый модуль 0.2, новый пересобрал а вот про rmmod/modprobe забыл.

lsmod | grep rate
xt_ratelimit           17388  0
x_tables               19041  11 ipt_NETFLOW,xt_recent,ip_tables,xt_tcpudp,xt_state,xt_ratelimit,xt_LOG,xt_nat,xt_multiport,iptable_filter,iptable_mangle
rmmod xt_ratelimit
lsmod | grep rate
iptables -I FORWARD 7 -o eth1 -m ratelimit --ratelimit-set download --ratelimit-mode dst -j DROP
lsmod | grep rate
xt_ratelimit           21712  1
x_tables               19041  11 ipt_NETFLOW,xt_recent,ip_tables,xt_tcpudp,xt_state,xt_ratelimit,xt_LOG,xt_nat,xt_multiport,iptable_filter,iptable_mangle

 

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


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

А какое кол-во IP можно добавлять?

У меня при добавлении больше двух вываливается ошибка

 

#echo +192.168.1.1,192.168.1.2,192.168.1.3 > /proc/net/ipt_ratelimit/download
bash: echo: write error: Invalid argument

 

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


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

12 часов назад, kev сказал:

А какое кол-во IP можно добавлять?

У меня при добавлении больше двух вываливается ошибка

 


#echo +192.168.1.1,192.168.1.2,192.168.1.3 > /proc/net/ipt_ratelimit/download
bash: echo: write error: Invalid argument

 

#stdbuf -o8K echo +192.168.1.1,192.168.1.2,192.168.1.3 > /proc/net/ipt_ratelimit/download

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


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

15 часов назад, kev сказал:

echo +192.168.1.1,192.168.1.2,192.168.1.3 > /proc/net/ipt_ratelimit/download

Мне одному кажется, что скорость не задана?

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


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

Привет.  Есть ли возможность посмотреть передан ли параметр :hotdrop модулю?

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


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

а в каких единицах в статусе выдается значение last ?  Предполагаю, что не в секундах, как написано в ридми. Может быть в десятых секунды? или в миллисекундах?

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


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

17 hours ago, avovtchak said:

а в каких единицах в статусе выдается значение last ?  Предполагаю, что не в секундах, как написано в ридми. Может быть в десятых секунды? или в миллисекундах?

В тиках ядра, jiffies. См. CONFIG_HZ вашего ядра.

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


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

Тестируем модуль. Debian9, ядро 4.9.0-12-amd64. Работает. При шейпировании, у абонента вырастает латентность сети. Смотртит в онлайн играх. Время пингов увеличивается в несколько раз (примерно с 40 мс до 200 мс). Это наблюдается даже при том, что установленная скорость превышает физ. скорость интерфеса. Грубо говоря, мы ставим ограничение в 200 Мб/с на 100 Мб порту. В тестовой среде пока нет ни трафика, ни большого числа абонентов. У нас пока 3 записи (абонента) всего и 1 Гбит/с. Кто сталкивался, подскажите какие параметры ядра смотреть или не замечали такого поведения?

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


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

Разумеется, отклик увеличится на то время, что пакет находится в буфере. Чем больше буфер, тем больше задержка.

Ищите баланс между комфортным шейпингом и приемлемым пингом. Или используйте полисинг с правильно подобранным burst.

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


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

8 minutes ago, alibek said:

Разумеется, отклик увеличится на то время, что пакет находится в буфере. Чем больше буфер, тем больше задержка.

Где найти параметр, который отвечает за размер этого буфера?

 

10 minutes ago, alibek said:

Или используйте полисинг с правильно подобранным burst.

Пробовал уменьшать cbs, ebs. Стало хуже. Используем по умолчанию.

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


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

16 hours ago, _summit_ said:

Где найти параметр, который отвечает за размер этого буфера?

ifconfig eth1 txqueuelen 10000

 

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


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

On 5/26/2020 at 5:25 PM, alibek said:

Разумеется, отклик увеличится на то время, что пакет находится в буфере.

On 12/31/2015 at 10:36 AM, aabc said:

В полисинге ничего быстрее не ходит так как нет буфера, это просто фильтр.

On 5/27/2020 at 10:28 AM, avovtchak said:

ifconfig eth1 txqueuelen 10000

Это просто длина выходной очереди. Резка идет еще до того как пакет попадет сюда.

Есть некоторые особенности работы полисера, которые, на мой взгляд, не позволяют полноценно использовать его в сетях операторов связи. В частности, при хорошей такой загрузке канала (скачивание торрента, например), все остальное полисер жестко дропает, не давая шансов пакету покинуть NAS в сторону абонента. Если, к примеру, папа качает фильм, то ребенку в танки нормально уже не поиграть. Я не нашел настроек чтобы как-то изменить данное поведение.

 

 

 

 

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

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


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

Ну так это и есть ratelimit, а не shaper

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


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

2 часа назад, _summit_ сказал:

Если, к примеру, папа качает фильм, то ребенку в танки нормально уже не поиграть. Я не нашел настроек чтобы как-то изменить данное поведение. 

OFFTOP - А Вам, в данном вопросе, поможет только DPI с классификацией трафика и его приоритетизированием, откуда ipt ratelimit узнает, что тут танки, а тут торрент.

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


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

55 минут назад, bike сказал:

OFFTOP - А Вам, в данном вопросе, поможет только DPI с классификацией трафика и его приоритетизированием

Не обязательно, штатный линуховый tc прекрасно с этим справляется.

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


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

1 hour ago, hRUst said:

Ну так это и есть ratelimit, а не shaper

Это полисер. И многие используют и все ОК. Но у нас при первом же тесте абон завопил, что танки лагают. Я ничего не имею против полисера, просто предупреждаю тех кто собирается использовать, что будет так.

 

52 minutes ago, bike said:

OFFTOP - А Вам, в данном вопросе, поможет только DPI с классификацией трафика и его приоритетизированием, откуда ipt ratelimit узнает, что тут танки, а тут торрент.

DPI тут совершенно не нужен. Просто нужны выходные очереди, которые могут ненадолго задержать пакет, но все-же его выпустят. Можно, конечно, классифицировать трафик до полисера, но простота его применения сходит на нет. 

Щас на тесте стоит tc. Даже в самой простой настройке карйне геморойный. Но более "деликатно" относиться к пользовательскому трафику. Он формирует выходные очереди и практически нет дропов пакетов.

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


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

У меня провайдер так настроил полисер, что каждый второй ssh заканчивается, не начавшись:

 

ssh_exchange_identification: Connection closed by remote host

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


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

2 часа назад, _summit_ сказал:

Это полисер. И многие используют и все ОК. Но у нас при первом же тесте абон завопил, что танки лагают. Я ничего не имею против полисера, просто предупреждаю тех кто собирается использовать, что будет так.

Странно, наши танкисты молчат, полисер в работе более полугода, переехали с шейпера.

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


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

Join the conversation

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

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

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

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

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

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

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