Страница 1 из 1

Некорректно определяется входящая линия на одном IP

Добавлено: 09 фев 2018, 15:35
Makioro
Здравствуйте! Мне двадцать лет, я бородат, живу с мамой, тролль, лжец и девственник. Вот и сейчас... P.S. Извените за неровный почерк.
Не смог даже придумать по каким словам поиск по форуму делать и даже нормально описать проблему в заголовке, за что прошу прощения.

Постараюсь развёрнуто описать проблему
Есть какой-то сервер, к которому мы подключаемся несколько раз для получения нескольких SIP линий. Это может быть GSM-шлюз на несколько сим-карт или облачная АТС от Укртелекома, суть общая: IP один, а учёток несколько.
Вот пример конфигурации при подключении к локальному GSM-шлюзу:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: sip.conf
[general]
limitonpeer=yes
register => gsm11:pass@172.16.0.51/0678хxxxxx
register => gsm12:pass@172.16.0.51/0990хxxxxx
register => gsm13:pass@172.16.0.51/0960хxxxxx
register => gsm14:pass@172.16.0.51/0630хxxxxx

context=incoming_fxo
language=ru
allowguest=no ;do not allow anonymous calls
alwaysauthreject=yes ;do not say whether wrong password or username
nat=force_rport,comedia

[mobiles](!)
type=friend
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
deny=0.0.0.0/0.0.0.0
permit=172.16.0.51/32
callcounter=yes
nat=no
host=172.16.0.51

[gsm11](mobiles)
fromuser=gsm11
secret=pass1

[gsm12](mobiles)
fromuser=gsm12
secret=pass2

[gsm13](mobiles)
fromuser=gsm13
secret=pass3

[gsm14](mobiles)
fromuser=gsm14
secret=pass4
Сервер астериск некорректно работает с этими линиями, что выражается в нескольких глюках
1) При входящем звонке с любой линии они все отображаются как gsm11
2) Игнорируется контекст, отличный от контекста gsm11. Т.е. если прописать в [gsm11] другой контекст, а в других оставить по-умолчанию, то все будут с таким же, как gsm11. Если прописать в любую другую линию другой контекст, то всё равно будет incoming_fxo - контекст gsm11.
3) Проблема с выбором линии для исходящего звонка (главная проблема, которая сподвигла обратиться к сообществу): использую конструкцию
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Выдержка из extensions.conf
same => n,gotoif($["${DEVICE_STATE(${OUT_GSM13})}" = "NOT_INUSE"]?:try2)
same => n,Dial(${OUT_GSM13}/${EXTEN})
same => n,Congestion()
same => n,Hangup()
same => n(try2),gotoif($["${DEVICE_STATE(${OUT_GSM14})}" = "NOT_INUSE"]?:try3)
same => n,Dial(${OUT_GSM14}/${EXTEN})
same => n,Congestion()
same => n,Hangup()
(до этого пробовал проверку статуса звонка gotoif($[ ${DIALSTATUS}=CHANUNAVAIL ]?line4), а не линии, как выше, но тоже некорректно работает)
И тут я не уверен в своих выводах, но вероятно происходит что-то такое: gsm13 занят исходящим, приходит входящий звонок на gsm12 (но астериск думает что занята gsm11 - первая), при попытке позвонить система видит что gsm13 занят исходящим, проверяет gsm12 - он типа свободен, пытается позвонить - отбой, т.к. она на самом деле занята.

Можно ли как-то по-другому настроить SIP? Может лучше будет на IAX2? Или может по-другому можно выбирать исходящую линию? Может есть какое-то частное решение для GSM-шлюза Openvox? (для УТ некритично - там звонков очень мало)
Заранее благодарен за ответы

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 09 фев 2018, 15:48
zzuz
Так работает потому, что insecure=invite . Попробуйте регистрировать ваши пиры через callbackextension вместо register .

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 09 фев 2018, 17:00
ded
... или просто указывая на пирах
host=dynamic

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 09 фев 2018, 18:46
Makioro
zzuz писал(а):Так работает потому, что insecure=invite . Попробуйте регистрировать ваши пиры через callbackextension вместо register .
Не уверен что понял совет. Типа так, без "register => ..." в [general]?
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
[mobiles](!)
type=friend
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite
deny=0.0.0.0/0.0.0.0
permit=172.16.0.51/32
callcounter=yes
nat=no
host=172.16.0.51

[gsm11](mobiles)
fromuser=gsm11
callbackextension=0678xxxxxx

Но эта опция callbackextension у меня есть в конце "register => ..../0678xxxxxx". Проблемы с определением экстеншена для входящего звонка нет, проблема именно с выбором линии для исхода
Спасибо, попробую позже
ded писал(а):... или просто указывая на пирах
host=dynamic
Попробовал сейчас просто заменить host=172.16.0.51 на host=dynamic и перестали работать входящие звонки. При попытке позвонить на шлюз в логах появлялись сообщения

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

[Feb  9 17:37:37] NOTICE[100459][C-00004d3d]: chan_sip.c:25566 handle_request_invite: Failed to authenticate device "+38097XXXXXXX" <sip:+38097XXXXXXX@172.16.0.52>;tag=as2542cbc3
[Feb  9 17:37:43] NOTICE[100459][C-00004d3e]: chan_sip.c:25566 handle_request_invite: Failed to authenticate device "38097XXXXXXX" <sip:38097XXXXXXX@172.16.0.51>;tag=as162937d7
где 38097XXXXXXX - номер звонящего
Или что-то ещё надо было делать помимо изменения хоста на dynamic?

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 09 фев 2018, 20:01
ded
Что-то сделать ещё? Например почитать Книгу о вкусной и здоровой пище. Или ещё какую нибудь.
без "register => ..." в [general]?
Знаете что такое register => ..." в [general]? Это приказ Астериску зарегистрироваться как клиент где-то на другом Астериске (другой станции). Шлюз - не станция, поэтому не Астериску на нём, а ему на Астериске надо регистрироваться.

Невозможно одно и то же пропесочивать на форуме каждому новичку, который пытается увязать Астериск и шлюз каждый раз. Читайте, не пишите больше!
Иначе некорректно придётся Вас направить в раздел Бизнес, в платный суппорт. Там уже греют сковородки.

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 27 фев 2018, 17:28
Makioro
Шлюз Openvox - очень даже станция, на нём есть свой астериск (хоть и урезанный)

В общем, советы здешние не помогли, поэтому пошёл обходным путём: в мускле создал таблицу с соответствиями линий входящим номерам и статусом каждой линии, а также 2 процедуры и функцию
Одна процедура помечает линию занятой (при входящем звонке, линия определяется по DID), другая процедура - помечает её свободной (экстеншн h), функция возвращает свободную линию для исходящего звонка и сразу помечает её занятой (определяет по имени)
Пока полёт нормальный

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 27 фев 2018, 17:35
ded
Makioro писал(а):Шлюз Openvox - очень даже станция, на нём есть свой астериск (хоть и урезанный)
Я это знаю со времён создания шлюзов OpenVox.
И это ничего не меняет в схеме регистрации: кто на ком должен регистрировать? Станция на телефоне, например, или всё же телефон на станции?

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 28 фев 2018, 06:27
virus_net
Makioro, а теперь подумайте, что будет если апдейт в мускуль, по тем или иным причинам, не пойдет ?

Так вы и не последовали совету от ded...
Книгу, судя по всему, так же не освоили.

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 28 фев 2018, 18:53
Makioro
Пытался последовать совету подключать шлюз к серверу, а не наоборот - не получилось. Экспериментировать не на чем - это рабочая система, звонки идут постоянно
Если речь о совете "не пиши, а читай" - ему я последовал в полной мере. Отписался уже по решении проблемы. Только потому что когда ищу решение какой-то проблемы раздражают темы с описанием похожей, но без решения.
Да, понимаю что усложнение схемы увеличивает риск проблем. Но другого решения не придумал. Может переделаю на AstDB, но мускль там всё равно используется для других целей.
ded писал(а):Станция на телефоне, например, или всё же телефон на станции?
Строго "FXO-FXS" осталось на аналоге, в цифре границы размыты и разница небольшая - функционал есть, значит можно
Пишу в форуме новичков, т.к. являюсь новичком и телефония не является основным источником дохода. Вообще источником дохода не назвать. Скорее для разнообразия
"Астериск - будущее телефонии" прочел и даже был бумажный экземпляр (где-то посеял).

Всем спасибо. Думаю, тему можно закрыть

Re: Некорректно определяется входящая линия на одном IP

Добавлено: 01 мар 2018, 12:36
Zavr2008
ТС, тема довольно типичная. Посмотрите на форумах - таких тем много.

Вот что можно поменять: type=peer поставить. Чтобы не писало gsm1 настроить sendpid=yes и trustrpid=yes на обоих концах.
Также обычно разруливают в одном контексте просто по номерам A и B.
Относительно БД: прямое юзание в диалплане очень дело скользкое - Вы можете легко вызвать утечки памяти. Если уж делать - то через AGI.

И я не уверен что данная проблема будет и в chan_pjsip! Попробуйте.