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


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

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

ipfw table add ip_адрес_клиента  тарифный_план_клиента

При подключении абонента система автоматически заноси IP адресами в таблицы пользователей и сетей

Правила шейпера проверяются и формируются командой

# /usr/abills/libexec/billd checkspeed NAS_ID=... 

Для поднятий правил шейпирования при старте системы нужно создать файл /usr/local/etc/rc.d/shaper.sh

#!/bin/sh

# /usr/abills/libexec/billd checkspeed NAS_IDS=... RECONFIGURE=1

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

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

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