# Помогите разобраться с iproute

## klop

Есть сеть с маршрутизатором. На маршрутизаторе стоит iptables, который никого не пускает с наружи и все разрешает из локальной сети. С интернетом канал на 128Кб/с. Есть задачи (банк-клиенты), для которых хотелось бы выделить полосу в 32 Кб/с при их обращении к удаленному серверу. Т.е., когда все читают почту и смотрят новости в интернете все хорошо, но когда кто-то начинает качать с интернета банки просто тупо виснут (некоторые). В принципе решение задачи я так понял можно организовать с помщью iproute, документацию я почитал и сегодня вечером еще почитаю, но если это возможно хочется увидить пример решения данно задачи от человека, который в это разбирается (примера будет вполне достаточно для того чтобы разобраться что и как работает в данном случае). Теперь, как я вижу эту схему. Ставится приоритет на два компьютера (те с которых работают банк-клиенты), но на определенные сервисы и на определенные адреса удаленных серверов, т.к. есть банки стационарные, которые работают по фтп с разными портами и онлайн клинты, которые работаю из браузера. Общее правило для всех машин в сети на 1 месте (после банк-клиентов) почта, icq, http трафик, а потом все остальное. Вот если бы кто-то смог привести пример создания класов, фильтров ( желательно детально) был бы ему крайне благодарен. Документации по iproute буду так же рад.

----------

## sa10

На gentoo-wiki есть нужная дока

русская на opennet с примерами скриптов, неплохой документ кажется на русском есть и на shorewall.net

----------

## smk

Вроде iptables имеют и квоты и приоритетные очереди. Вроде видел что то подобное на linuxportal.ru .

----------

## klop

Хм, насчет iptables не уверен. А вот ссылки sa10 пригодились. Толком почитать еще не успел, но некоторая информация (не связанная с iproute) пригодилась. Спасибо за помощь, но вопросы чую еще будут.  :Smile: 

----------

## smk

Ipatables имеет очень большие возможности. В том числе и лимитировать скорость. Вот конкрентый пример. Ниже пример по созданию правил по мак-адресам. http://www.opennet.ru/docs/RUS/iptables/#TABLE.LIMITMATCH

----------

## sa10

 *Quote:*   

> ipatables имеет очень большие возможности. В том числе и лимитировать скорость. Вот конкрентый пример. Ниже пример по созданию правил по мак-адресам. http://www.opennet.ru/docs/RUS/iptables/#TABLE.LIMITMATCH

 

Там скорость ограничивается количеством пакетов в единицу времени.

К сожалению юзеры быстро учаться менять размер пакетов и такие лимиты вряд ли  жизнеспособны .....

Достаточно просто и эфективно задача решается настройкой пулов задержки на squid, но это частичное решение

Продуктивнее вермя потратить на изучение iproute2 и дисциплин управления очередью, там все очень круто...

----------

## klop

По поводу лимитов хотел написать что-то похожее на пост sa10. Лимиты у меня и так работаю, но они общие на всю сеть на вход, выход и форвардинг. То что я прочитал про iproute мне очень понравилось - полность удовлетворяет мои потребности. Но, все нет времени заняться ей пплотную (хотя завтра суббота и будет время на практику).

----------

## klop

Уф, познакомился я с iproute2 - честно говоря очень доволен, но хочу посоветоваться с людьми, которые лучше меня разбираются в маршрутизации. Такс вот вводные данные скорость канала 64/64. Как я писал выше мне требовалась ускорить работу банк-клиентов, вот что я наваял после прочтения документации.

tc qdisc add dev eth0 root handle 1: htb default 30

  tc class add dev eth0 parent 1: classid 1:1 htb rate 54kbit ceil 54kbit burst 512

  tc class add dev etho parent 1:1 classid 1:10 htb rate 32kbit ceil 54kbit

  tc class add dev etho parent 1:1 classid 1:20 htb rate 15kbit ceil 54kbit

  tc class add dev etho parent 1:1 classid 1:30 htb rate 7kbit ceil 54kbit

  tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10  

  tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10

  tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 53 0xffff flowid 1:10

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 21 0xffff flowid 1:10

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 113 0xffff flowid 1:20

#Банки 

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst xxx.xxx.xxx.xxx match ip dport xxx 0xffff flowid 1:10

......................

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:20

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 8080 0xffff flowid 1:20

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 443 0xffff flowid 1:20

 (хотя можно и забить)

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:30

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 110 0xffff flowid 1:30

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 995 0xffff flowid 1:30

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 465 0xffff flowid 1:20

  tc filter  add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 5190 0xffff flowid 1:20

Попрошу критики (аргументированной) - я все первый раз делал потому ошибки тут определенно есть. Меня интересует:

1. Насколько я прав с буфером интерфейса (хотя я понял его нуно проверять на практике - правда не знаю как).

2. Насколько я прав в скорости интерфейса ( я прочитал, что полезно срезать скорость на 25 процентов (хотя в примерах все резали не более чем на 14 процентов))

3. Насколько я прав раздаче трафика между службами.

4. Это все был исходящий трафик, а теперь меня интересует входящий, его тоже можно контролировать, как я понял (ingress), но только я не понял точно также: как и в случае egress или что-то меняется - напишите пожалуйста пример. Я человек тугой читаю все понятно, а когда мне надо писать нужно хоть мелкий пример и на его основе я уже напишу все что мне надо  :Smile: 

Заранее всем благодарен, кто найдет в себе силы и желание помочь.

----------

## klop

Да вот еще, что хотелось бы узнать, как замерить скорость канала в сторону инета и в обратную сторону.

----------

## smk

Может не стоит заниматься мазохизмом? Ведь есть уже готовые решения, насколько рабочие не знаю, но вроде гемороя намного меньше... 

Вот хотя бы http://www.opennet.ru/base/net/rshaper.txt.html

----------

## klop

А в чем тут собственно сложность, мне например интересно - одно пока не радует (сейчас напишу, то что я спросил в ирке и никто ничего не ответил, впрочем, как и везде где я спрашивал):

/* вот я бы с большим удовольствием пообщался с человеком, который знает, как работает утилита tc и может мне объяснить в чем прикол от этих очередей, если мы не можем контролировать входящий трафик, так же, как и исходящий (имеется ввиду обычный компьютер, где весь трафик это входящий, а иходящего крохи).так как ingress бесклассовая дисциплина.*/ 

Вот то что я выше привер поидее можно смело было бы перекинуть на входящуюю дисциплину и толку было бы реально больше.

 И еще никогда не поверю, что тут нет людей, которые не могли бы просветить немного по этому вопросу.

----------

## fank

```
 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 53 0xffff flowid 1:10

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 21 0xffff flowid 1:10

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 113 0xffff flowid 1:20

#Банки

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst xxx.xxx.xxx.xxx match ip dport xxx 0xffff flowid 1:10 
```

здесь я бы запихнул ftp в самый низкоприоритетный клас и дал ему pfifo limit 100

 *Quote:*   

>  tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 5190 0xffff flowid 1:20 

 

это интерактивный трафик, лучше имхо его пихнуть в класс 10

 *Quote:*   

> tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 443 0xffff flowid 1:20 
> 
> tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 465 0xffff flowid 1:20 

 

здесь я полагаю, можно оставить как есть, но можно тогда добавить правило

# TCP ACK пакеты

tc filter add dev eth0 parent 1:0 protocol ip  prio 0 u32 \

   match ip protocol 6 0xff \

   match u8 0x05 0x0f at 0 \

   match u16 0x0000 0xffc0 at 2 \

   match u8 0x10 0xff at 33 flowid 1:10

это правило широко гуляет по инету =)

 *Quote:*   

> tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 995 0xffff flowid 1:30

 

на самом деле, насколько я понимаю, почтовики отправляют письма по очереди и sfq тут не поможет никак, значит, надо поставить pfifo

и еще, наверное, стоит поставить класс повыше

хотя вопрос отнюдь не праздный: можно ли пихать трафик с разными дисциплинами в один класс?

----------

## fank

слушай, а почему у тебя приоритет везде одинаковый?

----------

