Asterisk™: будущее телефонии Второе издание
Шрифт:
Общее пиринговое соглашение
Общее пиринговое соглашение, или General Peering Agreement (GPA), - это имеющее обязательную юридическую силу лицензионное соглашение, разработанное для предотвращения злоупотреблений с протоколом DUNDi. Перед подключением к группе DUNDi-test необходимо подписать GPA. GPA используется для защиты членов группы и для установления между ними доверительных отношений. Обязательным требованием группы DUNDi-test является указание полной и точной контактной информации в файле dundi.conf, чтобы остальные участники одноранговой группы могли связаться с вами. GPA можно найти в подпапке doc/ папки исходного кода Asterisk.
Общая
Раздел [general] файла dundi.conf содержит параметры, относящиеся к общим вопросам работы клиента и сервера DUNDi:
; конфигурационный файл DUNDi
[general]
department=IT
organization= toronto.example.com
locality=Toronto
stateprov=ON
country=CA
email=support@toronto.example.com phone=+19055551212
; Задаем адрес привязки и номер порта. ПО умолчанию - 4520
;bindaddr=0.0.0.0
port=4520
entityid=FF:FF:FF:FF:FF:FF ttl=32
autokill=yes ;secretpath=dundi
Идентификатор объекта, заданный entityid, вообще должен быть адресом управления доступом к устройству (Media Access Control, MAC) интерфейса компьютера. По умолчанию в качестве идентификатора объекта используется первый Ethernet-адрес сервера, но его можно переопределить с помощью entityid, если ему присвоен MAC-адрес какого- то принадлежащего вам устройства. Рекомендуется использовать MAC-адрес основного внешнего интерфейса. С помощью этого адреса другие равноправные участники будут идентифицировать вас.
Поле Time To Live (ttl) определяет длину цепочки равноправных участников, от которых мы желаем получать ответы, и используется для прерывания циклов опроса. При каждой передаче запроса вниз по цепочке участников до тех пор, пока запрашиваемый номер не будет найден, значение поля TTL увеличивается на единицу, точно так же как это происходит с полем TTL пакета ICMP (Internet Control Message Protocol - межсетевой протокол контрольных сообщений, используемый для отладки и мониторинга в IP-сетях). Поле TTL также определяет максимальную продолжительность (в секундах) ожидания ответа.
Если вам необходимо найти номер, вашим равноправным участникам сети рассылается исходный запрос (называемый DPDISCOVER) об этом номере. Если вы не получаете подтверждение приема (ACK) своего запроса (DPDISCOVER) в течение 2000 мс (время, достаточное только для передачи сигнала) и параметр autokill имеет значение yes, Asterisk разошлет равноправным участникам сообщение CANCEL (отменить). (Заметьте, что подтверждение приема необязательно является ответом на запрос; это лишь подтверждение того, что участник получил запрос.) Назначение autokill - предотвращение задержек поиска из-за хостов с большим временем ожидания. Кроме опций yes и no, можно также задавать время ожидания в миллисекундах.
Модуль pbx_dundi создает циклически сменяющийся ключ и сохраняет его в локальной базе данных Asterisk (AstDB). Имя ключа secret хранится в семействе dundi. Значение ключа можно увидеть с помощью команды database show в консоли Asterisk. Семейство базы данных может быть переопределено опцией secretpath (путь к базе ключей).
Создание отображающихся контекстов
Файл dundi.conf определяет контексты DUNDi, отображаемые в контексты диалплана в файле extensions.conf. Контексты DUNDi - это способ описания особых и отдельных групп служб каталогов. Контексты раздела отображения указывают на контексты файла extensions.conf, управляющего номерами, информацию о которых вы предоставляете. При создании равноправного участника вы должны определить, по каким отображающимся контекстам он может выполнять поиск. Делается это с помощью выражения permit (у
<код_страны><код_города><префикс><номер> Например, полный североамериканский номер был бы представлен так:14165551212.
Все отображающиеся контексты DUNDi принимают форму
dundi_контекст => локальный_контекст,вес,технология,местоназначения[,опции]] Приведенная ниже конфигурация создает отображающийся контекст DUNDi, который мы будем использовать для предоставления группе DUNDi-test информации о наших локальных телефонных номерах. Обратите внимание, что все это должно располагаться в одной строке: dundi-test => dundi-local,0,IAX2,dundi:${SECRET}@toronto.example.com/ ${NUMBER},nounsolicited,nocomunsolicit,nopartial
В этом примере отображающийся контекст - это dundi-test. Он указывает на контекст dundi-local в файле extensions.conf (предоставляющий список телефонных номеров, звонки с которых он обрабатывает). Для номеров офисной АТС вес равен нулю (соединение выполняется напрямую). Вес номера, отличный от 0, свидетельствует о наличии нескольких переходов или путей на маршруте достижения места назначения. Это значение может быть полезно при получении нескольких ответов на один поиск; предпочтительным будет путь с меньшим весом. Если мы можем ответить на запрос поиска, наш ответ будет содержать метод, с помощью которого другой конец линии сможет соединиться с системой. Сюда относится используемая технология (такая, как IAX2, SIP, H.323 и т. д.), имя пользователя и пароль, по которым выполняется аутентификация, хост, на который следует отправлять ау- тентификационную информацию, и наконец добавочный номер. Asterisk предоставляет несколько сокращенных записей, что позволяет создавать «шаблон», по которому можно построить наши ответы. В шаблоне могут использоваться следующие переменные канала: ${SECRET}
Замещается шаблоном, хранящимся в локальной AstDB.
${NUMBER}
Запрашиваемый номер.
Обычно безопаснее статически конфигурировать имя хоста, I а не использовать переменную $ 11PADDR j. Переменная $ 11PADDR j иногда предоставляет адрес в частном пространстве 1Р-адре- сов, недоступном из Интернета.
Описание равноправных участников DUNDi
Равноправные участники DUNDi описываются в файле dundi.conf и идентифицируются уникальным MAC-адресом второго уровня интерфейса удаленной системы. Файл dundi.conf - это то место, где мы определяем, в каком контексте выполнять поиск для равноправных участников, запрашивающих поиск, и каких равноправных участников мы хотим использовать при выполнении поиска для конкретной сети:
[00:00:00:00:00:00] ; Удаленный офис
model = symmetric
host = montreal.example.com
inkey = montreal
outkey = toronto
include = dundi-test
permit = dundi-test
qualify = yes
dynamic=yes
Идентификатор удаленного равноправного участника (MAC-адрес) заключается в квадратные скобки ([]). inkey и outkey - это пара ключей (открытый и закрытый), используемых для аутентификации. Пары ключей генерирует сценарий astgenkey, располагающийся в подпапке ./asterisk/contrib/scripts/ папки исходного кода. Не забывайте использовать флаг -n, чтобы не приходилось создавать пароли при каждом запуске Asterisk: