Эмуляция плохого интернета

Кричащая девушка (у нее тупит интернет)Все мы иногда сталкиваемся с плохой работой сети: пакеты пропадают, пинги не проходят и т.п. Если вы разрабатываете программу, работа которой связана с интернетом, то вам обязательно нужно протестировать ее поведение в условиях плохой связи. Но, как назло, когда нам нужен “плохой” интернет, его под рукой как раз и не оказывается. Ничто не мешает нам создать его самим, будем эмулировать плохой интернет. Для этого мы воспользуемся модулем statistic программного файрволла iptables.

Прежде всего, скажу, что я поднимал сервер “плохого интернета” на виртуальной машине с дистрибутивом Ubuntu 11.04 Server. На отдельной виртуалке – чтобы не ломать ничего на рабочем файрволле конторы.
Я добавил две виртуальные сетевые карты с типом подключения “Сетевой мост” на одну и ту же физическую сетевую карту. Виртуальные сетевые интерфейсы я настроил следующим образом:

# ifconfig eth0 inet 192.168.0.55 netmask 255.255.255.0
# ifconfig eth1 inet 192.168.10.1 netmask 255.255.255.0

Здесь у нас eth0 – это внутренний обычный интерфейс, а eth1 – наша новая сеть с “плохим” интернетом.

Для установки модуля statistic командуем следующее:

# apt-get install xtables-addons-common

Настраиваем правила файрволла примерно следующим образом, файл /etc/iptables.rules:

*nat
:РOSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

*filter
:FORWARD DROP [0:0]
-A FORWARD -s 192.168.10.0/24 -m statistic --mode random --probability 0.10 -j DROP
-A FORWARD -s 192.168.10.0/24 -i eth1 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
COMMIT

Думаю, объяснения тут стоит лишь одна строчка, а именно первое правило цепочки FORWARD. В ней мы указываем. что пакет, направленный из внутренней сети на другой хост, должен быть отброшен (DROP) с вероятностью 0,10 (т.е. примерно каждый десятый). Применим правила файрволла:

# iptables-restore < /etc/iptables.rules

И посмотрим, что у нас получилось:

# ping -f 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
........................................^C
--- 8.8.8.8 ping statistics ---
352 packets transmitted, 312 received, 11% packet loss, time 5104ms
rtt min/avg/max/mdev = 85.307/92.663/125.318/10.942 ms, pipe 10, ipg/ewma 14.542/92.176 ms

Ура! Работает!

Похожие статьи

Leave a Reply

Your email address will not be published. Required fields are marked *