Решение проблемы

Peer is not supposed to register


Столкнулся с непонятной мне ошибкой asterisk, которая возникла ни с того ни с сего без каких-либо видимых изменений в настройках. Двухсторонняя связь серверов asterisk в определенный момент перестала работать.

Есть два удаленных сервера astersik, связанных между собой vpn каналом на базе openvpn. Длительное время все нормально работало, настройки никто не менял, кроме добавления пользователей, как минимум пару лет. Работает и работает, необходимости в изменениях не было.

В один прекрасный момент один из серверов перестал регистрироваться на другом. В логах сервера, который отклонял регистрацию, было следующее:

[Oct 10 03:55:53] NOTICE[26576] chan_sip.c: Registration from '<sip:servnew@10.1.4.13>' failed for '108.68.220.194:54233' - Peer is not supposed to register

[Oct 10 03:55:54] ERROR[26576] chan_sip.c: Peer 'servnew' is trying to register, but not configured as host=dynamic

А тот, что пытался зарегистрироваться в лог сыпал сообщениями:

[2015-10-10 03:27:21] NOTICE[29264] chan_sip.c: -- Registration for 'servnew@10.1.4.13' timed out, trying again (Attempt #10)

Часть конфигурации сервера, который пытается зарегистрироваться:

register => servnew:1455Fxcdvg@10.1.4.13:51612/servxm

А это учетка на сервере приемнике:

[servnew]

type = friend
host = 10.1.3.205
username = servnew
secret = 1444Fxczvg
insecure = invite
trunk = yes
qualify = yes
context = old_serv
peercontext = old_serv

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

Так как я не очень глубоко знаком с astersik, работал только с простыми конфигурациями, то пришлось прилично повозиться, чтобы разобраться в ситуации. К тому же эти сервера настраивал не я, а несколько разных человек в разное время. Никакой документации не осталось, а конфигурации достаточно сложные. Я никак не мог понять, почему появилась ошибка, ведь видимых изменений не было.

Первым делом я решил изменить параметр учетной записи и поменять параметр host со старого на новый:

host = dynamic

По идее с этим параметром должна проходить регистрация. Но это почему-то не помогло. Сервер, который пытался зарегистрироваться, получал такую же ошибку, что и раньше о тайм ауте, а на приемнике вообще никаких упоминаний о событии не было. Я опять потратил много времени, но не смог понять, почему. Причем, регистрация в обратную сторону работает как раз с параметром dynamic и по тому же каналу связи. То есть настройки серверов получились идентичными, но один сервер авторизуется на другом, в другой в обратную сторону нет. Как я не пытался понять, почему так происходит, не получилось разобраться.

Решил проблему простым способом. На сервере приемнике поставил как и было:

host = 10.1.3.205

А на сервере, который пытался зарегистрироваться через

register => servnew:1455Fxcdvg@10.1.4.13:51612/servxm

отключил эту регистрацию. В итоге звонки стали нормально перенаправляться и все заработало как прежде. Очень хочется понять причину возникновений ошибки, и почему один сервер на другом нормально авторизуется с параметром dynamic, а в обратную сторону регистрация не проходит.


СМОТРИ ТАКЖЕ