Иногда возникает необходимость шейпить траффик по определённому порту. В моём случае исходящий SMTP траффик убивал DSL линк когда кто-нибудь посылал видео ролик на 7 мегов 3-10 адресатам. С помощью пакета iproute2 в linux можно творить маленькие чудеса :)
- Устанавливаем очередь CBQ на интерфейс:
tc qdisc add dev eth1 root handle 1: cbq avpkt 1000 bandwidth 100mbit
- Создаём класс на 256kbit:
tc class add dev eth1 parent 1: classid 1:1 cbq rate 256kbit allot 1500 prio 5 bounded isolated
-
Загняем траффик по шаблону ip dport 25 0xffff через фильтр u32:
tc filter add dev eth1 parent 1: protocol ip prio 16 u32 match ip dport 25 0xffff flowid 1:1
В результате исходящий траффик на 25 порт не превышает 260kbit/s в любой ситуации.
Больше здесь:
Rate limiting a single host or netmask
The u32 classifier
Tags: linux
А у меня железка бездисковая с fbsd внутри стоит в виде gw+fw+nat, с вебным интерфейсом, m0n0wall называется. Там все есть без всяких шаблонов. Для SOHO самое то.
И ты можешь на ней создать шейпер на определённый IP для определённого порта ?
Или несколько шейперов вложенных друг в друга ?
Может ingress фильтр под FreeBSD есть ?
на определенный ip для определенного порта – да. Насчет нескольких вложенных и ingress – не знаю. Подробнее можно посмотреть на http://m0n0.ch/wall/features.php или http://www.pfsense.com/index.php?id=26