Джим Меггелен - Asterisk™: будущее телефонии Второе издание
Раздел [general] файла dundi.conf содержит параметры, относящиеся к общим вопросам работы клиента и сервера DUNDi:
; конфигурационный файл DUNDi
[general]
department=IT
organization= toronto.example.com
locality=Toronto
stateprov=ON
country=CA
[email protected] 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 (у каждого равноправного участника может быть несколько выражений 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:
# cd /var/lib/asterisk/keys
# /usr/src/asterisk/contrib/scripts/astgenkey -n toronto Полученные в результате ключи, toronto.pub и toronto.key, будут помещены в папку /var/lib/asterisk/keys/. Файл toronto.pub - это открытый ключ, который должен быть отправлен веб-серверу, чтобы он был доступен всем участникам, с которым вы желаете установить одноранговую связь. При установлении одноранговой связи вы можете передать равноправным участникам открытый ключ, доступный по протоколу HTTP, который они могут поместить в свои папки /var/lib/ asterisk/keys/.
${IPADDR}
IP-адрес для соединения.
После загрузки ключей необходимо повторно загрузить модули res_ crypto.so и pbx_dundi.so в Asterisk:
*CLI> module reload res_crypto.so
-- Reloading module 'res_crypto.so' (Cryptographic Digital Signatures)
-- Loaded PRIVATE key 'toronto'
-- Loaded PUBLIC key 'toronto'
*CLI> module reload pbx_dundi.so
-- Reloading module 'pbx_dundi.so' (Distributed Universal Number Discovery (DUNDi))
== Parsing '/etc/asterisk/dundi.conf': Found Затем в файле iax.conf создаем пользователя dundi, чтобы обеспечить возможность соединения с вашей системой Asterisk. После аутентификации вызова запрашиваемый добавочный номер передается в контекст dundi-local файла extensions.conf, где выполняется его обработка.
Обеспечение возможности удаленных соединений
Вот описание канала типа user для пользователя dundi:
[dundi] type=user
dbsecret=dundi/secret
context=dundi-local
disallow=all
allow=ulaw
allow=g726
Вместо использования статического пароля Asterisk повторно создает пароль каждые 3600 с (1 ч). Это значение сохраняется в /dundi/secret базы данных Asterisk и предоставляется посредством переменной $ {SECRET}, описанной в отображающемся контексте в файле dundi.conf. Увидеть текущие ключи для всех равноправных участников, включая свои локальные открытый и закрытый ключи, можно, выполнив команду show keys в интерфейсе командной строки Asterisk.
Запись context=dundi-local определяет контекст в extensions.conf, в который направляются прошедшие авторизацию вызывающие абоненты. Оттуда мы можем обрабатывать звонок, точно так же как делали бы это в диалплане любого другого входящего соединений.
Конфигурация диалплана
Файл extensions.conf определяет, информацию о каких номерах вы предоставляете и что делаете с вызовами, адресованными им. Контекст dundi-local выполняет две задачи:
• Управляет номерами, информацию о которых мы предоставляем. Они указаны в отображающемся контексте dundi в файле dundi.conf.
• Определяет то, что должно быть сделано с вызовом, указанным в описании пользователя dundi в iax.conf.
Для предоставления информации о диапазонах номеров и управления входящими вызовами используется мощная возможность сопоставления с шаблонами, доступная в диалплане. В следующем диалплане предоставляется информация только о номере +1-416-555-1212, но так же просто можно применить сопоставление с шаблоном для предоставления информации о диапазоне номеров или добавочных номеров: [dundi-local]