Пример настроек для Asterisk версии 1.6 и далее
Данный пример подходит для сервера, подключенного к Интернет как через NAT, так и напрямую, а также через VPN
При использовании разнообразных надстроек вроде FreePBX необходимо учитывать специфику этих продуктов - вводить данные из примера в правильные поля, использовать правильные имена контекстов и т.д. и т.п.
Обратите внимание
Настройки транка c использованием chan_sip
[sipnet]
remotesecret = {пароль}
defaultuser = {SIP ID}
host = sipnet.ru
type = peer
context = from-trunk
insecure = invite
callbackextension = s
fromuser = {SIP ID}
fromdomain = sipnet.ru
disallow = all
allow = alaw&ulaw
nat = no
directmedia = no
dtmfmode = rfc2833
Комментарии к некоторым параметрам:
context - контекст с указанным именем должен существовать в dialplan’е (файл extensions.conf)
callbackextension - вместо 's' можно указать свой SIP ID или внутренний номер, на который нужно принимать вызовы; если не нужно принимать входящие вызовы, то использовать этот параметр не требуется; использование директивы register более не требуется
fromuser - не использовать, если планируется динамически передавать АОН при каждом звонке в поле 'From:'; следует использовать, если передавать свой номер в другом заголовке, например, "P-Asserted-Identity:'
allow - дополнительно можно указать и другие кодеки из числа поддерживаемых сервером
Можно использовать любой транспорт - UDP (по умолчанию), TCP, TLS. Например:
transport = tcp
Также можно использовать TLS с или без SRTP:
transport = tls
port = 5061
encryption = yes
SRTP не имеет отношения к регистрации. Это способ шифрования голосового трафика.
На регистрацию влияет транспорт SIP протокола UDP | TCP | TLS.
Некоторые важные параметры в файле sip.conf:
[general]
;
localnet = 192.168.1.0/255.255.255.0; ваша внутренняя подсеть
;
; при работе за NAT можно использовать externip или externhost (что-то одно)
; ни то, ни другое не является обязательным и вообще может мешать
; Для работы с сервером SIPNET подмена внутреннего адреса на внешний не нужна!
;
;externip =
; ваш внешний IP-адрес, если он является постоянным
;
;externhost =
; ваше доменное имя вида host.domain.tld, если вы пользуетесь динамическим DNS
;
;externrefresh = 60
; параметр актуален только если используется externip или externhost
;
nat = no
(в FreePBX для этих целей есть готовый контекст "from-pstn-toheader")
В настройках транка:
callbackextension = s
context = from-trunk-toheader
В настройках dialplan'а:
[from-trunk-toheader]
exten => s,1,gotoif($["${CHANNEL(channeltype)}"="SIP"]?SIP)
exten => s,n,gotoif($["${CHANNEL(channeltype)}"="PJSIP"]?PJSIP)
exten => s,n,goto(from-trunk,${EXTEN},1))
exten => s,n(SIP),Goto(from-trunk,${CUT(CUT(SIP_HEADER(To),@,1),:,2)},1)
exten => s,n(PJSIP),Goto(from-trunk,${CUT(CUT(PJSIP_HEADER(read,To),@,1),:,2)},1)
(в FreePBX настройки можно сделать в файле /etc/asterisk/extensions_custom.conf)
В настройках транка:
callbackextension = s
context = from-trunk-rpid
В настройках dialplan'а:
[from-trunk-rpid]
exten => s,1,gotoif($["${CHANNEL(channeltype)}"="SIP"]?SIP)
exten => s,n,gotoif($["${CHANNEL(channeltype)}"="PJSIP"]?PJSIP)
exten => s,n,goto(from-trunk,${EXTEN},1))
exten => s,n(SIP),Goto(from-trunk,${CUT(CUT(SIP_HEADER(Remote-Party-Id,2),>,1),:,2)},1)
exten => s,n(PJSIP),Goto(from-trunk,${CUT(CUT(PJSIP_HEADER(read,Remote-Party-Id,2),>,1),:,2)},1)
В обоих примерах после извлечения нужной информации вызов вернется в контекст с именем 'from-trunk', который должен существовать в dialplan’е.
Пример настройки PJSIP https://linadm.ru/posts/asterisk-debian/asterisk-setup
Для настройки исходящего маршрута в FreePBX выполните следующие шаги:
Перейдите в меню «Подключения» — «Исходящая маршрутизация».
Выберите «Добавить исходящий маршрут».
На вкладке «Настройки маршрута» укажите название маршрута, например, all_line.
Укажите по порядку транки, через которые будут совершаться исходящие вызовы.
Перейдите на вкладку «Правила набора» и пропишите шаблоны для исходящих номеров.
Остальные вкладки оставьте по умолчанию.
На этом настройка исходящего маршрута завершена.