Простой шейпер

  Иногда возникает необходимость шейпить траффик по определённому порту. В моём случае исходящий 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:

3 Responses to “Простой шейпер”

  1. nuakin says:

    А у меня железка бездисковая с fbsd внутри стоит в виде gw+fw+nat, с вебным интерфейсом, m0n0wall называется. Там все есть без всяких шаблонов. Для SOHO самое то.

  2. deniss says:

    И ты можешь на ней создать шейпер на определённый IP для определённого порта ?
    Или несколько шейперов вложенных друг в друга ?
    Может ingress фильтр под FreeBSD есть ?

  3. nuakin says:

    на определенный ip для определенного порта – да. Насчет нескольких вложенных и ingress – не знаю. Подробнее можно посмотреть на http://m0n0.ch/wall/features.php или http://www.pfsense.com/index.php?id=26

Leave a Reply