adron2 Posted June 12, 2013 (edited) Есть задача - перед отправкой пакета на определенный ip(а еще лучше с определенного udp порта) задерживать его на 20 мсек. Как в linux это можно реализовать? netem нагуглил но! не нравится он тем что нужно использовать tc filter и нет возможности классифицировать пакеты по порту отправителя. Может есть что то более подходящее. Заранее спасибо всем ответившим. Edited June 12, 2013 by adron2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
srg555 Posted June 12, 2013 adron2 Используйте iptables для раскраски(внутренней маркировки) трафика: http://lartc.org/howto/lartc.qdisc.filters.html : On fwmarkYou can mark packets with either ipchains or iptables and have that mark survive routing across interfaces. This is really useful to for example only shape traffic on eth1 that came in on eth0. Syntax: # tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1 Note that this is not a u32 match! You can place a mark like this: # iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6 The number 6 is arbitrary. If you don't want to understand the full tc filter syntax, just use iptables, and only learn to select on fwmark. You can also have iptables print basic statistics that will help you debug your rules. The following command will show you all the rules that mark packages in the mangle table, also how many packages and bytes have matched. # iptables -L -t mangle -n -v Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Alex/AT Posted June 12, 2013 В tc есть возможность классифицировать пакеты по порту. См. u32. Но вообще лучше воспользоваться iptables, и дальше классифицировать по fwmark. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MMM Posted June 12, 2013 Есть задача - перед отправкой пакета на определенный ip(а еще лучше с определенного udp порта) задерживать его на 20 мсек. Как в linux это можно реализовать? netem нагуглил но! не нравится он тем что нужно использовать tc filter и нет возможности классифицировать пакеты по порту отправителя. Может есть что то более подходящее. Заранее спасибо всем ответившим. Расскажите, а в чем практическая польза? Может кому-то из коллег тоже такое надо... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
srg555 Posted June 12, 2013 MMM Практическая польза - проверка работы различного ПО в условиях задержек(эмуляция "плохого" канала). Ещё netem можно использовать чтобы мешать работать VoIP оператора-конкурента. Тупо задропать 5% трафика это будет палевно, а сделать reorder RTP-трафика - булькание обеспечено, при этом потерь типа нет Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MMM Posted June 12, 2013 Ага, я тоже подумал про voip сразу, но вдруг что-то еще? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Сильвер Posted June 12, 2013 Есть задача - перед отправкой пакета на определенный ip(а еще лучше с определенного udp порта) задерживать его на 20 мсек. Как в linux это можно реализовать? Через ipfw pipe delay можно. Вроде порт для linux существует. Им же и потери эмулировать можно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nuclearcat Posted June 15, 2013 Я делал, netem, там можно и дропы probabilistic делать, и задержки с девиацией. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dmg Posted June 17, 2013 Ага, я тоже подумал про voip сразу, но вдруг что-то еще? Недавно как раз воспользовался netem-ом для улучшения работы с некой железкой. Железка дропает пакеты если они ходят чаще чем пакет в секунду (плата DECT в АТС). Работа через управляющую программу с этой платой было сущее мучение (тормозило из-за постоянных повторов дропнутых пакетов). В итоге более менее удалось это решить с помощью задержки в 1 секунду для пакетов в сторону железки. Да это не устраняло полностью проблему, но в этом случае более менее можно было работать (PIN-код генерировался за 5-10 секунд, а не по минуте). Раньше использовал http://www-x.antd.nist.gov/nistnet/ на новом сервере воспользовался netem. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...