Отправить 'Шейпирование трафика ng_car + ipfw на FreeBSD' другу по e-mail
Отправить другу по Email копию 'Шейпирование трафика ng_car + ipfw на FreeBSD'
Loading ...
Сети, настройка оборудования, сетевые сервисы.
|
|||||||||
Subnets.ru Регистрация IP и Автономных систем mega-net.ru |
Отправить другу по Email копию 'Шейпирование трафика ng_car + ipfw на FreeBSD'
DruG сказал:
Ну хоть ком-то моя идея понравилась.
У меня скрипты управления несколько громоздки (мы не используем mpd, раздаются статические адреса) и таблиц побольше, но прочитав статью подумаваю сократить их число вдвое.
При большом числе нод нужен тюниг параметров ядра через sysctl:
net.graph.recvspace
net.graph.maxdgram
kern.ipc.maxsockbuf
И сопутствующих им параметров.
Если интересны мои скрипты управления, могу прислать — но в perl-е я новичек, поэтому сильно не пинать 🙂
05.02.2009, 20:18admin сказал:
DruG
06.02.2009, 09:25А ты мог бы тогда выложить какие значения у приведенных тобой параметров sysctl ты используешь ?
И сопутствующие тоже 🙂
DruG сказал:
Я считал так:
Результат измерения №1:
281 нода CAR (1562) + 2 cист.
netgraph 843 571K
netgraph_hook 1124 141K
netgraph_node 283 71K
net.graph.maxdata: 512
net.graph.maxalloc: 4096
net.graph.recvspace: 20480
net.graph.maxdgram: 20480
———
Прогнозируемые значения:
562 ноды СAR (2124) + 2 сист.
Результат измерения №2:
565 нод СAR (2130) + 2 cист.
netgraph 1695 1148K
netgraph_hook 2260 283K
netgraph_node 567 142K
net.graph.maxdata: 512
net.graph.maxalloc: 4096
net.graph.recvspace: 40960
net.graph.maxdgram: 40960
Вывод:
567 — 283 = 284 ноды
[BUF]
То есть на одну ноду CAR: 20480/284 = ~72Byte
То есть на 4000 нод: 4000*144 = 288000 Byte
[MEM]
То есть на одну ноду CAR: 1148/284 = ~2K
То есть на 4000 нод: 4000*2 = 8000K
При увеличении таком увеличении параметров net.graph.recvspace, net.graph.maxdgram (4000 нод) мы упираемся в лимит kern.ipc.maxsockbuf. Как его увеличивать, я честно не помню, — но на мой взгляд от должен быть как минимум сумма net.graph.recvspace и net.graph.maxdgram.
Все выше изложенное может быть неверным. 🙂
06.02.2009, 10:22mlevel сказал:
А как можно в один шейп(всмисле на одну скорость) зажать несколько ІР?
17.01.2010, 02:00admin сказал:
что значит «как» ? 🙂
в статье написано:
>tablearg – это аргумент в таблице (10 и 20). Он должен быть уникальным для каждого пользователя, именно по >этому аргументу создается нода netgraph, которая и будет шейпить (лимитировать скорость) пользователя.
соответственно если ты хочешь под один шейп загонять несколько IP, то тогда у тебя tablearg уже НЕ будет уникальным, а будет повторяться.
опять же исходя из примера вывод 10-той таблицы будет примерно таким:
#:test:~:ipfw table 10 list
172.16.10.26/32 10
172.16.10.27/32 10
172.16.10.28/32 20
172.16.10.29/32 20
из чего следует что 172.16.10.26 и 172.16.10.27 делят один шейп на двоих, как и 172.16.10.28 с 172.16.10.29
18.01.2010, 20:05т.к. их tablearg одинаков
gluck сказал:
а как должно работать вот это:
04000 netgraph tablearg ip from table(20) to table(30) out via bge0
04010 netgraph tablearg ip from table(30) to table(20) out via ng*
который из tableargs?
02.02.2010, 09:41admin сказал:
не совсем понятен вопрос.
tablearg — это аргумент, который идет в таблице после IP-адреса
пример:
ipfw table 10 add 172.16.10.28/32 20
20-ть и есть tablearg
ipfw table 99 add 172.16.11.139/32 45
03.02.2010, 15:5445-ть это tablearg
gluck сказал:
в каждой таблице есть аргумент. какой из них будет использован в этом правиле:
04000 netgraph tablearg ip from table(20) to table(30) out via bge0
03.02.2010, 16:06proks сказал:
Спасибо автору за интересную статью.
По ng_car полезная информация, но эта конструкция по-моему не будет работать правильно ?
04000 netgraph tablearg ip from table(20) to table(30) out via bge0
04010 netgraph tablearg ip from table(30) to table(20) out via ng*
Согласно ману ipfw параметр tablearg будет выбираться из второй таблицы:
If two tables are used in a rule, the result of the second (destination) is used.
А у Вас она в одном случае table(30) — таблица ip локальных ресурсов, а в другом table(20) — таблица пользовательских ip.
В свое время решил этот вопрос все же на pipe-ах и при помощи skipto проблему с 2 table в одном правиле — разнес их на два.
29.03.2010, 19:20А для Вашего случая это выглядело бы так:
02000 skipto 4000 ip from table(20) to table(30) out via bge0
02010 skipto 4010 ip from table(30) to table(20) out via ng*
04000 netgraph tablearg ip from table(20) to any out via bge0
04010 netgraph tablearg ip from any to table(20) out via ng*