ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Отправить 'Шейпирование трафика ng_car + ipfw на FreeBSD' другу по e-mail

Отправить другу по Email копию 'Шейпирование трафика ng_car + ipfw на FreeBSD'

* Required Field







E-Mail Image Verification

Loading ... Loading ...
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 5, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

комментариев 9

  1. DruG сказал:

    Ну хоть ком-то моя идея понравилась.
    У меня скрипты управления несколько громоздки (мы не используем mpd, раздаются статические адреса) и таблиц побольше, но прочитав статью подумаваю сократить их число вдвое.

    При большом числе нод нужен тюниг параметров ядра через sysctl:
    net.graph.recvspace
    net.graph.maxdgram
    kern.ipc.maxsockbuf
    И сопутствующих им параметров.

    Если интересны мои скрипты управления, могу прислать — но в perl-е я новичек, поэтому сильно не пинать 🙂

  2. admin сказал:

    DruG
    А ты мог бы тогда выложить какие значения у приведенных тобой параметров sysctl ты используешь ?
    И сопутствующие тоже 🙂

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

    Все выше изложенное может быть неверным. 🙂

  4. mlevel сказал:

    А как можно в один шейп(всмисле на одну скорость) зажать несколько ІР?

  5. admin сказал:

    что значит «как» ? 🙂

    в статье написано:
    >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
    т.к. их tablearg одинаков

  6. 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?

  7. admin сказал:

    не совсем понятен вопрос.
    tablearg — это аргумент, который идет в таблице после IP-адреса
    пример:
    ipfw table 10 add 172.16.10.28/32 20
    20-ть и есть tablearg

    ipfw table 99 add 172.16.11.139/32 45
    45-ть это tablearg

  8. gluck сказал:

    в каждой таблице есть аргумент. какой из них будет использован в этом правиле:

    04000 netgraph tablearg ip from table(20) to table(30) out via bge0

  9. proks сказал:

    Спасибо автору за интересную статью.

    По 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 в одном правиле — разнес их на два.
    А для Вашего случая это выглядело бы так:
    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*

Добавить комментарий

Вам следует авторизоваться для размещения комментария.