IPFW prob, эмулируем плохой канал во FreeBSD

Чем мне нравится FreeBSD, так это тем, что почти под любую задачу в ней есть фитча позволяющая решить эту самую задачу.

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

Команда prob для такого очень хорошо подходит, вроде и скорость не понизили, вроде и не отключили, вроде и работать можно, но тяжело, ох как тяжело. Линию чинить надо, но только после уплаты долгов.

Итак, а реализуется это так:

Первым делом создаем pipe, которые будут ограничивать скорость. К примеру 4 штуки:

ipfw pipe 10930 config bw 1kbit/s

ipfw pipe 10931 config bw 6Kbit/s

ipfw pipe 10932 config bw 64Kbit/s

ipfw pipe 10933 config bw 256Kbit/s

Через эти пайпы будет проходить трафик, а через какую именно пойдет конкретный пакет, будет определяться случайным образом, с помощью prob.

А на практике это будет так:

ipfw add 10930 prob 0.3 pipe 10930 ip from 89.252.34.107 to any out xmit em0

ipfw add 10931 prob 0.3 pipe 10931 ip from 89.252.34.107 to any out xmit em0

ipfw add 10932 prob 0.2 pipe 10932 ip from 89.252.34.107 to any out xmit em0

ipfw add 10933 prob 0.2 pipe 10933 ip from 89.252.34.107 to any out xmit em0

Выше приведенная конструкция определяет, что с вероятностью 30 процентов пакет пройдет через пайп в 1 кбит, 30 процентов в пайп 6 килобит и на остальные 2 по 20 процентов.

То есть мы получаем плавающий пинг, пакеты будут иметь разную задержку и работа будет напоминать плохой канал с большим числом ретрансмитов

http://www.hilik.org.ua/ipfw-prob-эмулируем-плохой-канал/

Обновлено: 12.03.2015