Назад | Перейти на главную страницу

Dummynet Filtering не работает на FreeBSD 10

Я пытаюсь выполнить эмуляцию сети с помощью dummynet в FreeBSD 10. У меня это работает в 9.3, но все должно быть изменилось, и я не могу точно определить, что, но мои настройки больше не работают. У меня довольно простая конфигурация:

**/boot/loader.conf**
dummynet_load="YES"
if_bridge_load="YES"
ipfw_load="YES"
kern.hz=10000

**/etc/sysctl.conf**
net.link.bridge.ipfw=1
net.inet.ip.fw.one_pass=1
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet.ip.dummynet.io_fast=1
net.inet.ip.dummynet.pipe_byte_limit=16777216

**/etc/rc.conf**
cloned_interfaces="bridge0"
ifconfig_bridge0="addm em0 addm em1 up"
ifconfig_em0="up"
ifconfig_em1="up"

В моем скрипте брандмауэра есть:

ipfw pipe 111 config bw 1Mbit/s delay 10ms plr .01 queue 1000KB
ipfw add pipe 111 log all from 10.25.0.129 to 10.25.0.11

Когда я провожу тест ping с 10.25.0.129 по 10.25.0.11, он всегда проходит успешно, однако попадания брандмауэра выглядят так:

root@dummynet:/etc/dummynet # ipfw -a list
00100   0     0 pipe 111 log ip from 10.25.0.129 to 10.25.0.11
65535  77 15511 deny ip from any to any

Если я выключу машину BSD, эхо-запросы перестают работать, поэтому я знаю, что по какой-то причине BSD определенно передает эхо-запросы, но правило не срабатывает, как это было в FreeBSD9.3.

Это все из-за net.inet.ip.dummynet.io_fast=1. Эта переменная включает быструю обработку пакетов: пока полоса пропускания не исчерпана, все пакеты пересылаются напрямую через мост. Shaper полностью игнорируется - пакеты в DUMMYNET не учитываются.

Такое поведение предназначено специально для сильно загруженных шлюзов для разгрузки ЦП за счет нерелевантной статистики.

Попробуйте выключить его и убедитесь, что количество пакетов рассчитано по оценкам.