DUMMYNET


DUMMYNET (фиктивная сеть) - гибкий администратор (регулировщик) ширины полосы пропускания и эмулятор задержек. dummynet также может использоваться для тестирования сетевых протоколов.

ОПИСАНИЕ
DUMMYNET - это системное средство, которое дает возможность управления сетевым трафиком, проходящим через различные сетевые интерфейсы, путем применения имитации различной ширины полосы пропускания, ограничения размера очереди, имитации задержек и потерь пакетов. В текущей реализации DUMMYNET отбор пакетов выполняется программой ipfw посредством правил "pipe" ipfw. DUMMYNET pipe (канал, труба) характеризуется шириной полосы пропускания, величиной задержек, размером очереди и нормами потерь, которые могут быть установлены в правилах ipfw. Правила pipe ipfw нумеруются от 1 до 65534 (по обычным правилам ipfw) и пакеты могут быть пропущены через множественные каналы (pipes), определяемые конфигурацией ipfw. DUMMYNET оперирует пакетами IP, но если разрешенo bridging, пакеты bridging также передаются.

Использование
Для определения пакетов, пересылаемых по каналам pipe, используется команда

ipfw add pipe NNN …

Конфигурация каналов pipe производится командой

ipfw pipe NNN config bw B delay D queue Q plr P

Здесь ширина полосы B может быть выражена в бит/с (bit/s), кбит/с (Kbit/s), Мбит/с (Mbit/s), байт/с (Bytes/s), кбайт/с (Kbytes/s), Мбайт/с (Mbytes/s); величина задержки (delay) выражается в миллисекундах (ms) размер очереди (Q) - в пакетах или в байтах (Bytes), plr - доля пакетов потерянных случайным образом - выражается десятичной дробью, от 0 до 1 включительно.

Корректная работа правил ipfw не всегда интуитивно понятна, в особенности, если система установлена на мосту или на маршрутизаторе.

При установке в качестве маршрутизатора одни и те же установки применяются и для входящих, и для исходящих пакетов, и при этом наобходимо убедиться, что пакет не проходит один и тот же канал дважды, если только это не сделано специально.

При установке в качестве моста ipfw-фильтр запускается один раз на входном пути для передаваемых пакетов.

Кроме того, когда эмулируются истинные полнодуплексные каналы необходимо направить трафик по двум различным каналам в зависимости от направления. Пример установки такого правила для эмуляции асимметричного двунаправленного соединения приведен ниже:

ipfw add pipe 1 ip from me to WORKSTATION out
ipfw add pipe 2 ip from WORKSTATION to me in
ipfw pipe 1 confug bw 1Mbit/s delay 80ms
ipfw pipe 2 config bw 128Kbit/s delay 300ms
Выполнение
Запись ipfw используется выбора пакетов, которые должны будут подчиняться определенным величинам ширина-полосы/размер-очереди/задержка/величина-потерь, и возвращает идентификатор канала, который описывает эти ограничения.

Выбранные пакеты сначала ставятся в очередь, размер которой ограничен параметром Q, из которой они извлекаются в запрограммированном порядке и передаются в другую очередь, где имитируется задержка. При выходе из второй очереди пакеты повторно вводятся в в стек протокола в той же самой точке, из которой они исходили (ip_input(), ip_otput(), bgp_output() ). В зависимости от установок переменных sysctl net.inet.ip.fw.one_pass пакеты, входящие в канал, могут быть или перенаправлены их адресату, или вновь пропускаются через правила ipfw, начинающиеся после правил соответствия. DUMMYNET исполняет задание один раз по сигналу от таймера. Деталями операции управляет опция ядра OPTION HZ, значение которой по умолчанию (100) задает значение 10мс. Для более точного моделирования высоких скоростей передачи данных может быть необходимо уменьшить время таймера до 1 мс или даже еще меньше. Рассмотрите, однако, некоторые интерфейсы, использующие программный ввод-вывод, которые могут требовать значительное время для вывода пакетов. А непомерное сокращение периодичности интервалов уменьшает частоту и точность операции.

Опции ядра
Следующие опции в файле конфигурации ядра связаны с операциями DUMMYNET:

IPFIREWALL
включить брандмауэр;

IPFIREWALL_VERBOSE
включить брандмауэр на выводе;

IPFIREWALL_VERBOSE_LIMIT
ограничение брандмауэра на выводе;

DUMMYNET
включить DUMMYNET;

MMBCLUSTERS
количество сетевых буферов пакетов;

HZ
установка интервала таймера.


Вообще, требуется выбрать следующее:

options IPFIREWALL

options DUMMYNET

Дополнительно можно при желании увеличить число кластеров mbuf (используемая память для сетевых пакетов) согласно сумме программное задержки и полосы пропускания, величины очереди всех конфигурируемых каналов

Переменные sysctl:
net.inet.ip.fw.one_pass равна 1, если Вы хотите пропустить пакеты через правила firewall только один раз. net.link.ether.bridge_ipfw устанавливается, если Вы хотите пакеты bridge, пропускать через firewall, согласно правилам.

Смотрите также BRIDGE и примеры

Использование dummynet для тестирования сетевых протоколов
dummynet изначально была разработана для тестирования сетевых протоколов и приложений, в том числе и на автономных компьютерах. Для этой цели и моделируются некоторые особенности, такие как эмуляция задержки, случайные пропадания пакетов и т. п.

Cуществует несколько моментов, которые следует учитывать при выполнении этих тестов, чтобы избежать поллучения некорректныъх результатов. Все они являются очевидными, однако помнить о них необходимо.

Выбор наиболее целесообразного размера буфера

Как говорилось ранее, при работе ipfw происходит задержка пакетов. Задержка прямо пропорциональна общему размеру очереди (в байтах) и обратно пропорциональна ширине полосы пропускания bandwidth. При малых bandwidth задержки могут быть очень большими, особенно если размер очереди определяется с точки зрения пакетов, а пакеты большого размера.

По умолчанию размер очереди, как правило, слишком велик для большинства целей и часто желательно определять размер очереди в байтах, а не в пакетах.

Взаимодействие между bridging и многоадресной рассылкой (multicasting)

Вы можете использовать ipfw (и dummynet) в мостах путем установки переменной sysctl

sysctl -w net.link.ether.bridge=1

sysctl -w net.link.ether.bridge_ipfw=1

и затем определить конфигурацию брандмауэра.

Будьте осторожны при проведении эксперимента при вызывающего многоадресный трафик через определенный при помощи dummynet bridge. Если не установить правила верно, то многоадресный трафик в bridge будет проходить через брандмауэр дважды: один раз в процессе движения "вперед" на уровне 2, и один раз, когда пакет пропускают в локальный IP-стек моста. С февраля 2000 г. установка переменной

sysctl -w net.inet.ip.fw.enable=0

помогает избежать вызов брандмауэра на IP-уровне. Другими словами возможно использовать опцию bridged в установках правил применительно к пакетам bridged

Установки TCP по умолчанию

Будьте осторожны, используя TCP, особенно между процессами, выполняющимися на той же самой машине или в той же самой подсети, что и FreeBSD

Обновлено: 12.03.2015