Правила IPFW

Технические вопросы по UTM 5.0
Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Правила IPFW

Сообщение Oleg_121 »

Есть такая задача (BSD 6.3+mpd5):
Существует группа тарифных планов с разной скоростью для пользователей.
Есть пользователи которым даем трубу 64К , 128к , и так далее до 4096К.
При этом если баланс положительный то перенаправляем пользователя на vlan для предоставления интернета,
если отрицательный то просто дропаем пакеты от него.
Как это было решено:
Для каждого пользователя делаем правило
add RULE_ID fwd ххх.ххх.ххх ip from any to UIP out via ng*
pipe RULE_ID config bw (скорость кот указанна в тарифном плане)Kbit/s
add RULE_ID pipe RULE_ID ip from any to UIP
При этом создается огромное количество правил в ipfw, ( пользователей ок 4000) что как выяснилось не есть хорошо.

И появилось предложение использовать таблицы для правил ipfw.
Предположительно так:
Для rfw прописываем в биллинге только такие правила

Включение:
ipfw table 1 add UIP , 64
ipfw table 1 add UIP , 128
ipfw table 1 add UIP , 256
ipfw table 1 add UIP , 512
ipfw table 1 add UIP , 1024
ipfw table 1 add UIP , 2048
ipfw table 1 add UIP , 4096

Выключение:
ipfw table 1 delete UIP , 64
ipfw table 1 delete UIP , 128
ipfw table 1 delete UIP , 256
ipfw table 1 delete UIP , 512
ipfw table 1 delete UIP , 1024
ipfw table 1 delete UIP , 2048
ipfw table 1 delete UIP , 4096
и привязываем их к соответствующим тарифам

В конфиге фаревола прописываем
ipfw pipe 1 config bw 64Kbit/s mask dst-ip 0xffffffff
ipfw pipe 2 config bw 128Kbit/s mask dst-ip 0xffffffff
ipfw pipe 3 config bw 256Kbit/s mask dst-ip 0xffffffff
ipfw pipe 4 config bw 512Kbit/s mask dst-ip 0xffffffff
ipfw pipe 5 config bw 1024Kbit/s mask dst-ip 0xffffffff
ipfw pipe 6 config bw 2048Kbit/s mask dst-ip 0xffffffff
ipfw pipe 7 config bw 4096Kbit/s mask dst-ip 0xffffffff

ipfw add pipe 1 ip from any to table\(1,64\)
ipfw add pipe 2 ip from any to table\(1,128\)
ipfw add pipe 3 ip from any to table\(1,256\)
ipfw add pipe 4 ip from any to table\(1,512\)
ipfw add pipe 5 ip from any to table\(1,1024\)
ipfw add pipe 6 ip from any to table\(1,2048\)
ipfw add pipe 7 ip from any to table\(1,4096\)

add 5000 fwd ххх.ххх.ххх ip from any to table\(1\) out via ng*

решение на первый взгляд красивое - нет огромного количества правил.
Баланс положительный IP в таблице , интернет есть.
Баланс отрицательный в таблице IP нет , интернета нет.
Но возникло сомнение.
Подскажите пожалуйста запись table\(1\) , будет ли выбирать всех пользователей из таблицы не зависимо от второго значения или нет?
И вообще решение такое правильное или нет?

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

у меня на каждый тариф по две таблицы и две трубы. почему у вас таблица одна, а труб несколько?

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

включайте ng_car(mpd-limit) на рейтлимит, оставьте фаерволу его прямые обязанности - блокировать или пропускать пакеты.
Если же хотите так, то можно вообще одним правилом обойтись
создать трубы с номерами равными соотв скоростям и сказать фаерволу
ipfw add pipe tablearg ip from any to table\(1\)
будет выбираться труба с номером соотв аргументу.
Или оставить трубы как есть, но переделать правила включения/выключения.

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

1. одна таблица и одна труба потому что меня интересует только трафик на абонента.
2. По поводу ограничения скорости в mpd5, честно говоря очень интересно, но не было времени разбираться. Если кто нибудь подскажет как прописать в радиусе нетапа атрибуты для mpd5 и сам конфиг mpd для примера было бы здорово. Но гложет одно сомнение pipe работает на уровне ядра а mpd5 даемон. Не будет ли тормозить?

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

mikkey finn писал(а):то можно вообще одним правилом обойтись
создать трубы с номерами равными соотв скоростям и сказать фаерволу
ipfw add pipe tablearg ip from any to table\(1\)
будет выбираться труба с номером соотв аргументу.
Или оставить трубы как есть, но переделать правила включения/выключения.
Но ведь в этом случае все пользователи со скоростью например 64 запихнуться в одну трубу которая имеет 64К , а у меня для каждого пользователя по шаблону создается труба его личная 64К.

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

tablearg создаёт трубу на каждого пользователя из таблицы согласно заданному параметру

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

Эта конструкция работает именно так, как вы хотите.
tablearg - это и есть тот самый аргумент, который вы указываете через запятую.
Если создать шаблон pipe с mask dst-ip 0xffff, то оно будет на основе шаблона делать динамические пайпы.
По поводу Ng_car - это модуль ядра, Mpd только вставляет ссылки на модуль при создании интерфейса. Работать должно даже быстрее чем пайп.

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

Пожалуйста напишите пример не понимаю как это будет работать.
Сидел 2 часа с ручкой и бумагой - не понимаю!

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

Какая именно?
Mpd5/ng_car?
Там надо графы рисовать. Тема разжевана здесь
дамминет с пайпами? да так же как и предложенное
ipfw pipe 64 config bw 64Kbit/s queue 100 mask dst-ip 0xffff
ipfw pipe 128 config bw 128Kbit/s queue 100 mask dst-ip 0xffff
ipfw pipe 256 config bw 256Kbit/s queue 100 mask dst-ip 0xffff
...

ipfw add 1000 pipe tablearg ip from any to table\(1\)
...
При это правила на включение и выключение остаются ваши.
Наличие mask dst-ip указывает, что это шаблон трубы. Сама труба создается правилом 1000, когда есть трафик попадающий под это правило.
При этом шейпер состоит из одной строчки. отключатель тоже из одной строчки. Форвард... ну доп строчка, но надо учитывать еще ip.fw.one_pass

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

Спасибо все заработало. Стало значительно меньше правил - в сотню раз, да и pipe не статические а динамические значительно лучше!

Mental Noize
Сообщения: 116
Зарегистрирован: Вт май 15, 2007 12:50

Сообщение Mental Noize »

Я думаю у многих есть городской трафик, если будете резать всё на ng* с помощью ng_car, получите что вы пользователю режете вообще всё. А надо только Интернет.
Механизм фильтра ip-адресов в ng_car является неудобным и неприемлимым. Лучше шейпить по внешним интерфейсам пиринг\Интернет.
Если вы знаете как ng_car умеет по интерфейсам резать абонентов, раскажите.

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

а что не так с bpf(mpd-filter), учитывая, что прописываются они вполне себе читабельно?
У вас адресация локалки меняется каждый час? я думаю, реже чем раз в год.
Знаю сеть, которая продает инет по pppoe, если это безлимит, то скорость режется и на инет и на локал. локал они считают и тарифицируют.

Oleg_121
Сообщения: 81
Зарегистрирован: Пн апр 14, 2008 21:09

Сообщение Oleg_121 »

У нас случай немного другой и использовать шейпирование mpd не возможно. Все дело в том что я не знаю ИП адрес пользователя который придет ко мне по ВПН , он может быть любым. Пользователь приходит из внешней сети с произвольного провайдера , а уже потом я присваиваю ему свой серый ИП и отдаю ему трафик.

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

mpd-limit без фильтра или с фильтром "any" работает так, что режется вообще все. Если нет задачи выфильтровывать определенные сети, то можно сразу прописать ограничения, они применятся к тому ng-интерфейсу, на который подключился данный конкретный пользователь. от того, какой адрес получил пользователь шейпер ng_car не зависит, если он вешается средствами mpd-limit

Mental Noize
Сообщения: 116
Зарегистрирован: Вт май 15, 2007 12:50

Сообщение Mental Noize »

mikkey finn писал(а): У вас адресация локалки меняется каждый час? я думаю, реже чем раз в год.
Именно. И не локалки, а всего города. Несколько раз в месяц меняется. BGP.
А средствами bpf filter это только в самом тарифе надо менять radius-атрибуты. Жутко неудобно и тут есть свои нюансы фильтров шейпа.

Ответить