LINUX.ORG.RU

Эмуляция медленной сети с большим пингом, потерями...


7

3

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

Для начала проверил большой пинг, потери пакетов, джиттер, внеочередность прихода, битые пакеты. А вот с лимитом скорости затык.

Что я попробовал:

#!/bin/bash

echo "emulation of slow network"
sudo echo

sudo tc qdisc del dev eth0 root
sudo tc qdisc add dev eth0 root handle 1: htb default 12
sudo tc class add dev eth0 parent 1:1 classid 1:12 htb rate 70kbps ceil 2kbps
sudo tc qdisc add dev eth0 parent 1:12 netem delay 200ms

Тестирование показывает, что upload в самом деле стал черепашинским, еле 60 кбит/с выдает. Из-за медленного аплоада и download тоже стал медленным хотя всё еще это сотни килобит а не десятки мегабит, но это лишь следствие, мы не можем заставить другую сторону (которую тестируем) слать медленнее...

Сценарий такой: на столе лежит железка. На компе запущен сервер. Нужно чтобы до этого сервера на компьютере скорость от железки была очень низкой и нестабильной.

Как это сделать? Чтобы не только исходящая скорость была низка, но и входящая?

Подозреваю что через мосты, но конкретно как - пока не понимаю. У кого-нибудь есть опыт применения?

Помню, ещё в универе эмулировали подобное с помощью ns, но тебе это не подходит, да? Нужно обязательно реальное железо ограничить?

sT331h0rs3 ★★★★★
()

Можно и без моста. На прием можно сделать тоже самое через ifb.

Погугли как шейпить входящий трафик через ifb

А про железячное решение (до 100Мбит) - любой ноут со второй сетевухой. Делаем мост и на физические порты моста вешаем дисциплины.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Спасибо, загуглил и вижу пишут про ifb, попробую через него, проверю - выложу свой скрипт :)

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от vel

sT331h0rs3

Нашел решение тут: http://kakaroto.homelinux.net/2011/09/network-emulator-tool-for-linux/

Смотрите какая жэсть:

#!/bin/bash

echo "emulation of slow network"
sudo echo

echo "START"
sudo modprobe ifb
sudo ip link set dev ifb0 up
sudo tc qdisc del dev eth0 ingress
sudo tc qdisc add dev eth0 ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
sudo tc qdisc del dev ifb0 root
sudo tc qdisc add dev ifb0 root handle 1: prio bands 10
sudo tc qdisc del dev eth0 root
sudo tc qdisc add dev eth0 root handle 1: prio bands 10
sudo tc qdisc add dev ifb0 parent 1:1 handle 10: htb default 1
sudo tc class add dev ifb0 parent 10: classid 0:1 htb rate 128kbit ceil 128kbit burst 0 cburst 0
sudo tc qdisc add dev eth0 parent 1:1 handle 10: htb default 1
sudo tc class add dev eth0 parent 10: classid 0:1 htb rate 128kbit ceil 128kbit burst 0 cburst 0
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 match ip dst 0.0.0.0/0 flowid 10:1
sudo tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 match ip dst 0.0.0.0/0 flowid 10:1
echo "END"

Ни за что бы в жизни не разобрался с написанием таких правил самостоятельно...

ЗЫ РАБОТАЕТ :) реально и туда и сюда 128 кбит/с, тестировал тут: http://www.speedtest.net/

А остальные правила типа задержек написать очень просто по имеющимся в инете руководствам, например: https://calomel.org/network_loss_emulation.html

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

С задержками и потерями:

#!/bin/bash

echo "emulation of slow network"
sudo echo

echo "START"
sudo modprobe ifb
sudo ip link set dev ifb0 up
sudo tc qdisc del dev eth0 ingress
sudo tc qdisc add dev eth0 ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
sudo tc qdisc del dev ifb0 root
sudo tc qdisc add dev ifb0 root handle 1: prio bands 10
sudo tc qdisc del dev eth0 root
sudo tc qdisc add dev eth0 root handle 1: prio bands 10
sudo tc qdisc add dev ifb0 parent 1:1 handle 10: htb default 1
sudo tc class add dev ifb0 parent 10: classid 0:1 htb rate 128kbit ceil 128kbit burst 0 cburst 0
sudo tc qdisc add dev ifb0 parent 10:1 handle 11: netem delay 200ms 40ms 25% loss 15.3% 25% duplicate 1% corrupt 0.1% reorder 5% 50%
sudo tc qdisc add dev eth0 parent 1:1 handle 10: htb default 1
sudo tc class add dev eth0 parent 10: classid 0:1 htb rate 128kbit ceil 128kbit burst 0 cburst 0
sudo tc qdisc add dev eth0 parent 10:1 handle 11: netem delay 200ms 40ms 25% loss 15.3% 25% duplicate 1% corrupt 0.1% reorder 5% 50%
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 match ip dst 0.0.0.0/0 flowid 10:1
sudo tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 0.0.0.0/0 match ip dst 0.0.0.0/0 flowid 10:1
echo "END"
I-Love-Microsoft ★★★★★
() автор топика

Есть такая программа от NIST. Забыл как называется. Последний раз использовал её лет 10 назад.

ii
()
12 июля 2014 г.
Ответ на: комментарий от Gonzo

я уже забыл, но это всего пара команд сброса в дефолт, удаление всего...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

sudo ...
sudo ...
sudo ...
...

retardation is strong with this one

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.