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


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 Таблица клиентов для входящего пирингового трафика
table 13 Таблица клиентов для исходящего пирингового трафика

В таблицы заносятся следующие данные

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 any out xmit le0
08010       0         0 pipe tablearg ip from any to table(15) in recv le0
09000       0         0 pipe tablearg ip from table(12) to any out xmit le0
09010       0         0 pipe tablearg ip from any to table(13) in recv le0
10000       0         0 pipe tablearg ip from table(10) to any out xmit le0
10010       0         0 pipe tablearg ip from any to table(11) in recv le0
10020       0         0 allow ip from table(9) to any out xmit le0
10025       0         0 allow ip from any to table(9) in recv le0

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

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

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

/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