О деактивации форума Eltex

Уважаемые коллеги! В связи с потерей актуальности данного ресурса, нами было принято решение о частичной деактивации форума Eltex. Мы отключили функции регистрации и создания новых тем, а также возможность оставлять сообщения. Форум продолжит работу в "режиме чтения", так как за долгие годы работы здесь накопилось много полезной информации и ответов на часто встречающиеся вопросы.

Мы активно развиваем другие каналы коммуникаций, которые позволяют более оперативно и адресно консультировать наших клиентов. Если у вас возникли вопросы по работе оборудования, вы можете обратиться в техническую поддержку Eltex, воспользовавшись формой обращения на сайте компании или оставить заявку в системе Service Desk. По иным вопросам проконсультируют наши менеджеры коммерческого отдела: eltex@eltex-co.ru.

TM.IP и kamailio с авторизацией клиентов

ECSS-10, TAU.IP, SMG, RG
evgenyoleynikov
Сообщения: 9
Зарегистрирован: 02 мар 2016 08:22
Reputation: 0

TM.IP и kamailio с авторизацией клиентов

Сообщение evgenyoleynikov » 02 мар 2016 09:28

День добрый.
Возникла необходимость сделать доступ к tm.ip исключительно для авторизованных клинетов.
На tm.ip был установлен sip сервер kamailio. К сожалению, с готовым файлом конфигурации предоставленным комнанией eltex сделать авторизованный доступ не удалось. Да, если клиент не авторизован, то входящие звонки на него не поступают. Но вот сам он мог звонить совершенно беспрепятственно. Мне удалось сконфигурировать kamailio так, чтобы исходящие от клиента звонки так же не проходили без авторизации (см. во вложении /etc/kamailio/kamailio.cfg).
После этого встал вопрос, а как конфигурировать пароли клиентов в kamailio? Конечно, можно было сделать веб-интерфейс на отдельном сервере и через tftp сливать файл subscriber на tm.ip. Но как-то это все неудобно и неоперативно.
Нашлось очень простое решение. В веб интерфейсе tm.ip при конфигурировании клиента имеем поле "Name". По сути это просто комментарий.
Было принято решение, что пароль будет вводиться в это поле сразу после самого имени через символ "|".
Далее был написан скрипт /etc/kamailio/kamailio-reconfig который преобразует файл маршрутов tm.ip /etc/config/gw.route в файл subscriber kamailio после чего производит перезапуск kamailio. Только нужно помнить, что длина поля Name ограничена 31 символом!
Вызов данного скрипта был вставлен в скрипт /voip/reload последней строкой. В результате, все управление пользователями по прежнему производится через веб интерфейс tm.ip.
Порт 6050 на котором после перенастройки "слушает" gate323 (sip сервер tm.ip), доступный без авторизации, после всех изменений был закрыт от локальной сети с помощью iptables.
Ну и в конце конечно не забываем выполнить команду save.
Все файлы в аттаче. Там в том числе есть и файл /etc/config/gw.route с примером поля "Name" (последнее поле). В данном случае мы применили такой формат имени:

Код: Выделить всё

<собственно имя клиента>|<последний октет ip-адреса клиента>|<пароль>

ip адрес сохраняем на случай если с kamailio что-то пойдет не так (например начнет падать) для отката к работе без kamailio.
В случае, если переход на авторизацию через kamailio связан с переконфигурированием большого числа клиентов (как в нашем случае) рекомендую алгоритм:
1. Первоначально настраиваем все так, чтобы gate323 "слушал" на порту 5060, а kamailio на порту 6050.
2. Проверяем работу на тестовом клиенте прописав его в gw.route следующим образом:

Код: Выделить всё

<номер телефона> <адрес tm.ip>:6050 0 sip <имя>|<пароль>

и делаем /voip/reload
3. В файле gw.route "генерим" пароли для всех клиентов дописывая их через "|" в поле Name. Делать это через веб интерфейс неудобно, слишком много действий с кажным клиентом. Лучше все сделать либо в текстовом редакторе либо написать скрипт который сгенерит пароли и добавит их на место.
4. Перезапускаем gate323 и kamailio:

Код: Выделить всё

/voip/reload

5. Распечатываем файл gw.route в нескольких экземплярах и делим между операторами, которые перенастраивают все клиентские терминалы включая авторизацию и прописывая пароли.
Поскольку на порту 5060 по прежнему "слушает" gate323, которому все равно регистрируется клиент или нет, то все проходит совершенно прозрачно.
6. Когда все клиенты переконфигурированы, меняем порт для gate323 на 6050, а для kamailio на 5060.
7. С помошью заранее подготовленного скрипта в файл gw.route меняем поле target с ip-адреса клиента, на ip-адрес самого tm.ip. Для надежности можно переписать адрес клиента из Target в Name как я писал выше.
8. Перезапускаемся /voip/reload и проверяем работу. После этого можно сохраниться командой save.

Примечание. Не забываем сохранить изначальную конфигурацию до установки kamailio для быстрого отката назад в случае возникновения проблем!

Инструкция по работе с tm.ip и установке kamailio:
http://eltex.nsk.ru/upload/iblock/d14/mc240v3_part6.pdf
Вложения
config.zip
(10.63 КБ) 311 скачиваний

ioann
Сообщения: 7
Зарегистрирован: 18 май 2009 12:41
Reputation: 0

Re: TM.IP и kamailio с авторизацией клиентов

Сообщение ioann » 09 мар 2016 12:01

Добрый день!

Спасибо, что выложили плод своих трудов!
Полет нормальный? Не падает kamailio? Если не секрет - сколько пользователей (можно в личку)?

evgenyoleynikov
Сообщения: 9
Зарегистрирован: 02 мар 2016 08:22
Reputation: 0

Re: TM.IP и kamailio с авторизацией клиентов

Сообщение evgenyoleynikov » 28 мар 2016 09:16

День добрый. Нет, пока не запустили. Возникли большие проблемы с самим gate323. После включения на части клиентских терминалов регистрации, он стал падать по ошибке сегментации. В какой-то момент даже хотели отказаться от kamailio вообще и ставить отдельный сервер с asterisk.
Кроме того, выяснилось, что сигнализация при звонках с одного voip-клиента на другого voip-клиента в данной конфигурации шла через kamailio минуя gate323. Ну и соответственно не попадала в биллинг.
Разбирались с поддержкой и после обновления прошивки tm.ip проблема gate323 вроде исчезла.
В процессе разборок с биллингом удалось сделать "идеальную" конфигурацию для kamailio позволяющую совместить как статическую маршрутизацию (при этом не требуется регистрация) так и с динамическую (с регистрацией и произвольными ip-адресами). Это позволяет перейти на kamailio без предварительной подготовки клиентов. Выкладывать новую конфигурацию пока не буду, поскольку не прошел процедуру до конца. Сегодня-завтра сделаю это и если все нормально - выложу.
Клиентов порядка 400.

evgenyoleynikov
Сообщения: 9
Зарегистрирован: 02 мар 2016 08:22
Reputation: 0

Re: TM.IP и kamailio с авторизацией клиентов

Сообщение evgenyoleynikov » 31 мар 2016 09:10

Переход на kamailio завершен. Часть клиентов (около 60) переведены на аутентификацию. Пока полет нормальный.
Конфигурация во вложении.
Несколько комментариев.
1. Невозможно заменить порт SIP в gate323 через web-интерфейс. Говорит что все изменено, но не меняет...
Пришлось править непосредственно в /etc/config/gw.conf (сменил 5060 на 6050), потом save и только потом перезагрузка.
2. Kamailio после перезагрузки ведет себя странно. Один из процессов утилизирует 99% CPU. Чем он там занимается непонятно. Звонки проходят через раз. Перезапуск не помогает. Просто нужно расслабиться и ждать примерно 6 минут. После чего все входит в норму - простой CPU ~98%, иногда падает до 80%. После этого перезапуск kamailio (что необходимо для применения изменений конфигурации и таблиц) осуществляется мгновенно. Памяти свободной полно и, по моим наблюдениям, не утекает:

Код: Выделить всё

[root@mc240gw /voip]$free
              total         used         free       shared      buffers
  Mem:       110280        23264        87016            0            0
 Swap:            0            0            0
Total:       110280        23264        87016

Поскольку перезагрузка осуществляется крайне редко, только при обновлении какого-то ПО, то решили пока не обращать внимания на этот глюк.
3. Порт 6050 закрыт для клиентов (см /etc/iptables.conf)
4. Немного расскажу что и где находится.
Наша сетка 172.23.0.0/16. У tm.ip адрес 173.23.50.57. Он прописан в kamailio.cfg как pstn сервер с портом 6050.
Но этого оказалось недостаточно. Пришлось добавить его вместе с 127.0.0.1 в /etc/kamailio/trusted. Иначе входящие звонки от gate323 не проходят (требуется аутентификация):

Код: Выделить всё

(int,auto) src_ip(string) proto(string) from_pattern(string,null) tag(string,null)
1:127.0.0.1:any:.*:
2:172.23.50.57:any:.*:
769612:172.23.100.155:any:769612:

Кроме того, таблица trusted используется для плавного перевода клиентов на аутентификацию. Изначально я добавил в него все ip-адреса всех клиентов. Потом постепенно пачками прописывали пароли в терминалы и удаляли соответствующие адреса и телефоны из trusted.
Еще нужно иметь ввиду - после внесения изменений через web интерфейс нужно сначала "применить изменения" и только потом "сохранить". Потому-что именно при применении изменений выполняется скрипт /voip/reload:

Код: Выделить всё

kill -SIGUSR1 `cat /var/run/gate.pid`
/etc/kamailio/kamailio-reconfig

А из него, соответственно, скрипт kamailio-reconfig. Прежде чем объяснить что и как он делает и что там нужно будет менять в случае использования, объясню как настраиваются клиенты через web-интерфейс.
В полях Dialplan прописываем
Prefix - номер телефона
Target - 172.23.50.57 (т.е. адрес самой tm.ip)
Name - <название клиента>|<ip-адрес клиента>|<пароль>
Как я писал выше - Name не может быть длиннее 31 символа. Поэтому ip-адрес нужно было как-то сокращать.
По умолчанию считаем, что адресное пространство клиентов 172.23.100.0/24, вводим только последний октет:

Код: Выделить всё

Ivanov|48|2r2xckfJ

В результате в таблицы dbaliases и subscriber попадет адрес 172.23.100.48. Но конечно 256 адресов мало. Поэтому предусмотрена возможность ввода двух последних октетов адреса:

Код: Выделить всё

Sidorov|101.22|Bkd3ckfJ

В dbalises и subscriber попадет адрес 172.23.101.22.
Сам скрипт /etc/kamailio/kamailio-reconfig содержит код:

Код: Выделить всё

#!/bin/sh
echo "id(int,auto) username(string) password(string) domain(string) email_address(string,null) ha1(string,null) ha1b(string,null) rpid(string,null)" > /etc/kamailio/subscriber
cat /etc/config/gw.route|/bin/sed -e "s/^\([0-9]*\).*|\(.*\)|\([a-zA-Z0-9]*\).*$/!\1:\1:\3:172.23.\2::::0/"|/bin/sed -e "s/:172\.23\.\([0-9]*\):/:172.23.100.\1:/"|/bin/grep ^!|/bin/sed "s/^!//" >> /etc/kamailio/subscriber
echo "id(int,auto) alias_username(string) alias_domain(string) username(string) domain(string)" > /etc/kamailio/dbaliases
cat /etc/config/gw.route|/bin/sed -e "s/^\([0-9]*\).*|\(.*\)|\([a-zA-Z0-9]*\).*$/!\1:\1:172.23.50.57:\1:172.23.\2/"|/bin/sed -e "s/:172\.23\.\([0-9]*\)$/:172.23.100.\1/"|/bin/grep ^!|/bin/sed "s/^!//" >> /etc/kamailio/dbaliases
killall kamailio 2>/dev/null >/dev/null
/sbin/kamailio 2>/dev/null >/dev/null

Увы, набор средств очень ограничен. Ни perl ни awk нет. Пришлось довольствоваться sed и grep.
Как видно - сетка по умолчанию и адрес tm.ip прописаны в скрипте жестко. Так что если будете использовать - поправьте скрипт.
Что касается конфигурации kamailio. Все сделано так, что часть клиентов может работать с аутентификацией, часть нет (в этом случае их нужно прописать в таблице trusted). Применена статическая маршрутизация. Все ip-адреса прописываются в dbaliases. Это позволяет не использовать в клиентских терминалах регистрацию. А значит меньше нагрузка на tm.ip, меньше запросов. В клиенте просто вводим правильный пароль и, если это возможно, включаем аутентификацию в INVITE запросах.
Если же какого-то клиента нет в dbaliases, а в терминале включен REGISTER, то и так тоже будет работать.
Мы отказались от регистрации после того как увидели, что утилита sercmd ul.dump при количестве зарегистрированных клиентов больше 10 просто перестает работать. Падает с ошибкой 500. Так что даже такая малость как просмотр зарегистрированных клиентов становится невозможной. И зачем тогда нужна эта регистрация? Только нагрузка увеличивается. Ну ее.
Но если вы хотите использовать динамическую маршрутизацию, просто удалите #!define WITH_ALIASES из kamailio.cfg. Но тогда придется еще править /etc/kamailio/kamailio-reconfig удаляя прописывание статических адресов.
И последнее замечание - если в kamailio.cfg есть определение #!define WITH_DEBUG, то сервер стартует без форка в отладочном режиме. Без #!define WITH_DEBUG - форкается.

PS. Забыл сказать - все, даже локальные звонки идут через gate323 и соответственно тарифицируются. Когда переведу все 400 клиентов на аутентификацию - отчитаюсь насколько надежно работает.
Вложения
kamailio.zip
(12.11 КБ) 344 скачивания

evgenyoleynikov
Сообщения: 9
Зарегистрирован: 02 мар 2016 08:22
Reputation: 0

Re: TM.IP и kamailio с авторизацией клиентов

Сообщение evgenyoleynikov » 04 апр 2016 13:31

Все абоненты переведены на аутентификацию. Все работает, проблем нет. Средняя утилизация CPU 2-3%. Память не утекает и свободной памяти предостаточно:

Код: Выделить всё

              total         used         free       shared      buffers
  Mem:       110280        23548        86732            0            0
 Swap:            0            0            0
Total:       110280        23548        86732

Так что вполне рабочая конфигурация.

evgenyoleynikov
Сообщения: 9
Зарегистрирован: 02 мар 2016 08:22
Reputation: 0

Re: TM.IP и kamailio с авторизацией клиентов

Сообщение evgenyoleynikov » 04 май 2016 08:39

Прошел месяц. Все работает, ничего не падает. Больше отчитываться не буду :)

evgenyoleynikov
Сообщения: 9
Зарегистрирован: 02 мар 2016 08:22
Reputation: 0

Re: TM.IP и kamailio с авторизацией клиентов

Сообщение evgenyoleynikov » 28 окт 2016 16:24

А подниму тему еще раз.
Во первых, раз в 3-4 месяца все начинает жутко тормозить. Перезапуск kamailio не помогает. Приходится перегружать tm.ip целиком. Ну да бог с ним. Терпимо.
Куда хуже то, что наткнулись на проблему совместимости с ОНТ NTU-RG-1402G-W. Входящие звонки - без проблем. Исходящие - ни в какую.
Kamailio пропускает сигнализацию на gate323, но при подключении аудиопотока происходит сброс соединения. Разбираемся.
Что интересно, с NTP-RG-1402G-W проблем нет.


Вернуться в «Оборудование VoIP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя