LINUX.ORG.RU
ФорумAdmin

FreeBSD pf+altq динамический шейпинг

 , , ,


0

3

Всем привет.

К офисному серверу подключен инет канал на 10мбит/с. Есть локальная сеть /24 откуда в инет ломится неизвестное количество юзеров (гости с ноутами, мобильники и т.д. через wifi). Нужно равномерно делить всю доступную полосу пропускания канала исходя из количества айпишников которые ломятся в инет. Причем независимо от того, сколько сессий открывает юзер. Так же выставлять приоритеты для трафика. Грубо говоря, если Вася качает торренты, то чтоб у директора Пети войс-колл скайпа не тормозил. С приоритетами все предельно просто. А вот как динамически запихивать все коннекты с айпишника в определенную очередь и ограничивать ее с заимствованием у других очередей(если канал простаивает)? На Линуксе подобная задача уже решена при помощи htb+sfq+tc nfct-dst. А как это реализовать на FreeBSD+pf+altq(или hfsc)? Не создавать же больше двухсот очередей на все возможные айпишники. А если подсеть будет не /24 а /16, тогда вообще повеситься. Во всех нагугленных примерах явно указываются айпишник/группа айпишников при создании очередей, но это не то что мне нужно. Да и в доках/манах по pf ничего подобного не могу найти.

Заранее благодарен за любые идеи!

★★★★★

Я когда-то такое настраивал на обычном ipfw. Для разного трафика создаешь свой pipe, для всех адресов одинаковый весь итд. Шасси точнее помню, но работает до сих пор. Только если трафик большой проц жрать начинает, но 10мбит это ерунда.

anonymous ()
Ответ на: комментарий от anonymous

Я когда-то такое настраивал на обычном ipfw. Для разного трафика создаешь свой pipe, для всех адресов одинаковый весь итд.

А как мне балансировать между айпишниками а не потоками? Мне нужно чтоб торрент клиент качающий в 100 потоков с одного айпишника получал такую же полосу канала как и однопоточное приложение качающее с другого айпишника.

iron ★★★★★ ()
Ответ на: комментарий от iron
disable one_pass

## global shaper
pipe 1 config bw 10Mbit/s queue 100
pipe 2 config bw 10Mbit/s queue 100

queue 10 config pipe 1 queue 100 weight 40 mask dst-ip 0xffffffff
queue 11 config pipe 2 queue 100 weight 40 mask src-ip 0xffffffff

queue 10 ip from any to any out via $lan
queue 11 ip from any to any in via $lan

Еще очередей в те же трубы с другим весом и можно приотизировать клиентов. Все равные, но некоторые ровнее.

man ipfw и внимательнее к one_pass

hizel ★★★★★ ()
Ответ на: комментарий от hizel

И да, погулите по site:lissyara.su там на сайте и на форуме не раз обсасывались всякие вариации.

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Еще очередей в те же трубы с другим весом и можно приотизировать клиентов. Все равные, но некоторые ровнее.

С этим все понятно, спасибо. А как происходит заимствование полосы? По логике, у кого больше приоритет тот и будет тянуть одеяло на себя. И тем самым соседние трубы будут голодать. Так? Если да, то возникает пару вопросов: - если один пайп будет тащить больше канала на себя, не упадел ли до 0-ля скорость в других трубах? - можно ли там как-то задать гарантированную скорость как в htb?

iron ★★★★★ ()
Ответ на: комментарий от iron

Нет соседних труб. Одна труба в одну сторону с очередями в ней которые на основе весов распределяют трубу по ip. Если вам надо сложнее, то это на порядок сложнее.

Равномерное распределение обеспечивают очереди, скорость ограничивает труба.

hizel ★★★★★ ()
Ответ на: комментарий от hizel

В моем примере по маске автоматически создаются queue для каждого ip по маске и эти очереди между собой равномерно устаканисваются в рамках своей трубы к которой прибиты

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Если вам надо сложнее, то это на порядок сложнее.

Каким образом при данной конфигурации независимо от IP дать наибольший приоритет скайпу и ssh? Нужно создавать очередь внутри трубы с наивысшим приоритетом? Плюс, равномерно балансировать трафик на основании IP на случай, если кто-то решит по scp переливать фильмак, или додумается ssh <host> 'cat 1.iso' > 1.iso. Программисты порой такие затейники. :)

iron ★★★★★ ()
Ответ на: комментарий от iron

Вручную подстраивать очереди под нужный трафик и остальных на общих началах.

like this

queue 12 config pipe 1 queue 100 weight 70 mask dst-ip 0xffffffff
queue 12 ip from any 22 to any out via $lan # ssh
skip $? ip from any 22 to any out via $lan # skip double queue

hizel ★★★★★ ()
Ответ на: комментарий от hizel

После добавления этих правил, сетка отваливается. ping выдает: ping: sendto: No buffer space available

netstat -m

515/1765/2280 mbufs in use (current/cache/total)
512/758/1270/2097152 mbuf clusters in use (current/cache/total/max)
512/753 mbuf+clusters out of packet secondary zone in use (current/cache)
0/33/33/116122 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/34406 9k jumbo clusters in use (current/cache/total/max)
0/0/0/19353 16k jumbo clusters in use (current/cache/total/max)
1152K/2089K/3242K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters delayed (4k/9k/16k)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0 requests for sfbufs denied
0 requests for sfbufs delayed
20 requests for I/O initiated by sendfile

Не могу понять чего ему не хватает.

И еще. Есть файлик в котом список подсетей UA-IX к которым скорость 100мб/с. Каким образом его зарядить в что-то на подобие таблицы в pf чтоб потом организовать доступ к этим ресурсам на полной скорости?

iron ★★★★★ ()
Ответ на: комментарий от iron

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

Таблицы ipfw вам помогут с ua-ix.

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Почитал маны и в голове уже выстроилась вся логика построения всего задуманного. Осталось лишь это воплотить в жизнь.

hizel, благодарю за помощь.

iron ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.