Child pages
  • FreeBSD Dummynet/table шейпер

Skip to end of metadata
Go to start of metadata

Данная схема шейпера работает следующим образом.
При старте системы инициализируются правила обрезки скорости для каждого тарифного плана, два правила на каждый класс трафика. При подключении абонента его IP вносится в 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*

если вторая и третья колонка - нули, значит трафик не попадает.

  • No labels