Настройка SIP в Asterisk 13 sip.conf
Конфиг Asterisk 'sip.conf' отвечает за настройку внутренних и внешних каналов SIP.
Внешние SIP транки и аккаунты внутренних абонентов назначаются здесь. Конфиг делится на секции, обозначающиеся именами в [квадратных скобках]. Действует принцип наследования, как и в большинстве конфигов Asterisk: все что задано после имени в квадратных скобках, относится к этому объекту, пока не встретится следующая секция с именем в скобках.
Существует встроенная секция [general] определяющая глобальные настройкидрайвера SIP Asterisk. Остальные секции, транки и внутренние абоненты, определяются пользователем (администратором) системы.
Asterisk SIP trunk
SIP транк в Asterisk, это совокупность объектов для совершения исходящих и приема входящих вызовов, из-за пределов системы по SIP протоколу. Выделим три основных SIP объекта настроек транков в Asterisk:
- register - формирует запрос SIP REGISTER для аутентификации на сервере провайдера.
- peer - SIP объект, через который совершаются вызовы.
- user - SIP объект для аутентификации и маршрутизации входящего вызова.
Asterisk Register String
Register string - строка регистрации определяющая параметры SIP запроса REGISTER.
В файле конфигурации sip.conf в секции [general] добавьте определение register:
register ⇒ user [:secret[:authuser]] @host [:port] [/extension]
Рассмотрим возможные параметры на следующем примере:
Зарегистрировать sip аккаунт useridна сервере sip провайдера, как контакт 1234567 на Asterisk.
register => userid:password@sip.server:5060/1234567
- userid - идентификатор пользователя, используемый для SIP сервера (например, 3216111)
- authuser - не обязательное имя пользователя для авторизации на SIP сервере
- secret - пароль пользователя
- host - имя домена или хоста SIP сервера. Этот SIP сервер должен быть определен в своей секции файла sip.conf, где должны быть заданы его параметры.
- port - на какой порт посылать запросы регистрации на сервере host. Если не задано, то по умолчанию - 5060
- /1234567 - номер екстеншена для приема вызовов в Вашем Asterisk. 1234567 - вставляется в SIP заголовок contact, SIP запроса на регистрацию. Этот екстеншен используется удаленным SIP сервером, когда ему необходимо совершить вызов в сторону Вашего Asterisk.
- Если данный параметр не указан в строке регистрации, SIP сервер, вероятно, использует userid.
- Если SIP транк обслуживает пул из нескольких номеров, в качестве контакта на стороне Asterisk, сервер SIP провайдера будет использовать вызываемый номер из пула, игнорируя extensionуказанный в register string.
Для контроля SIP сообщений, статуса пиров и регистраций удобно использовать команды Asterisk CLI.
Вот некоторые из них:
- sip show peers - Отобразить все пиры и их статус.
- sip show peer <имя пира> - Показать конфигурацию определенного пира.
- sip show registry - Отобразить статус регистраций на удаленном UAS.
- sip set debug on - Показывать все SIP сообщения.
- sip reload - Перечитать конфигурационный файл.
- sip show settings - Показать текущую конфигурацию chan_sip.
Для получения подробной информации о командах смотрите Asterisk CLI - интерфейс командной строки.
Пример вывода команды sip show registryв консоли Asterisk:
#asterisk -rx 'sip show registry' Host dnsmgr Username Refresh State Reg.Time sip.server:5060 N userid 105 Registered Mon, 19 Dec 2016 11:48:03
Возможные состояния (state):
- Registered - зарегистрирован.
- Request Sent - запрос отправлен, ожидает ответа.
- No Authentication - ответ отрицательный, регистрация отвергнута.
Регистрация необходима, чтобы принимать входящие вызовы от провайдера, если используется SIP транк с аутентификацией. Как правило, это касается услуг связи предоставляемых через публичную сеть. Но могут быть и другие варианты SIP транков, без аутентификации, через серую сеть провайдера, например. Или для связи двух доверенных серверов Asterisk корпоративной сети. В этом случае не требуется регистрации, аутентификация, обычно происходит по ipадресу, выделенному провайдером. В этом случае, бывает достаточно создать SIP friend с минимальными параметрами. Например:
[siptrunk-no-auth] host=172.16.0.21 type=friend disallow=all allow=alaw context=from-trunk qualify=yes
Asterisk SIP peer
Для совершения исходящих вызовов должен быть создан объект type=peer.
Конфигурация пиров осуществляется при помощи текстовых блоков, отделенных друг от друга квадратными скобками. Имя в квадратных скобках, как правило совпадает с параметром 'username', но не обязательно.
[имя_пира] type=peer, user или friend параметр1=значение параметр2=значение
Где имя_пира - это произвольное имя SIP устройства, на которое можно ссылаться из других конфигурационных файлов. Параметр type может принимать одно из трех значений: type = value
* peer: SIP объект, через который совершаются исходящие вызовы. * user: SIP объект, через который принимаются входящие Asterisk . * friend: Запись, которая одновременно и userи peer. Этот тип наиболее подходит для телефонов и других устройств. Для SIP пользователей этого типа Asterisk создаст два объекта, один типа peer и один типа user, с одинаковыми именами.
[siptrunk] host=sip.server.tld port=5061 transport=udp defaultuser=userid secret=password fromuser=userid fromdomain=sip.server.tld type=friend disallow=all allow=alaw allow=ulaw allow=g729 nat=force_rport,comedia directmedia=nonat insecure=port,invite dtmfmode=rfc2833 context=from-siptrunk
В диалплане (extensions.conf) можно использовать разнообразный синтаксис для вызова (набора) SIP устройств.
* SIP/devicename * SIP/username@domain (SIP uri) * SIP/username[:password[:md5secret[:authname[:transport]]]]@host[:port] * SIP/devicename/extension * SIP/devicename/extension/IPorHost * SIP/username@domain//IPorHost
В файле extensions.conf, для совершения исходящих вызовов, у Вас должно присутствовать правило набора, примерно такого вида:
exten => _9.,1,Dial(SIP/${EXTEN:1}@sipppnet-out,30,r)
Переменная ${EXTEN:1} получает номер екстеншена и удаляет первую цифру- '9'. Подробная информация приведена в Asterisk Dialplan - extensions.conf.
Пример контекста для входящих вызовов в файле 'extensions.conf':
[from-sipppnet] exten => 3216111,1,Dial(SIP/100&SIP101,180,tr)
Настройка SIP пира для регистрации абонентов на Asterisk
Как уже отмечалось Asterisk не делает особых различий между транками и абонентами, поэтому конфиг телефона будет похож на SIP транк, но все же немного другой.
[777] host=dynamic type=friend secret=**password** qualify=yes nat=no port=5061 directmedia=no context=from-internal disallow=all allow-alaw allow=ulaw alow=gsm deny=0.0.0.0/0.0.0.0 permit=192.168.0.0/255.255.0.0 username=777 fromuser=777 dial=SIP/777 mailbox=777@device call-limit=2 callcounter=yes faxdetect=no callgroup=1 pickupgroup=1
Рассмотрим некоторые опции:
- host - dynamic или ip адрес с которого подключается абонент.
- type - для абонентского пира это обычно friend
- secret - пароль, использование сложных паролей убережет вас от многих неприятностей, даже если вы считаете сеть безопасной, в дальнейшем все может измениться и ваша предусмотрительность окажется очень кстати.
- qualify - посылать SIP запросы OPTIONS для проверки доступности устройства (возможно это является избыточным, т.к. большинство устройств сами обновляют регистрацию, через заданный в настройках интервал)
- nat - если телефон находится в локальной сети то 'no', если регистрируется из интернет или другой интра сети, то 'force_rport'
- nat = no - без NAT RFC3581
- nat = force_rport - использовать rport, даже если его нет
- nat = comedia - отправить медиа поток на порт Asterisk 12, независимо от указаний SDP.
- nat = auto_force_rport - установить 'force_rport' параметр если Asterisk обнаружил NAT (по умолчанию)
- nat = auto_comedia - установить 'comedia' параметр если Asterisk обнаружил NAT
- directmedia - направлять медиа поток (RTP трафик) через сервер или напрямую между каналами (пирами).
см. также по теме:NAT, SIP и Asterisk
- port - порт SIP сигнализации устройства (не путайте c bindport asterisk, который для данного драйвера SIP в Asterisk может быть только один, 5060 по умолчанию, но для нового драйвера Asterisk pjsip.conf, может, или даже должен, быть назначен уникальный порт для каждого транспорта)
- deny - сети из которых запрещено подключение
- permit - сети из которых разрешено подключение (если абонент находится в локальной сети, назначьте ему параметр permit=192.168.1.0/255.255.255.0 и регистрация на этом пире будет разрешена только из этой подсети. ACLочень действенная мера безопасноcти. См. также Asterisk:acl.conf
- call-limit -сколько одновременных вызовов (concurrent calls) может производится через данный канал. Хорошая идея, как для локальных так и для удаленных абонентов. Если пир взломан, злоумышленники не смогут пропустить через канал больше указанного кол-ва вызовов зараз(ы).
'call-limit' опция признана устаревшей и заменена на 'callcounter'. Установить ограничение одновременных вызовов теперь можно переменной канала function 'GROUP_COUNT'
пример использования данного метода можно помотреть здесь:
Ограничение количества одновременных вызовов по набранному номеру.
Настройка нескольких SIP пиров по шаблону
Если у вас множество SIP пиров, которые имеют общие настройки и отличаются например, только 'username' и 'secret', можно создать шаблон.
Для этого надо создать шаблонный пир, а рядом с его именем в квадратных скобках, написать восклицательный знак в круглых скобках и задать общие настройки:
[local_pattern](!) host=dynamic type=friend context=from-internal nat=no disallow=all allow=ulaw allow=alaw
А затем определить уникальные свойства пиров, добавив рядом с именем каждого пира, имя общего шаблона в круглых скобках:
[776](local_pattern) username=776 secret=super_puper_secret_1 callerid=8123216111 [777](local_pattern) username=777 secret=super_puper_secret_2 callerid=8121234567