Перейти к содержимому
Калькуляторы

Приоритезациция трафика, выделеная полоса. покритикуйте скриптинку

Есть роутер 2 сетевых интерфейса eth0 - инет, eth1 - локал

 

Хочется добиться приоритезации некоторых видов трафика:

 

1. ICMP

2. порт назначения 80

 

и выделение выделенной полосы для этих типов трафика.

 

пока соорудил следующий скриптик, прошу конструктивной критики:

 

tc qdisc del dev eth0 root    2> /dev/null > /dev/null
tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null
tc qdisc add dev eth0 root handle 1: htb default 4
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit quantum 60000

tc class add dev eth0 parent 1:1 classid 1:3 htb rate 200Mbit ceil 700Mbit quantum 60000
tc qdisc add dev eth0 parent 1:3 handle 3 sfq perturb 10

tc class add dev eth0 parent 1:1 classid 1:4 htb rate 100Mbit ceil 150Mbit quantum 60000
tc qdisc add dev eth0 parent 1:4 handle 4 sfq perturb 10

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


tc qdisc del dev eth1 root    2> /dev/null > /dev/null
tc qdisc del dev eth1 ingress 2> /dev/null > /dev/null
tc qdisc add dev eth1 root handle 1: htb default 4
tc class add dev eth1 parent 1: classid 1:1 htb rate 1000Mbit quantum 60000

tc class add dev eth1 parent 1:1 classid 1:3 htb rate 200Mbit ceil 700Mbit quantum 60000
tc qdisc add dev eth1 parent 1:3 handle 3 sfq perturb 10

tc class add dev eth1 parent 1:1 classid 1:4 htb rate 100Mbit ceil 150Mbit quantum 60000
tc qdisc add dev eth1 parent 1:4 handle 4 sfq perturb 10

tc filter add dev eth1 protocol ip parent 1:0 prio 0 u32 match ip sport 80 0xffff flowid 1:3
tc filter add dev eth1 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:3

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В Linux приоритезация на основе поля ToS работает по умолчанию (дисциплина pfifo_fast). Т.е. ICMP, SSH и ряд других протоколов, у которых клиенты и серверы правильно выставляют ToS, будут приоритезироваться автоматом без лишних фильтров. Для более продвинутой приоритезации (с возможностью задать произвольный leaf qdisc) логичнее использовать дисциплину prio. В дополнение к этому можно написать фильтры для других типов трафика, у которых не всегда корректно выставлен ToS.

 

tc qdisc add dev $ext_if root handle 1: prio
# high priority (interactive)
tc qdisc add dev $ext_if parent 1:1 handle 10: sfq
# low-latency
tc qdisc add dev $ext_if parent 1:2 handle 20: tbf rate 100mibit burst 100kb latency 50ms minburst 1500
# bulk
tc qdisc add dev $ext_if parent 1:3 handle 30: sfq

tc filter add dev $ext_if parent 1:0 protocol ip pref 1 u32 match ip dport 80 0xffff flowid 1:1

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не совсем понял в чем разница между

tc qdisc add dev $ext_if parent 1:1 handle 10: sfq

и

# bulk
tc qdisc add dev $ext_if parent 1:3 handle 30: sfq

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В Linux приоритезация на основе поля ToS работает по умолчанию (дисциплина pfifo_fast). Т.е. ICMP, SSH и ряд других протоколов, у которых клиенты и серверы правильно выставляют ToS, будут приоритезироваться автоматом без лишних фильтров. Для более продвинутой приоритезации (с возможностью задать произвольный leaf qdisc) логичнее использовать дисциплину prio. В дополнение к этому можно написать фильтры для других типов трафика, у которых не всегда корректно выставлен ToS.

 

tc qdisc add dev $ext_if root handle 1: prio
# high priority (interactive)
tc qdisc add dev $ext_if parent 1:1 handle 10: sfq
# low-latency
tc qdisc add dev $ext_if parent 1:2 handle 20: tbf rate 100mibit burst 100kb latency 50ms minburst 1500
# bulk
tc qdisc add dev $ext_if parent 1:3 handle 30: sfq

tc filter add dev $ext_if parent 1:0 protocol ip pref 1 u32 match ip dport 80 0xffff flowid 1:1

Можно ли добиться приоритезации нужного исходящего трафика сделав так ?

tc qdisc add dev $ext_if root handle 1: prio
tc qdisc add dev $ext_if parent 1:1 handle 10: sfq
tc filter add dev $ext_if parent 1:0 protocol ip pref 1 u32 match ip dport 80 0xffff flowid 1:1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. Я приводил пример похожий на http://lartc.org/howto/lartc.qdisc.classful.html#AEN903

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. Я приводил пример похожий на http://lartc.org/howto/lartc.qdisc.classful.html#AEN903

Спасибо за помошь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. Я приводил пример похожий на http://lartc.org/howto/lartc.qdisc.classful.html#AEN903

Спасибо за помошь.

Окончательным вариантом не поделитесь?

И еще несколько вопросов:

1. полная "ширина" аплинка у вас какая?

2. сколько Мбит выделено для каждого типа трафика?

3. не нашел, где описан "остаток" полосы (для остального трафика)

4. полосы выделены фиксированно, или есть ли "заем" свободной полосы (например, отдать часть свободной http, или icmp полосы под другой трафик)?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В случае приоритезации всем типам трафика предоставляется одинаковая полоса пропускания, меняется только порядок отправки пакетов. Смешанные схемы (шейпинг + приоритезация) нужно делать с помощью дисциплины htb или hfsc. Для домашнего использования, когда пакетрейты малы, достаточно prio.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В случае приоритезации всем типам трафика предоставляется одинаковая полоса пропускания, меняется только порядок отправки пакетов. Смешанные схемы (шейпинг + приоритезация) нужно делать с помощью дисциплины htb или hfsc. Для домашнего использования, когда пакетрейты малы, достаточно prio.
Шейпинг не нужен, основная задача - обеспечить максимальный приоритет http, ping в меньшей степени. Одновременно еще хотелось бы отдельно обеспечить максимально низкий приоритет p2p (торренту). Т.е. вот такую "иерархию":

 

http

|

icmp

|

все_остальное_кроме_p2p

|

p2p

 

Данный "приоритезатор" нужен для работы на аплинке с макс. полосой около 200 Мбит.

Предлагаемый _INF_ вариант подойдет для такой задачи? Если "да", то что надо добавить для p2p?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Достаточно настроить дисциплину prio, как показано по ссылке. Тогда трафик правильно написанных приложений (icmp, интерактивный ssh-трафик, scp) будут назначаться тем или иным очередям по полю ToS, а для http и всего остального нужно дописать фильтры. Если классов обслуживания нужно более трех, придется дополнительно настраивать priomap, как написано в man tc-prio.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.