И так влетела задача.
У нас есть некое кол-во сип транков, которые по тем или иным причинам собирались на разных IP АТС. Но в какой-то момент мы решили отдать наш КЦ на аутсорсинг одной компании, у которой в качестве АТС используется ASterisk. Т.к наши провайдеры SIP позволяют забрать свою телефонию только из своей внутренней сети и данные правила безопасности они менять отказались, было принято решение свести все телефоны на нашу АТС Asterisk, а новому КЦ отдать в качестве единственного транка. Как потом оказалось — всё не просто.
И так, что дано:
АТС Asterisk(АТС), подключена во внутренней сети и имеет IP 192.168.190.190, внешний Ip 9х.ххх.ххх.ххх, АТС подключена через маршрутизатор, выделять ей сразу внешний IP очень не хотелось.
АТС Asterisk(АТС2) аутсорсинговой компании: Ip 195.ххх.ххх.ххх — имеет реальный IP.
Наша АТС региструруется на АТС2.
Нам были выданы логин — yyy и пароль xxx
Регистрация проходила на ура, но вот беда, звонки не шли. В чём проблема? NAT. т.к наши сип провайдеры сами подменяют поле contact, нам никогда не приходилось использовать подмену IP в настройках АТС.
Что необходимо изменить:
1. Идём в раздел PBX — tools — Asterisk File Editor (Для тех кто использует ВЕБ)
1.1. Находим файл sip.conf.
1.2 Находим строку [general] и добавляем ниже следующие строки:
externip = 9х.ххх.ххх.ххх
localnet=192.168.0.0/255.255.0.0
где 9х.ххх.ххх.ххх=ваш внешний IP
localnet=адресное пространство вашей локальной сети.
Это позволит нам подменять наш Ip на 9х.ххх.ххх.ххх, если АТС, куда мы подключаемся будет находится вне пределов нашей локальной сети.
2. Теперь необходимо создать транк:
2.1 Идём PBX — PBX Configuration — Trunks, выбираем Add SIP Trunk
2.2 Заполняем поля:
2.2.1 Trunk Name = ATS2
2.2.2 Maximum Channels = 30 (Или сколько их у вас) — поле обязательно заполнять, иначе исходящие через транк не заработают.
2.2.3 Outbound Dial Prefix — ставим тут номер на АТС2, как выяснилось потом, это было основным камнем преткновения. Пока не добавили сие поле в заголовке было следующее: INVITE sip:195.209.116.92 SIP/2.0, на что АТС2 ругалась матом и говорила, что инвайт некорректный.
2.2.4 Заполняем Outgoing Settings
2.2.4.1 Trunk Name: ATS2_OUT
2.2.4.2 PEER Details:
type=friend
qualify=no
nat=yes
insecure=invite
host=195.xxx.xxx.xxx
dtmfmode=rfc2833
disallow=all
context=from-trunk
canreinvite=no
allow=alaw&ulaw
2.2.5 Пропускаем все поля, заполняем только поле Register String:
youlogin:youpassword@195.xxx.xxx.xxx/trankname
trankname, обычно, ставлю таким же как и логин.
2.2.6 Жмём Submit Changes
2.2.7 Жмем Apply Configuration Changes Here
3. Создаём правило inbound Routes
3.1 Заполняем поле Description = in
3.2 Set Destination = Trunks = ATS2
Собственно после всех настроек — всё завелось. При звонке на любой наш транк — вызов тут же переадресовывался на АТС2
UPD: Elsatix 4
Когда установил эластикс 4, набранный номер из транка стал передаваться согласно:
exten => tdial,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
Данная строчка находится в файле extensions_additional.conf
т.к в моём примере надо передавать ТОЛЬКО префикс и А-Номер, то строка должна стать вида: exten => tdial,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}})
Если внести изменения в этом же файле, то еластикс перезапишет настройки. Что бы внести изменения и сохранить, необходимо внести изменения в файле extensions_override_freepbx.conf
Копируем контекст, вносим изменения, сохраняем файл, делаем reload и всё работает.