источника.
deny=0.0.0.0/0
permit=10.251.55.100/32
insecure=invite
Большинство приведенных настроек должны быть вам знакомы, но если нет, далее дается их краткое описание.
Задавая тип peer, мы указываем Asterisk, что при получении сообщения INVITE (Приглашение) (когда поставщик присылает вызов) нужно сравнивать не имя [мой поставщик сервисов], а IP-адрес, указанный в этом сообщении. Параметр host - это IP-адрес, на который мы будем направлять наши вызовы, и этот IP- адрес будет сопоставляться при получении вызова от поставщика.
Параметр fromuser (от пользователя) влияет на то, как структурировано наше сообщение INVITE при отправке вызова поставщику сервисов.
Сопоставление имени пользователя, а не IP-адреса
Некоторые поставщики услуг для отправки своих вызовов могут использовать вместо протокола Session Initiation Protocol множество IP-адресов, требуя от вас создания отдельной учетной записи типа peer для каждого IP-адреса. Если известны не все IP-адреса, вероятно, придется сравнивать имена пользователей. В этом случае потребуется лишь немного изменить формат описания поставщика сервисов. Самое большое изменение, на которое следует обратить внимание, - то, что вам понадобится задать
Обратите внимание, что удалены параметры deny (отклонить) и permit (разрешить), поскольку IP- адреса, с которых будут поступать вызовы, могут быть неизвестны. Если вдруг эти адреса известны и вы по-прежнему хотите сравнивать их, параметры deny и permit для IP-адресов можно восстановить.
Если имя пользователя задано в параметре fromuser, при отправке вызова поставщику меняются поля From: (От:) и Contact: (Контакт:) сообщения INVITE. Этого может требовать сам поставщик, если он использует эти поля в процедуре аутентификации. То, где Asterisk меняет заголовок, можно увидеть в следующих двух фрагментах кода.
Без параметра fromuser:
Audio is at 66.135.99.122 port 18154
Adding codec 0x2 (gsm) to SDP
Adding codec 0x4 (ulaw) to SDP
Adding non-codec 0x1 (telephone-event) to SDP
Reliably Transmitting (no NAT) to 10.251.55.100:5060:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 66.135.99.122:5060;branch=z9hG4bK32469d35;rport
From: 'asterisk' <sip:[email protected]>;tag=as4975f3ff
To: <sip:[email protected]>
Contact: <sip:[email protected]>
Call-ID: [email protected] 35.99.122
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Max-Forwards: 70
Date: Fri, 20 Apr 2007 14:59:24 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: 265
С параметром fromuser:
Audio is at 66.135.99.122 port 11700
Adding codec 0x2 (gsm) to SDP
Adding codec 0x4 (ulaw) to SDP
Adding non-codec 0x1 (telephone-event) to SDP
Reliably Transmitting (no NAT) to 10.251.55.100:5060:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 66.135.99.122:5060;branch=z9hG4bK635b0b1b;rport
From: 'asterisk' <sip:мой_уникальный[email protected]>;tag=as3186c1ba
To: <sip:[email protected]>
Contact: <sip:мой_уникальный[email protected]>
Call-ID: [email protected] 35.99.122
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Max-Forwards: 70
Date: Fri, 20 Apr 2007 15:00:30 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: replaces Content-Type: application/sdp Content-Length: 265
Параметры deny и permit используются для отклонения всех входящих вызовов к этому участнику сети от всех IP-адресов, кроме заданного параметром permit. Это просто мера безопасности, которая обеспечивает поступление к данному участнику сети трафика только с ожидаемого IP-адреса.
В конце видим выражение insecure=invite, которое может быть необходимо для вашего поставщика, потому что источник сообщения INVITE может находиться на платформе сервера, но передаваться через его прокси-сервер SIP. По сути, это означает, что в строке Contact (Контакт) (поле сообщения INVITE, которое вы проверяете при приеме вызова от своего поставщика) может быть совсем не тот IP-адрес, по которому находится участник сети. Это выражение указывает Asterisk игнорировать данное несоответствие и принимать приглашение в любом случае.
Возможно, понадобится задать и invite=invite,port, если адрес порта также не соответствует тому, что ожидает Asterisk.
Теперь в разделе [general] файла sip.conf требуется задать один дополнительный параметр: register. register (реестр) укажет поставщику сервисов, куда направлять адресованные нам вызовы. Так Asterisk говорит поставщику сервисов: «Эй! Если ты получил вызов ко мне, пошли его на IP-адрес 10.251.55.100». Параметр register имеет следующий вид:
register => имяпользователя:секрет@мой.поставщик_сервисов.Ш Теперь осталось только сконфигурировать простой диалплан для обработки входящих вызовов и отправки вызовов через поставщика сервисов. Мы собираемся внести коррективы в диалплан, который начали создавать в разделе «Настройка диалплана для выполнения тестовых вызовов» данной главы. Строки, выделенные курсивом, - это новые части, добавленные в диалплан. Все остальное взято без изменений из предыдущего раздела[68].
[globals] [general] [default]
exten => s,1,Verbose(1|Unrouted call handler)
exten => s,n,Answer()