Настройка Grandstream HT503 для FreePBX (Asterisk, Trixbox, Elastix)

Нужен был шлюз с 1 FXO портом, ещё один FXS в этом случае приятно дополнение, ну и lifeline конечно пригодится при отключении электричества. D-link покупать не хотелось, а linksys в продаже отсутствует, поэтому выбор пал на Grandstream HT503, заранее скажу не понравилось, даже нелюбимый мной дэлинк ведёт себя и то более предсказуемо.

Итак приступим.

Я убил целый день из-за него на настройку, на прошивках 11.3 и 12.1 невозможно совершить исходящий звонок через FXO порт – астериск показывает что всё в порядке, а звонок не проходит – тишина в трубке. Вот невозможно и всё тут, поэтому если вам нужен FXO для звонков то вам нужна прошивка 10.9. По крайней мере я остановился на этой, в комментариях мне писали что всё хорошо работает и с 12.8.

Скачать прошивку 1.0.10.9 для HT503 можно здесь.

Это было отступление, неприятное, но необходимое. За более чем два года использования шлюза никаких проблем не возникло, нормальная рабочая лошадка.

Статья состоит из нескольких частей, это сетевые настройки, настройки FXS порта (внутренний) и настройки FXO порта (городской).

Сетевые настройки HT503

Внимание! Данный класс устройств не предназначен для того что бы их выставляли в интернет! Заранее позаботьтесь о том что бы доступ к этому устройству имел только ограниченный круг лиц. В идеальном случае никто кроме администраторов и самого астериска доступа к устройству иметь не должен. В противном случае вы рискуете тем что злоумышленник сможет звонить через ваш HandyTone за ваши деньги.

Итак, если вы подключаетесь к порту LAN устройства то там по умолчанию включен DHCP сервер, а IP адрес устройства – 192.168.2.1. Собственно так и надо доступ получать к вебке, потому что WAN порт по дефолту закрыт от всего, и настроен на получение IP по DHCP.

Значит заходим по адресу http://192.168.2.1 пароль админа по умолчанию – admin. Первым делом когда входим, в целях безопасности меняем пароль User и настраиваем статический IP адрес. Всё это делается в разделе Basic Settings. Разделение на user и admin в ht503 происходит исключительно по паролю, поэтому ставьте для user и admin разные пароли!

ht503 network settings

Не забываем нажимать кнопку Apply для сохранения настроек. Далее идём в Advanced Settings и меняем пароль админа.

ht503 admin password

Далее, если мы уверены что у нас в сети никто не станет ломать эту железку, можно открыть доступ к настройкам и icmp пакетам (читай пингу) с Wan порта, делается это в Basic Settings

ht503 wan access

Настройки FXS порта.

Эта самая пожалуй простая часть, для начала создаём пользователя в интерфейсе FreePBX, здесь описано как это сделать. Переходим в раздел FXS порт, заполняем адрес сервера (Primary SIP Server), имя пользователя (SIP User ID) и пароль (Authenticate Password аналогично экстеншену в астере).

ht503 fxs port settings

Спускаем ниже, настраиваем Dial Plan что бы набор номера происходил без задержек, хотя будет работать и без этого.

ht503 fxs dialplan

Пояснения о том как работает диалплан есть в инструкции:

Разрешённые символы: 1,2,3,4,5,6,7,8,9,0 , *, #, A,a,B,b,C,c,D,d

  • x – любая цифра от 0 до 9;
  • хх+ – как минимум любые две цифры;
  • ^ – запрет набора номера;
  • [3-5] – цифры от 3 до 5;
  • [147] – цифры 1, 4 или 7;
  • <2=011> – заменить 2 на 011;
  • < =1> – добавить цифру 1 перед номером;
  • | – разделитель между правилами.

Примеры из инструкции:

{[369]11 | 1617xxxxxxx} – позволяет набрать 311, 611, 911 и любые 10 цифр начинающиеся с 1617;
{^1900x+ | <=1617>xxxxxxx} – блокирует набор любого номера начинающего с 1900 и добавляет префикс 1617 перед любыми 7 набранными цифрами;

и диал план который использую я – {*xx|1xx|7xx|2xxxxxx|9xxxxxx|8xxxxxxxxxx|0[1-4]}

  • можно набрать номера от *01 до *99 – для функций астериска (*xx);
  • от 100 до 199, от 700 до 799 – внутренняя нумерация (1xx|7xx);
  • от 2000000 до 2999999 и от 9000000 до 9999999 – городская нумерация (2xxxxxx|9xxxxxx);
  • любые 11 цифр начинающиеся с 8ки – межгород и мобильники (8xxxxxxxxxx);
  • 01,02,03,04 – номера экстренных служб (0[1-4]).

Все махинации с правилами набора номера, такие как добавление префикса или наоборот замену каких-то цифр я рекомендую делать в астериске.

Переходим к настройкам линии, в параметре Slic Setting по умолчанию стоит USA, но в этом режиме трубка какие-то странные звуки издаёт, поэтом я выбрал Belgium.

На этом же скрине видно параметр Gain – регулировка громкости, меня устроили первоначальные параметры.

ht503 gain level

На этом настройка FXS порта закончена. Жмём Apply, ждём пока перезагрузится шлюз и проверяем, всё должно работать.

Настройки FXO порта

Хотелось бы передать привет разработчикам ПО на это устройство, настройки FXO порта настолько не очевидны, насколько это вообще возможно, нюансов я считаю много.

Сначала будем настраивать входящий звонок. DID на HT503 прописывается в разделе Basic Settings – параметр Unconditional Call Forward to VOIP (здравствуй логика).

ht503 Unconditional Call Forward to VOIP

Здесь читаем где прописать DID на FreePBX. Не забываем Apply нажимать.

Asterisk

Следующим шагом надо будет создать транк в интерфейсе FreePBX. Выбираем раздел Trunks (Транки). Добавляем транк Add Trunk.

Trunk Name – имя транка, то как вы его хотите видеть, не на что в общем-то особо не влияет .
Outbound CallerID – номер телефона который вы будете видеть в отчёте при исходящих звонках.
Dialed Number Manipulation Rules – сопоставление набранных номеров с шаблоном, можно не заполнять. Подробнее о правилах и шаблонах набора номера можно здесь прочитать.
Trunk Name – не проверял, на HT503 но на некоторых шлюзах если указать имя транка отличное от имя пользователя могут не проходить входящие, поэтому рекомендую транк называть так же как имя пользователя.
PEER Details – самая интересная часть, здесь прописываются основные настройки.

username=gs-ht-503 ;Имя пользователя для порта, то что мы указывали в SIP User ID на шлюзе
type=friend ;Позволяет и принимать и отправлять вызовы
secret=Sw0rdfish ;Пароль
qualify=yes ;Разрешает серверу определять доступность VoIP шлюза
port=5062 ;SIP порт VoIP шлюза, параметр который указан шлюзе
nat=never ;Мы же не используем nat?
host=dynamic ;Для работы VoIP шлюз должен зарегистрироваться
dtmfmode=rfc2833 ;Режим который рекомендуется использовать.
context=from-pstn ;Контекст указывает обработчик входящих вызовов
canreinvite=no ;Запрещает передачу медиатрафика минуя астериск

Следующие поля оставляем пустыми:

USER Context:  
USER Details:
Register String:

Картинка для проверки.

ht503 asterisk

HandyTone

Теперь аналогично созданному транку заполняем Primary SIP Server, SIP User ID, Authenticate Password.

ht503 fxo settings

для того что бы протестировать приём входящих звонков осталось ещё пару настроек:

  • AC Termination Model  выбираем Impedance-based.
  • Impedance-based оставляем 600ом,
  • Number of Rings если у нас на номере включён Caller ID то ставим 2 что бы шлюз мог определить номер, если нет ставим 1 что бы трубку шлюз поднимал быстрее.
  • PSTN Ring Thru FXS: ставим No, в противном случае звонок из города сначала будет приходить на FXS порт, а уже через таймаут уходить на астер, но нам этого не надо.

ht503 fxo port settings

Жмём Apply – звоним проверяем.

Disconnect Tone

Следующим шагом будем заполнять Disconnect Tone подсказка что к чему есть прямо в вебинтерфейсе. Чтобы правильно заполнить шаблон нам надо будет записать короткие гудки и проанализировать. Для анализа я использую бесплатный аудиоредактор Audacity.

audacity Disconnect Tone

Открываем записанный файл, выделяем нужный нам отрезок короткого гудка и выбираем Анализ – Построить график спектра

audacity spectre

Наводим курсор на пик и видим что у нас написано Пик: 426 гц-26,6дб. В данном случае сигнал одночастотный (а бывают и двухчастотные, для них будет два пика).

Дальше смотрим длительность между гудками и длительность самих гудков.

audacity Disconnect Tone

в моём случае это 256мс, округлим до 250. Итак исходные данные мы собрали, теперь пишем шаблон:

Формула выглядит так:

f1=X@-Y,f2=Z@-Y,c=A/B;

где:
X – частота (у меня 426 Герца)
Z – частота второго пика, если сигнал одночастотный ставим тоже что и в X.
Y – громкость в dB, на графике 26, но можно оставить дефолтные 32
A – период сигнала гудка (0.250 с)
B – период тишины (0.250 с)

получаем – f1=426@-26,f2=426@-26,c=250/250;

Настраиваем раздел FXO Termination.

  • Enable Current Disconnect – No;
  • Enable PSTN Disconnect Tone Detection  – Yes;
  • PSTN Disconnect Tone –   f1=426@-26,f2=426@-26,c=250/250.

DialPlan

Настраиваем исходящие звонки. Для этого нам нужно будет в частности диалплан настроить, принцип работы такой же как в FXS повторяться не буду. У меня выглядит так:

ht503 fxo dialplan

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

Во-первых: необходимо выставить Wait for Dial-Tone – No иначе звонок никуда не пойдёт.

Во-вторых: этот шлюз умеет звонить в город в два этапа и в один, в случае если мы используем правила набора номера FreePBX то нам нужен один этап, а это значит что Stage Method (1/2) надо указать 1, по умолчанию стоит 2. Если выбрать 2 то при попытке позвонить в город через HT503 Астериску будет приходить Forbidden, а в логе шлюза будет ошибка – ATACtrl::processFxoOutgoingCallInitiated, Invalid User Id
Dispatching event: 17 (CALL_FAILED) on port 1:0
Тоже времени порядочно пришлось потратить что бы эту фичу понять (и снова привет разработчикам).

Проверочная картинка:

ht503 stage method

Жмём Apply – пробуем звонить. Спасибо за внимание.

p.s. Если возникли какие-то сложности с настройкой или хотите задать вопрос по статье – оставьте комментарий, рад буду помочь.