Столкнулся с непонятной мне ошибкой asterisk, которая возникла ни с того ни с сего без каких-либо видимых изменений в настройках. Двухсторонняя связь серверов asterisk в определенный момент перестала работать.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Есть два удаленных сервера 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, а в обратную сторону регистрация не проходит.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Сейчас вспомнил про эту заметку. Я разобрался, в чем была причина ошибки. На проблемном сервере было указано несколько локальных IP. Из-за этого иногда возникали ошибки разного рода.