Это старая версия документа.
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 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