Это старая версия документа.


FreeBSD Dummynet/table шейпер

Опции ядра

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/ipfw/shaper_start.sh shaper_start.sh

/etc/rc.conf

abills_shaper_enable="YES"
abills_nas_id="1"
abills_shaper_if=""  # По умолчанию ng

Пример правил перенаправления в Pipe

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*

При установке скорости в аккаунте пользователя если она еще не указывалась другим пользователям нужно переинициализировать шейпер

Дополнительные параметры:

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

Оптимизации

/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