Страница 1 из 1
Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-20 15:49:16
Torvald
Товарищи, стоит задача ограничить количество нат-сессий на каждый IP?
Как это осуществить?
Уже находится и действует несколько лет PF c ALTQ.
Всё натиться, шейпица, но вот встала задача, появились в сети юзеры тыкающие более 1000 соединений со своего рабочего места (чаще всего торрентом но не всегда..).
Как решить эту проблему?
Код: Выделить всё
...
nat on $wan1 proto tcp from <wan1> to any -> ($wan1)
...
queue comp1 bandwidth 40Mb priority 4
queue comp2 bandwidth 40Mb priority 4
...
pass out quick on $vlan20 from any to 10.100.7.60 queue comp1 no state
pass out quick on $vlan20 from any to 10.100.7.61 queue comp2 no state
...
pass in quick on $vlan20 route-to ($wan1 $gw1) from <wan1> to !10.0.0.0/8 no state
...
Всё было бы просто, но всему виной "no state" в правилах!!! Как это обойти?
Ведь не выставишь же "source-track", "max number"... и т.д, а "no state" не уберёшь же...из-за шейпера.
Но ведь где-то вся эта байда храниться (session), не зря же "pfctl -ss" выдаёт
Может есть вариант в самом NAT'е указать на количество записей с IP/правила... но не нашёл..
Может плохо искал, ткните носом...
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-29 12:02:06
skeletor
Тоже интересно. Если найдёте ответ - отпишитесь.
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-30 10:16:55
pimlab
Может я и не прав, но если поставить таг на все, что пришло с влан20 и по таг шейпить с кееп стате на внешнем интерфейсе
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-30 12:20:36
skeletor
Эм, мне кажется не выйдет: один и тот же пакет должен пройти по 2-м разным правилам и применится. Написал в рассылку pf, посмотрим.
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-30 12:53:58
pimlab
тока что попробовал пф проглотил, а вот как оно там работает
Код: Выделить всё
pass out quick on $ext_if inet from ($ext_if) to !(self) queue (lan_out,ack_out) tagged INET_IF keep state (max-src-conn 50, max-src-conn-rate 100/2)
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-30 12:55:43
Torvald
pimlab писал(а):тока что попробовал пф проглотил, а вот как оно там работаетКод: Выделить всёpass out quick on $ext_if inet from ($ext_if) to !(self) queue (lan_out,ack_out) tagged INET_IF keep state (max-src-conn 50, max-src-conn-rate 100/2)
О как, и прямо в секунду когда я хотел писать ответ что с тегом у меня не заработало... сейчас буду курить что я не так писал...
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-10-30 13:00:44
skeletor
pf-то может проглотить, но может не заработать.
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-11-25 18:02:09
Torvald
Добрый день, сразу прощу прощения... некоторое время небыло возможности поиграться... и так, пока результат плачевный..
Код: Выделить всё
pass in quick on $vlan20 route-to ($wan1 $gw1) from <wan1> to !10.0.0.0/8 tag lan no state
pass in quick on $vlan20 route-to ($wan2 $gw2) from <wan2> to !10.0.0.0/8 tag lan no state
pass in quick on $vlan20 route-to ($wan3 $gw3) from <wan3> to !10.0.0.0/8 tag lan no state
pass in quick on $vlan20 route-to ($wan4 $gw4) from <wan4> to !10.0.0.0/8 tag lan no state
...
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan2 route-to ($wan2 $gw2) from ($wan2) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan3 route-to ($wan3 $gw3) from ($wan3) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan4 route-to ($wan4 $gw4) from ($wan4) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any keep state
pass out quick on $wan2 route-to ($wan2 $gw2) from ($wan2) to any keep state
pass out quick on $wan3 route-to ($wan3 $gw3) from ($wan3) to any keep state
pass out quick on $wan4 route-to ($wan4 $gw4) from ($wan4) to any keep state
, где vlan20 - клиенская сетка
Как итог никакого влияния не оказывает, (хотя не иссключаю в листинге правил банальной ошибки), но мне кажется что нат поверх тега перекидывает сразу на вторую группу правил wan-out.
Эксперименты продолжаю дальше...
UPD: если рассписать по каждому клиенту и привязать их к конкретным WAN каналам (что уже дибилизм., ибо усложняем перекидывание с wan1 на wan2...), то всёравно оно нихрена не даёт:
Код: Выделить всё
pass in quick on $vlan20 route-to ($wan1 $gw1) from cl-1 to !10.0.0.0/8 tag cl-1 no state
pass in quick on $vlan20 route-to ($wan1 $gw1) from cl-2 to !10.0.0.0/8 tag cl-2 no state
...
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any tagged cl-1 keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any tagged cl-2 keep state (max-src-conn 200, max-src-conn-rate 50/1)
Думаю (-ем) дальше...
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-11-25 18:21:17
Torvald
Может очевидный вещи, которые сразу не показались очевидными.
PF сей листинг вобще рассматривает с точки зрения что отправитель является ($wan1),... и посему для него ограничивает в 200.
А значит ни о каком ограничении натовских сессий основаных на IP приватной сети и речи быть не может!
Код: Выделить всё
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any keep state (max-src-states 200)
pass out quick on $wan2 route-to ($wan2 $gw2) from ($wan2) to any keep state (max-src-states 200)
pass out quick on $wan3 route-to ($wan3 $gw3) from ($wan3) to any keep state (max-src-states 200)
pass out quick on $wan4 route-to ($wan4 $gw4) from ($wan4) to any keep state (max-src-states 200)
Или где-то ошибаюсь?
Вывод пока в том, что нужно е***ошить, как описано в самом первом посте.. именно с правилами in lan и обойти шейпинг.
Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-12-01 13:11:07
pimlab
Torvald писал(а):PF сей листинг вобще рассматривает с точки зрения что отправитель является ($wan1),... и посему для него ограничивает в 200.
Я тоже к этому выводу пришел.
Может вам ipfw для этих целей заюзать,а шейпить в пф.
С ipfw уже лет 10 не заглядывал, ничего не помню

Re: Ограничение NAT session во FreeBSD (PF)
Добавлено: 2014-12-01 14:51:36
Torvald
pimlab писал(а):Я тоже к этому выводу пришел.
Может вам ipfw для этих целей заюзать,а шейпить в пф.
С ipfw уже лет 10 не заглядывал, ничего не помню

Я уже и этот вариант рассматривал... но уж очень не хочется плодить гору фильтров.
Пока что данную проблему решил добавлением ещё одной железки (MikroTik CRS125-24G-1S-RM), в неё вынес шейпер и резалку сессий, остальное (нат, ван каналы и т.д.) осталось на Free, ибо фряха роднее как-то..
Но и тут как-бы вариант менее надёжный, железки 2 - проблем в случае чего в два раза больше
