=====FreeBSD Dummynet/table шейпер=====
Данная схема шейпера работает следующим образом\\
При старте системы инициализируются правила обрезки скорости для каждого тарифного плана два правила на каждый класс трафика.
При подключении абонента его ип вносится в IPFW таблицу 10 и 11 (входной и исходящий трафик) с аргументом номер тарифного плана
====Опции ядра====
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
**Таблицы сетей. Данные о сетях**
^table 1 | Всегда глобальная таблица. Значение по умолчанию 0.0.0.0/0 |
^table 2 | Таблица с пиринговыми сетями |
В таблицу пиринговых сетей данные заносятся следующим образом
ipfw table add ip_адрес_пиринговой_сети клас_к_которому_относиться_пиринговая_сеть
Таблицы клиентов. В них сохраняются данные по клиентам.
^table 9 |Добавляются абоненты у которых нет ограничения по глобальному трафику |
^table 10 | Таблица клиентов для входящего трафика |
^table 11 | Таблица клиентов для исходящего трафика |
^table 12 | Таблица клиентов для входящего пирингового трафика класс 2 |
^table 13 | Таблица клиентов для исходящего пирингового трафика класс 2 |
^table 14 | Таблица клиентов для входящего пирингового трафика класс 3 |
^table 15 | Таблица клиентов для исходящего пирингового трафика класс 3 |
В таблицы заносятся следующие данные
ipfw table 10 add ip_адрес_клиента тарифный_план_клиента
ipfw table 11 add ip_адрес_клиента тарифный_план_клиента
При подключении абонента система автоматически заноси IP адресами в таблицы пользователей и сетей\\
Правила шейпера проверяются и формируются командой \\
# /usr/abills/libexec/billd checkspeed NAS_ID=...
Для поднятий правил шейпирования при старте системы используется программа
# cp /usr/abills/misc/freebsd/shaper_start.sh /usr/local/etc/rc.d/shaper_start.sh
**/etc/rc.conf**
abills_shaper_enable="YES"
abills_nas_id="1"
abills_shaper_if="" # По умолчанию ng
** При установке скорости в аккаунте пользователя если она еще не указывалась другим пользователям нужно переинициализировать шейпер **
Дополнительные параметры:
^NAS_IDS | Номера серверов доступа |
^FW_DIRECTION_OUT | Параметры направления. \\ по умолчанию out xmit _out_interface_ |
^FW_DIRECTION_IN | Параметр направления трафика. \\ по умолчанию in recv _out_interface_ |
По умолчанию **_out_interface_** считается интерфейс шлюза по умолчанию.
для mpd пример направлений
/usr/abills/libexec/billd checkspeed NAS_IDS=1 RECONFIGURE=1 FW_DIRECTION_OUT=out FW_DIRECTION_IN=in; ipfw /etc/fw.conf
====Переинициализация шейпера====
# /usr/local/etc/rc.d/shaper_start.sh restart
====Проверка работоспособности====
**правил перенаправления в Pipe**
# ipfw show
08000 0 0 pipe tablearg ip from table(14) to table(2,2) out xmit ng*
08010 0 0 pipe tablearg ip from table(2,2) to table(15) in recv ng*
09000 0 0 pipe tablearg ip from table(12) to table(2,1) out xmit ng*
09010 0 0 pipe tablearg ip from table(2,1) to table(13) in recv ng*
10000 0 0 pipe tablearg ip from table(10) to any out xmit ng*
10010 0 0 pipe tablearg ip from any to table(11) in recv ng*
10020 0 0 allow ip from table(9) to any out xmit ng*
10025 0 0 allow ip from any to table(9) in recv ng*
**Занесённые адреса в таблицы 10,11 (глобальный шейпер)**
# ipfw table 10 list
10.11.1.1/32 5145
# ipfw table 11 list
10.11.1.1/32 6145
**Поднятые пайпы (правила нарезки скорости)**
# ipfw pipe show 5145 6145
5145: 2.028 Mbit/s 0 ms burst 0
q136217 202 KB 0 flows (1 buckets) sched 70681 weight 0 lmax 0 pri 0 droptail
sched 70681 type FIFO flags 0x1 64 buckets 0 active
mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
06145: 1.024 Mbit/s 0 ms burst 0
q137217 102 KB 0 flows (1 buckets) sched 71681 weight 0 lmax 0 pri 0 droptail
sched 71681 type FIFO flags 0x1 64 buckets 0 active
mask: 0x00 0xffffffff/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
====Оптимизации====
**/etc/sysctl.conf**
net.inet.ip.fastforwarding=1
net.inet.ip.portrange.randomized=0
net.inet.tcp.nolocaltimewait=1
kern.ipc.nmbclusters=65536
kern.ipc.maxsockets=204800
net.inet.ip.dummynet.expire=0
net.inet.ip.dummynet.hash_size=2048
net.inet.ip.fw.dyn_buckets=2048
net.inet.tcp.maxtcptw=40960
kern.ipc.maxsockbuf=8388608
net.graph.recvspace=256000
# TCP bufer size
kern.ipc.maxsockbuf=8388608
net.inet.tcp.recvspace=65535
# incoming TCP queue size
kern.ipc.somaxconn=4096
# incoming packets queue size
net.inet.ip.intr_queue_maxlen=2000
net.inet.flowtable.enable=0
=====Отслеживание проблем======
при подключении абонента должен попасть в 10 и 11 таблицу
ipfw table 10 list | grep [IP клиента]
ipfw table 11 list | grep [IP клиента]
результат
ipfw table 10 list | grep 10.0.0.1
--- table(10), set(0) ---
10.0.0.1/32 5024
Если результат пустой значит не срабатывает linkupdown
5024 - номер Pipe канала для шейпера
ipfw pipe 5024 list
отображение правил шейпера
проверка включен ли редирект траффика на шейпер
ipfw show
10000 0 0 pipe tablearg ip from table(10) to any out xmit ng*
10010 0 0 pipe tablearg ip from any to table(11) in recv ng*
если вторая и третья колонка нули значит трафик не попадает