Правила IPFW
Правила IPFW
Есть такая задача (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\) , будет ли выбирать всех пользователей из таблицы не зависимо от второго значения или нет?
И вообще решение такое правильное или нет?
Существует группа тарифных планов с разной скоростью для пользователей.
Есть пользователи которым даем трубу 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\) , будет ли выбирать всех пользователей из таблицы не зависимо от второго значения или нет?
И вообще решение такое правильное или нет?
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
включайте ng_car(mpd-limit) на рейтлимит, оставьте фаерволу его прямые обязанности - блокировать или пропускать пакеты.
Если же хотите так, то можно вообще одним правилом обойтись
создать трубы с номерами равными соотв скоростям и сказать фаерволу
ipfw add pipe tablearg ip from any to table\(1\)
будет выбираться труба с номером соотв аргументу.
Или оставить трубы как есть, но переделать правила включения/выключения.
Если же хотите так, то можно вообще одним правилом обойтись
создать трубы с номерами равными соотв скоростям и сказать фаерволу
ipfw add pipe tablearg ip from any to table\(1\)
будет выбираться труба с номером соотв аргументу.
Или оставить трубы как есть, но переделать правила включения/выключения.
1. одна таблица и одна труба потому что меня интересует только трафик на абонента.
2. По поводу ограничения скорости в mpd5, честно говоря очень интересно, но не было времени разбираться. Если кто нибудь подскажет как прописать в радиусе нетапа атрибуты для mpd5 и сам конфиг mpd для примера было бы здорово. Но гложет одно сомнение pipe работает на уровне ядра а mpd5 даемон. Не будет ли тормозить?
2. По поводу ограничения скорости в mpd5, честно говоря очень интересно, но не было времени разбираться. Если кто нибудь подскажет как прописать в радиусе нетапа атрибуты для mpd5 и сам конфиг mpd для примера было бы здорово. Но гложет одно сомнение pipe работает на уровне ядра а mpd5 даемон. Не будет ли тормозить?
Но ведь в этом случае все пользователи со скоростью например 64 запихнуться в одну трубу которая имеет 64К , а у меня для каждого пользователя по шаблону создается труба его личная 64К.mikkey finn писал(а):то можно вообще одним правилом обойтись
создать трубы с номерами равными соотв скоростям и сказать фаерволу
ipfw add pipe tablearg ip from any to table\(1\)
будет выбираться труба с номером соотв аргументу.
Или оставить трубы как есть, но переделать правила включения/выключения.
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
Эта конструкция работает именно так, как вы хотите.
tablearg - это и есть тот самый аргумент, который вы указываете через запятую.
Если создать шаблон pipe с mask dst-ip 0xffff, то оно будет на основе шаблона делать динамические пайпы.
По поводу Ng_car - это модуль ядра, Mpd только вставляет ссылки на модуль при создании интерфейса. Работать должно даже быстрее чем пайп.
tablearg - это и есть тот самый аргумент, который вы указываете через запятую.
Если создать шаблон pipe с mask dst-ip 0xffff, то оно будет на основе шаблона делать динамические пайпы.
По поводу Ng_car - это модуль ядра, Mpd только вставляет ссылки на модуль при создании интерфейса. Работать должно даже быстрее чем пайп.
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
Какая именно?
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
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
-
- Сообщения: 116
- Зарегистрирован: Вт май 15, 2007 12:50
Я думаю у многих есть городской трафик, если будете резать всё на ng* с помощью ng_car, получите что вы пользователю режете вообще всё. А надо только Интернет.
Механизм фильтра ip-адресов в ng_car является неудобным и неприемлимым. Лучше шейпить по внешним интерфейсам пиринг\Интернет.
Если вы знаете как ng_car умеет по интерфейсам резать абонентов, раскажите.
Механизм фильтра ip-адресов в ng_car является неудобным и неприемлимым. Лучше шейпить по внешним интерфейсам пиринг\Интернет.
Если вы знаете как ng_car умеет по интерфейсам резать абонентов, раскажите.
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
У нас случай немного другой и использовать шейпирование mpd не возможно. Все дело в том что я не знаю ИП адрес пользователя который придет ко мне по ВПН , он может быть любым. Пользователь приходит из внешней сети с произвольного провайдера , а уже потом я присваиваю ему свой серый ИП и отдаю ему трафик.
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
mpd-limit без фильтра или с фильтром "any" работает так, что режется вообще все. Если нет задачи выфильтровывать определенные сети, то можно сразу прописать ограничения, они применятся к тому ng-интерфейсу, на который подключился данный конкретный пользователь. от того, какой адрес получил пользователь шейпер ng_car не зависит, если он вешается средствами mpd-limit
-
- Сообщения: 116
- Зарегистрирован: Вт май 15, 2007 12:50
Именно. И не локалки, а всего города. Несколько раз в месяц меняется. BGP.mikkey finn писал(а): У вас адресация локалки меняется каждый час? я думаю, реже чем раз в год.
А средствами bpf filter это только в самом тарифе надо менять radius-атрибуты. Жутко неудобно и тут есть свои нюансы фильтров шейпа.