Автор Тема: Шейпинг трафика для voip  (Прочитано 1573 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Шейпинг трафика для voip
« : 24 Февраль 2014, 14:03 »
Есть сервер, на нам стоит 12.04 с прозрачным прокси, eth0 - локалка, eth1 - роутер с инетом. На этой же машине стоит Asterisk с FreePBX. Настроил шейпинг по этой статье с помощью htbinit.
[spoiler=Файл eth1-2:10.voip]
# class for outgoing voip
RATE=256Kbit
CEIL=1Mbit
RULE=*:5060,
RULE=*:10000-20000,
PRIO=1
[/spoiler]
Тут вроде всё верно. Но при звонке с внешнего екстеншна, который заходит на Asterisk через интернет, с помощью jnettop наблюдаю, что порты не всегда находятся в диапазоне 10000-20000, как указано в rtp.conf Астера. На роутере проброшены порты этого же диапазона для UDP пакетов.
Вижу два пути выхода из засады:
1. Заставить Asterisk договариваться об использовании портов только из указанного диапазона;
2. Маркировать с помощью iptables пакеты, исходящие от Asterisk определенным маркером, а с помощью htb уже маркированные пакеты шейпить.

Вот теперь, собственно, как это сделать?
С уважением, Юрий

Оффлайн hedgeven

  • Administrator
  • Свой человек
  • *****
  • Сообщений: 853
  • Karma: +13/-0
  • Jabber: hedgeven@xmpp.kz
Re: Шейпинг трафика для voip
« Ответ #1 : 24 Февраль 2014, 16:06 »
разве в rtp.conf порты не для входящего трафика указаны? т.е. у клиентов могут быть разные порты, но приходят они к вам на сервер в диапазоне 10000-20000. поэтому и шейпить надо не по исходящему, а по входящему трафику.
ну или я не совсем понял постановку задачи. :)
Jah will give us everything...

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Re: Шейпинг трафика для voip
« Ответ #2 : 24 Февраль 2014, 16:20 »
А как шейпить по входящему, если регулируется только исходящий с интерфейса трафик?
Я толком инфу не нашел, но, имхо, у разных девайсов могут быть свои мысли по поводу портов. Они сначала ломятся по сигнальному порту 5060, а потом уже договариваются, какой UDP порт юзать для войса. Устанавливается коннект по этим портам и пошел голос.
С уважением, Юрий

Оффлайн hedgeven

  • Administrator
  • Свой человек
  • *****
  • Сообщений: 853
  • Karma: +13/-0
  • Jabber: hedgeven@xmpp.kz
Re: Шейпинг трафика для voip
« Ответ #3 : 24 Февраль 2014, 16:33 »
А как шейпить по входящему, если регулируется только исходящий с интерфейса трафик?
Я так понял, по той статье, что так
RULE=,*:10000-20000

Но вообще стоит больше собрать инфы о сетевых сессиях, например собрать статистику нескольких запусков команды netstat -naept|grep ESTABLISHED

P.S. хотя похоже я что-то путаю, и у тебя все правильно в конфиге написано. там как-то можно мониторить работет ли шейпер (может есть логирование)? ну или через iftop и его аналоги.
« Последнее редактирование: 24 Февраль 2014, 16:36 от hedgeven »
Jah will give us everything...

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Re: Шейпинг трафика для voip
« Ответ #4 : 24 Февраль 2014, 16:36 »
Я так понял, по той статье, что так
RULE=,*:10000-20000
Да, но ограничиваются и рулятся все равно только исходящие пакеты.

Вот если б средствами iptables маркировать пакеты, исходящие только от процесса asterisk, тогда было бы все проще. Так можно сделать?
С уважением, Юрий

Оффлайн hedgeven

  • Administrator
  • Свой человек
  • *****
  • Сообщений: 853
  • Karma: +13/-0
  • Jabber: hedgeven@xmpp.kz
Re: Шейпинг трафика для voip
« Ответ #5 : 24 Февраль 2014, 17:51 »
в ядре 2.4 была возможность привязать правило к PID, но в 2.6 с введением многопоточности и других изменений эта возможность пропала.
зато есть возможность в iptables фильтровать пакеты по uid/gid, так что если астер работает из под отдельного юзера, то можно попробовать.

-m owner --uid-owner asterisk
Jah will give us everything...

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Re: Шейпинг трафика для voip
« Ответ #6 : 24 Февраль 2014, 20:50 »
так что если астер работает из под отдельного юзера, то можно попробовать.
Код: [Выделить]
-m owner --uid-owner asterisk
Так-так, вот с этого места подробнее. Астер пашет от юзверя asterisk в группе dialout.
Блин, и от этого же юзверя апач сидит.  :rolleyes:
Всё хотел их разнести попробовать, руки не доходят.
С уважением, Юрий

Оффлайн hedgeven

  • Administrator
  • Свой человек
  • *****
  • Сообщений: 853
  • Karma: +13/-0
  • Jabber: hedgeven@xmpp.kz
Re: Шейпинг трафика для voip
« Ответ #7 : 24 Февраль 2014, 21:21 »
странно, что апач работает от asterisk, да еще и в группе dialout... чего только не придумают...
лучше бы разнести по разным юзерам и маркировать потом трафик с определенным uid.
Jah will give us everything...

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Re: Шейпинг трафика для voip
« Ответ #8 : 24 Февраль 2014, 21:32 »
Не, апач от астериска пашет, чтоб чет там FreePBX писал. Я уже не помню для чего это. Как-то пытался по уму сделать, сильно много глюков с правами вылезло, бросил до лучших времен.
С уважением, Юрий

Оффлайн B@F

  • Доброй души человек, если кого обижу то пишите мне, я не специально.
  • Administrator
  • Свой человек
  • *****
  • Сообщений: 1277
  • Karma: +7/-0
    • linuxforum.kz
  • Jabber: baf@xmpp.kz
Re: Шейпинг трафика для voip
« Ответ #9 : 24 Февраль 2014, 22:08 »
Есть сервер, на нам стоит 12.04 с прозрачным прокси, eth0 - локалка, eth1 - роутер с инетом. На этой же машине стоит Asterisk с FreePBX. Настроил шейпинг по этой статье с помощью htbinit.
[spoiler=Файл eth1-2:10.voip]
# class for outgoing voip
RATE=256Kbit
CEIL=1Mbit
RULE=*:5060,
RULE=*:10000-20000,
PRIO=1
[/spoiler]
Тут вроде всё верно. Но при звонке с внешнего екстеншна, который заходит на Asterisk через интернет, с помощью jnettop наблюдаю, что порты не всегда находятся в диапазоне 10000-20000, как указано в rtp.conf Астера. На роутере проброшены порты этого же диапазона для UDP пакетов.
Вижу два пути выхода из засады:
1. Заставить Asterisk договариваться об использовании портов только из указанного диапазона;
2. Маркировать с помощью iptables пакеты, исходящие от Asterisk определенным маркером, а с помощью htb уже маркированные пакеты шейпить.

Вот теперь, собственно, как это сделать?

В общем мое мнение.
1. голосовой трафик должен быть приоритетным перед сигналингом. У вас они равны.
2. Входящий трафик шейпить нельзя и нет смысла в этом. Т.к. очереди выставляются только для исходящего, т.е. в вашем случаи провайдер должен выставлять приоритеты. Я уже писал про это на linuxcentr.kz, что весь интернет трафик идет с 0 приоритетом и рубится во всем мире в первую очередь. Если вы хотите иметь качество, то должны использовать специальный порт , кажется в дсл это 0/41. В этом порту выставлены сигналинг в 3 приоритет, а голос в 5.
Вывод: непарится и шейпить исходящий, это максимум что можно сделать, ну или исходящий в сторону локалки.

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

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Re: Шейпинг трафика для voip
« Ответ #10 : 24 Февраль 2014, 23:22 »
1. голосовой трафик должен быть приоритетным перед сигналингом. У вас они равны.
Сигнального трафика на порядок меньше, чем голосового. Не вижу смысла.
2. Если вы хотите иметь качество, то должны использовать специальный порт , кажется в дсл это 0/41. В этом порту выставлены сигналинг в 3 приоритет, а голос в 5.
Это да, но сторонние VoIP провайдеры через 0/41 почему-то не пашут.  ^_^ Типа задармы, петронета и проч. Кстати, сам себе противоречишь. Приоритетнее трафик с меньшим номером приоритета.
Вывод: непарится и шейпить исходящий, это максимум что можно сделать, ну или исходящий в сторону локалки.
Так я так и делаю. Субъективно стало лучше.
С уважением, Юрий

Оффлайн B@F

  • Доброй души человек, если кого обижу то пишите мне, я не специально.
  • Administrator
  • Свой человек
  • *****
  • Сообщений: 1277
  • Karma: +7/-0
    • linuxforum.kz
  • Jabber: baf@xmpp.kz
Re: Шейпинг трафика для voip
« Ответ #11 : 25 Февраль 2014, 13:26 »
как гнать дело каждого я лишь рекомендовал так как принято в мире.
0/41 это закрытая сеть для адифона и только.
чем выше значение cos тем выше приоритеты. Курс CISCO CCNA DISKAVERY.
если ваше устройство и астер и шлюх для кучи юзеров то по-любому лучще;если только астер то особого смысла нет.
Поправьте, если я ошибаюсь, буду тока рад.

Оффлайн Yuriy_Y

  • Модераторы
  • Активный участник
  • *****
  • Сообщений: 484
  • Karma: +9/-0
  • Jabber: yuriy_y@xmpp.ru
Re: Шейпинг трафика для voip
« Ответ #12 : 25 Февраль 2014, 16:08 »
если ваше устройство и астер и шлюх для кучи юзеров то по-любому лучще;
Вот именно, комбайн у меня, и не один. Но помогает. Проверил.  -_-
Теперь буду на всех внедрять.
С уважением, Юрий

 

Соц. сети

Вконтакте - linuxforum.kz Вконтакте - LinuxCenter.kZ

СПО в Казахстане

LinuxCenter.kZ Jabber сервер XMPP.kz Baurzhan.info

Прочее

nmgames.kz radio.north.kz