MPD и всё что связанно с шейпером

Вопросы и пожелания
Ответить
gekz
Сообщения: 169
Зарегистрирован: Пн май 17, 2010 7:30 am

MPD и всё что связанно с шейпером

Сообщение gekz »

Для большего понимания процесса нарезки скоростей средствами МПД + ng_car, озадачился написанием данного текста.
По первой тыкал как обычно палкой, как многие начинающие. Вроде работает но как то не так - это в душе.

В мане представлены несколько вариантов
Вариант 1-й FreeBSD ng_car шейпер
Для того что бы данный способ заработал необходимо
1. Собрать ядро с

Код: Выделить всё

options         NETGRAPH
options         NETGRAPH_ETHER
как собирать ядро надеюсь знаете
если нет, то у лиса об этом много написано. Собрать МПД с поддержкой ng_car. Лучше это делать после ребута системы после сборки ядра.
2. добавить в конфиг строку $conf{ng_car}=1;
3. поместить скрипт shaper_start.sh который лежит в папке с билингом - путь /usr/abills/misc/ipfw/ в директорию /usr/local/etc/rc.d для его старта после перезагрузки.
4. добавить запись в /etc/rc.conf

Код: Выделить всё

# Add the following lines to /etc/rc.conf to enable abills_shapper:
#
#   abills_shaper_enable="YES" - Enable abills shapper
#
#   abills_shaper_if="" - ABillS shepper interface default ng*
#
#   abills_nas_id="" - ABillS NAS ID default 1
#
#   abills_ip_sessions="" - ABIllS IP SEssions limit
#
#   abills_nat="EXTERNAL_IP:INTERNAL_IPS:NAT_IF" - Enable abills nat
#
5. собрать конфиг ферволла
пример с дивертом, лучше ipfw_nat.

Код: Выделить всё

${fw} add divert natd ip from ${VPNIP} to any out via ${LanOut}
${fw} add divert natd ip from any to ${IPOut} in via ${LanOut}
который будет дополнен автоматически правилами из скрипта шейпера
в итоге получится картинка

Код: Выделить всё

# перекинуть трафик в правила заворота в ng_car
09020        7        363 skipto 10120 ip from table(12) to table(2) in recv ng*  
09025        1        214 skipto 10125 ip from table(2) to table(13) out xmit ng*
09030        0          0 skipto 10130 ip from table(14) to table(3) in recv ng*
09035        0          0 skipto 10135 ip from table(3) to table(15) out xmit ng*

# Заворот глобального для прописанных пользователей в таблице 10 в ng_car
10000     1720     106227 netgraph tablearg ip from table(10) to any in recv ng*
10010     2863    3965522 netgraph tablearg ip from any to table(11) out xmit ng*
# Весь остальной трафик пропускать
10015        0          0 allow ip from any to any via ng*
#Локальный заворот в ng_car
10120        7        363 netgraph tablearg ip from table(12) to any in recv ng*
10125        1        214 netgraph tablearg ip from any to table(13) out xmit ng*

10130        0          0 netgraph tablearg ip from table(14) to any in recv ng*
10135        0          0 netgraph tablearg ip from any to table(15) out xmit ng

далее идут ваши правила
divert natd ip from ${VPNIP} to any out via ${LanOut}
divert natd ip from any to ${IPOut} in via ${LanOut}

и тут
теперь как всё это работает
при подключении юзера средствами МПД, к примеру ПППое МПД обращается к радиусу
радиус с вою очередь к базе. В качестве ответа от радиуса в МПД попадают параметры которые обрабатывает скрипт linkupdown
Который читает конфиг и видит что указанно шейпить средствами ng_car.
Теперь что происходит
Получив параметры, скрипт добавляет в нетграф ноду с уникальным названием, у который есть параметры ограничения. Теперь, если не завернуть в нетграф трафик, то никакие резалки работать не будут.
Этим занимаются вот эти 2 строчки

Код: Выделить всё

10000     1720     106227 netgraph tablearg ip from table(10) to any in recv ng*
10010     2863    3965522 netgraph tablearg ip from any to table(11) out xmit ng*
Которые и загоняют в неграф весь трафик от пользователей из таблицы 10 и 11.

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

я сделал проще
не заморачиваясь добавлением скриптов, переписал свой

Код: Выделить всё

#!/bin/sh
fw="/sbin/ipfw"

#WAN
LanOut="bge0"
IPOut="10.10.1.51"
NetOut="24"
MaskOut="255.255.255.0"

#LAN
LanIn="bge1"
IPIn="172.18.1.1"
NetInIP="172.18.0.0"
NetInMask="16"
MaskIn="255.255.0.0"

#PPPOE-Clients
VPN="ng*"
VPNIP="10.10.0.0/16"
VPNipOUT="10.10.10.254"

MyIP1="10.10.1.70"
dns1="10.10.1.1"

${fw} -f flush

${fw} table 1 flush
${fw} table 2 flush
${fw} table 10 flush
${fw} table 11 flush
${fw} table 20 flush

#VPN ip adress clients
${fw} table 1 add 10.10.0.0/16
#LAN
${fw} table 20 add 172.18.0.0/16

${fw} add allow ip from any to any via lo0

${fw} add netgraph tablearg ip from 'table(10)' to any in recv ng*
${fw} add netgraph tablearg ip from any to 'table(11)' out xmit ng*

${fw} add allow ip from any to any via ${VPN}
${fw} add allow ip from any to any via ${LanIn}

${fw} add divert natd ip from ${VPNIP} to any out via ${LanOut}
${fw} add divert natd ip from any to ${IPOut} in via ${LanOut}

${fw} add pass tcp from any to any established
${fw} add pass ip from ${IPOut} to any out xmit ${LanOut}

#ZAPRET na in squid
${fw} add deny tcp from any to any 3128 in via ${LanOut}

#ENABLE DNS
${fw} add pass udp from any to any 53 via ${LanOut}
${fw} add pass udp from any 53 to any via ${LanOut}

${fw} add pass ip from any to 10.10.1.51 21,22 in via ${LanOut} setup
${fw} add pass ip from any to 10.10.1.51 9443 in via ${LanOut} setup

${fw} add pass all from any to any via ${LanIn}

${fw} add allow icmp from any to ${IPOut} in via ${LanOut} icmptype 0,3,4,11,12
${fw} add allow icmp from any to ${NetInIP}/${NetInMask} in via ${LanOut} icmptype 0,3,4,11,12
${fw} add allow icmp from ${IPOut} to any out via ${LanOut} icmptype 3,8,12
${fw} add allow icmp from ${IPOut} to any out via ${LanOut} frag

${fw} add 65500 deny ip from any to any
как то так

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Re: MPD и всё что связанно с шейпером

Сообщение sopov »

А я бы сделал еще проще - воспользовался бы радиус-атрибутами для передачи параметра ограничения скорости ng_car через встроенный механизм mpd. Нужно просто добавить что-то типа

Код: Выделить всё

mpd-limit+=in#1=all shape 4000000 750000,
mpd-limit+=out#1=all shape 4000000 750000
в RADIUS Parameters тарифного плана.

gekz
Сообщения: 169
Зарегистрирован: Пн май 17, 2010 7:30 am

Re: MPD и всё что связанно с шейпером

Сообщение gekz »

это хорошо если нужно ограничить всё
но вот более гибко настроить тариф, через интервалы.
прописывай цифры
200к
500к
и тд
да и ошибок меньше

Ответить