По первой тыкал как обычно палкой, как многие начинающие. Вроде работает но как то не так - это в душе.
В мане представлены несколько вариантов
Вариант 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
#
пример с дивертом, лучше 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*
Возможно малость чегойто и напутал, поправте.
Но думаю будет интересно всё ж кому то.
я сделал проще
не заморачиваясь добавлением скриптов, переписал свой
Код: Выделить всё
#!/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