LINUX.ORG.RU
решено ФорумAdmin

Нужны рекомендации по управлению полосой пропускания

 , ,


0

2

Имеется сервер, который сопрягает внешнюю и локальную сеть, выполняя следующие задачи 1. форвардинг ип-телефонии с внутреннего сервера телефонии 2. сайт и личный кабинет 3. почта 4. прокси 5. днс 6. форвардинг служебного трафика

Все это необходимо уложить в канал 4мбита. Попробовал проксей-сквидом полосу ограничивать - но получается не надежно и не эффективно. Изучил букварь и из примеров написал такой скрипт, который еще не проверял, т.к. побаиваюсь на рабочей системе экспериментировать.

#!/bin/bash

tc qdisc del dev eth1 root

tc qdisc add dev eth1 root handle 1: htb default 20

tc class add dev eth1 parent 1: classid 1:1 htb rate 4mbit

tc class add dev eth1 parent 1:1 classid 1:10 htb rate 1mbit ceil 2mbit prio 10
tc class add dev eth1 parent 1:1 classid 1:20 htb rate 2mbit ceil 4mbit prio 20

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

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

Собственно самое важное это «оградить» трафик ип телефонии от всего остального, но и по остальному не понятно - стоит ли что то дополнительно выделять или достаточно такого варианта, не будут ли большие закачки забивать интерактивный трафик или как это исключить считая, что закачки идут либо через ssh, либо squid, либо форвардинг служебного трафика из локальной сети, хотя и почта ведь может давать большими письмами нагрузку.

★★★

dport 5060

sip я так понимаю? кстати, это нужно уточнить ;)
так вот, sip, это не только spd (5060), но и rtp в диапазоне, к примеру, udp от 16000 до 32000 (нужно уточнять в мануле к используемой ip pbx)

fr_butch
()
Ответ на: комментарий от fr_butch

да, sip транк через нат уходит с внутреннего сервера телефония asterisk по старому маршруту в iptables вроде такие диапазоны портов на udp не открыты

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

хотя да получается если астериск открывает эти порты, они могут не попадать в фильтр...

wolverin ★★★
() автор топика
Ответ на: комментарий от fr_butch

to fr_butch

подампил на сервере телефонии, действительно выяснилось что основной трафик идет на порты указанные в rtp.conf астериска )) по дефолту это 10000:20000

поправил форвардинг в иптаблесах ...

но еще сам по себе фильтр не верен, заменил на

tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dport 5060 0xffff flowid 1:10 
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip sport 5060 0xffff flowid 1:10 

а как тогда в tc указать диапазон портов?

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

а как тогда в tc указать диапазон портов?
5060 0xffff

Насчет дипазона хз, но это вроде порт с «маской», делаешь 8192 (14ый бит = 1) с маской 0хd000 (3 певых бита = 1) и получаешь диапазон портов 8192 - 16383

swelf
()
Ответ на: комментарий от swelf

to swelf
да, по маске, пока вроде догоняю суть
1. берем порт пакета
2. побитно умножаем с маской
3. сравниваем с указаным port в фильтре.

т.е. получается для диапазона 8192 - 16383 необходима маска 0хE000.
0010000000000000 = 8192
0011111111111111 = 16383
1110000000000000 = маска

условия для диапазона
1. E = S + R - 1
2. S / R = целое
3. R = 2^N

теперь надо подумать как же подогнать это под нужные цифры ))

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

Буду исходить из принципа что 1024 порта для RTP протокола для ip телефонии должно быть более чем достаточно, а порты должны быть за 10000 диапазоном.
Итак
R = 1024
S = 1024 * 10 = 10240
E = 10240 + 1024 - 1 = 11263

0010 1000 0000 0000 = 10240
0010 1011 1111 1111 = 11263
1111 1100 000 0000 = 0x7E00

поправьте меня если ошибся, пжалста?

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

астериск маркирует rtp-пакеты. исходя из этого, ловятся они такими правилами

$TC filter add dev $DEV_IN parent 1: prio 20 protocol ip u32 match ip protocol 17 0xff match ip tos 0x68 0xff flowid 1:20
$TC filter add dev $DEV_IN parent 1: prio 20 protocol ip u32 match ip protocol 17 0xff match ip tos 0xb8 0xff flowid 1:20

з.ы.: http://www.voip-info.org/wiki/view/QoS with Linux using PRIO and HTB

cac2s
()
Ответ на: комментарий от cac2s

to cac2s
а другие приложения так же не маркируют?
уж что то не хочется связываться с этими маркерами, которые может менять кто угодно - порты конкретно проброшены на нужный ип.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

а другие приложения так же не маркируют?

этот вопрос точно не ко мне =)

можете подкрутить под себя в sip.conf:

tos_sip=cs3 ; Sets TOS for SIP packets.
tos_audio=ef ; Sets TOS for RTP audio packets.
tos_video=af41 ; Sets TOS for RTP video packets.
но я бы, всё-таки, добавил в фильтры проверку на соответствие src/dst ip-адресу машины с астериском (если он, конечно, крутится на отдельной машине)

cac2s
()
Ответ на: комментарий от cac2s

to cac2s
не, мне кажется если уж нужно маркировать, то это проще сделать на шлюзе в иптаблесах НАТа и не привязываться к битам tos.
почему не хочу привязки к ипу? Потому что ип завтра у провайдера сменится и придется вспоминать, что не только в таблесах прописал, но и еще где то.
Астериск крутится на отдельной машине, но весь трафик с локальной сети идет через север-шлюз, который выполняет кучу задач.
Поэтому вопрос еще - кроме телефонии стоит ли еще разделять на очереди и по каким условиям:
2. сайт и личный кабинет
3. почта
4. прокси
5. днс
6. форвардинг служебного трафика

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

зачем тебе маркировть iptables'ом, если уже есть TOS, который в данном случае и используется для выявления rtp-трафика?

cac2s
()
Ответ на: комментарий от cac2s

да я как бы вообще не хочу маркировать и привязываться к битам состояния, потому что нет уверенности, что эти метки не ставит кто то другой.
тем более что эти биты еще и указаны в конфе, который не известно - будет меняться или нет.
а порты указаны в таблесах, эти же порты указаны в фильтре дисциплины, кажется это вполне надежно.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

1. tos — это далеко не биты состояния
2. пакетные менеджеры при обновлениях спрашивают тебя о том что делать с новым конфигом и делают бэкапы
3. проты, большие 1024 — далеко не панацея

в общем, решать тебе: сделать тяп-ляп или как положено

з.ы.: и не нужно так пароноить по поводу другого, ставящего такие же метки.

cac2s
()
Ответ на: комментарий от cac2s

ок.
1. ТОС - тип обслуживания пакетов, могу ли я ставить любой какой захочу? могу хоть в чем угодно, хоть какие угодно. В букваре по tc шейпингу написано не дословно - выполнение проверки для tos приложением которое «правильно выставляет tos», соответственно даже гуру сомневаются опираться на эти тос.
2. все это хорошо, пока не накапливается куча конфигов, за которые уже не помнишь
3. в чем не панацея? в чем тяп ляп по портам и почему это не как положено?

зы. завтра провайдер станет править эти биты на свое усмотрение - где искать косяки потом?

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

Вот дословные слова из букваря на русском - Теперь выполним передачу достаточно большого объема данных неким инструментом, который корректным образом устанавливает флаги TOS и проверим еще раз.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

а по sip.conf я еще добавлю - стоит Free PBX, которая сама правит все эти конфиги и лазить туда в ручную, чтобы потом после разных апдейтов вспоминать что же там было вообще нет никакого желания.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

у тебя этот инструмент установлен на хосте с астериском?

думаю, что нет, поэтому добавляй в фильтр шейпера проверку на ip, и не морочь ни себе, ни другим голову.

ложить пакеты в высокоприоритетный класс на основании того, что sport/dport лежит в диапазоне 10000-20000 — бред сивой кобылы. почему? почитай свой «букварь на русском» про порты, открываемые подключениями со стороны клиентов (в т.ч. и торрент-клиентами)

cac2s
()
Ответ на: комментарий от wolverin

а по sip.conf я еще добавлю - стоит Free PBX, которая сама правит все эти конфиги и лазить туда в ручную, чтобы потом после разных апдейтов вспоминать что же там было вообще нет никакого желания.

sip_general_custom.conf This is the proper location for placing any of the [general] context option lines that you might need to add to your setup. This is also the place to add those lines needed to enable the nat'ing of SIP when you go through a firewall.

но в этом нет необходимости, если добавишь в фильтр шейпера проверку на src/dst.

cac2s
()
Ответ на: комментарий от cac2s

почитай свой «букварь на русском» про порты, открываемые подключениями со стороны клиентов (в т.ч. и торрент-клиентами)

открыты порты в иптаблесах на конкретно внешний ип, подскажите пожалуйста как торенты смогут их использовать?

FreePBX стоит вместе с Asterisk-ом, хотя это роли не играет где он стоит, т.к. правит конфиги все равно он. Уже позже вчера подумал - можно из гуи этого дополнительные опции в sip.conf задавать.

wolverin ★★★
() автор топика
Ответ на: комментарий от cac2s

у тебя этот инструмент установлен на хосте с астериском?

если это вопрос про мой пример о tos - нет, он там не стоит. повторюсь - ВЕСЬ трафик идет через сервер шлюз где стоит фаервол и шейпер - содержание трафика мне не известно.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

открыты порты в иптаблесах на конкретно внешний ип, подскажите пожалуйста как торенты смогут их использовать?

какие порты, кому открыты и на какой ип?

cac2s
()
Ответ на: комментарий от cac2s

to cac2s
Вы были правы - по тестировал - с такими битами тос другого трафика через проксю кроме как телефония не идет, привязка по портам не дает такого точного отделения ВоИП трафика, приходится привязываться к ипам, что не хотелось бы.
Спасибо :)

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

приходится привязываться к ипам, что не хотелось бы

можно и без привязки к ip. всё зависит от наличия rtp-трафика идущего с_других/на_другие ip, кроме Вашего с астериском

з.ы.: пометьте тему, как решённую

cac2s
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.