Конфигурация пользовательских устройств
Я не всегда знаю, о чем говорю,
но я знаю, что я прав.
—Мухаммед Али
В этой главе мы рассмотрим пользовательские устройства, которые вы можете подключить к Asterisk; как правило это будут VoIP-телефоны. Настройка канала в Asterisk для подключения устройства относительно проста, но вам также необходимо настроить само устройство, чтобы оно знало, куда отправлять свои вызовы.1 Другими словами, для настройки устройства необходимо выполнить две отдельные задачи с Asterisk: 1) сообщить Asterisk об устройстве и 2) сообщить устройству о Asterisk.
Некоторые мысли о протоколе SIP
Протокол инициации сеанса (SIP) является одноранговым протоколом, и, хотя обычно существует настройка, в которой конечные точки действуют как клиенты, а какой-то шлюз действует как сервер, сам протокол думает в терминах одноранговых протоколов, отношениями пир-к-пиру. Это означает, что SIP-телефон вполне способен осуществлять прямое подключение к другому SIP-телефону без промежуточной АТС.
Реальность такова, что большинство транзакций SIP происходят через какой-то сервер, а в случае с Asterisk, как правило, АТС оказывается посередине, перекрывая все соединения. Когда SIP-вызов выполняется с телефона на другой телефон через Asterisk, на самом деле происходит два вызова: звонок от исходного аппарата до Asterisk и другой отдельный вызов от Asterisk к целевому комплекту (этот второй этап вызова может даже использовать не SIP). Asterisk соединяет их вместе.
Использование SIP-телефона с Asterisk означает, что вы хотите настроить SIP-телефон для совершения всех своих вызовов через Asterisk, даже если устройство может напрямую подключиться к другой конечной точке SIP без сервера Asterisk. Телефон будет рассматривать Asterisk как его прокси-сервер (хотя Asterisk фактически является Back to Back User Agent или B2BUA), и будет искать Asterisk для принятия решений о маршрутизации для всех вызовов.
В то время как большинство устройств будут иметь веб-интерфейс для определения параметров, если вы создаете более одного или двух телефонов в продакшене, мы рекомендуем использовать процесс конфигурации на основе сервера, в котором в наборе должно быть указано только местоположение сервера конфигурации. Аппарат будет подключаться к серверу, идентифицировать себя и загружать настроенные файлы, которые определяют требуемые параметры для этого телефона (очень просто использовать MAC-адрес телефона в качестве идентификатора для именования каждого уникального конфигурационного файла). Например, файлы конфигурации могут быть в формате XML, расположенном на сервере HTTPS. Точный процесс загрузки, протокол и синтаксис этих файлов будут отличаться от производителя к производителю (большинство производителей предлагают более одного способа создания файлов конфигурации). Существуют десятки разных производителей SIP-телефонов, каждый из которых имеет несколько иной способ обработки серверной конфигурации, и попытаться охватить все из них (и постоянно обновлять процессы) просто невозможно. Большинство производителей предлагают свободно загружаемые и подробные руководства по настройке своих телефонов, поэтому, если вы знакомы с настройкой Linux и проведете немного исследований, то найдете множество информации по этому вопросу в Интернете. По нашему опыту, документация, предоставляемая каждым производителем, превосходна и будет представлять самую последнюю информацию об инициализации своих устройств.
Это книга об Asterisk, и в этой главе мы сосредоточимся на конфигурации аппаратов с точки зрения Asterisk.
Концепции именования телефонов
Прежде чем мы начнем с настройки Asterisk для наших телефонов, мы предложим некоторые рекомендации по наименованию телефонов: абстрагирование понятий пользователей, внутренних номеров и телефонов.
В Asterisk вся система заботится о названии канала. В действительности нет понятия пользователя вообще2, и внутренние номера — это не что иное, как триггеры, которые инициируют последовательность инструкций. Например, вы можете написать кусок диалплана, указав, что при запросе внутреннего номера 100 он должен позвонить телефону на моем столе. Тем не менее, номер 100 может так же легко вызвать окно голосовой почты компании, воспроизвести приглашение, присоединиться к конференц-залу или любое другое действие. Мы даже можем указать, что номер 100 должен звонить на устройство на моем столе с понедельника по пятницу между 9:00 и 17:00, но в остальное время на устройство на чужом столе. И наоборот, когда звонок совершается с устройства в рабочее время, идентификатор вызывающего абонента может показывать дневной номер, а оставшееся время может отображать номер нерабочего времени (многие стойки регистрации становятся столами безопасности ночью).
Внутренние номера Asterisk
Концепция внутренних номеров в Asterisk имеет решающее значение. В большинстве АТС внутр.номер — это номер, который вы набираете, чтобы позвонить по телефону или услуге. В Asterisk внутр.номер является именем группы инструкций в диалплане. Подумайте о внутр.номере Asterisk как имени сценария, и вы на правильном пути. Да, внутр.номер Asterisk может быть числом (например 100), которое звонит на телефон, но так же легко может быть имя (например, voicemail), которое выполняет последовательность приложений диалплана.
Мы продолжим работу над внутр.номерами Asterisk более подробно в этой книге, но прежде чем мы это сделаем, мы хотим настроить несколько телефонов.
Абстракция между именем внутр.номера и тем что он делает является мощной концепцией в Asterisk, поскольку расширение 100 может выполнять множество функций в зависимости от любого числа переменных, которые запрограммированы в системе. Это особенно актуально в контексте таких функций, как hot-desking.
Hot-desking — это функция, которая позволяет кому-то войти в устройство и получать вызовы на этом устройстве. Допустим, у нас есть три агента по продажам, которые обычно работают за пределами офиса, но проводят несколько дней в офисе, чтобы оформить документы. Поскольку они вряд ли будут находиться на месте одновременно, вместо того, чтобы иметь отдельный телефон для каждого из этих трех агентов по продажам, они могут разделить один офисный телефон (или в более крупном масштабе, дюжина человек может делить пул, скажем, в три телефона). Этот сценарий иллюстрирует удобство (и необходимость), позволяющее системе отделить концепцию пользователя и внутреннего номера от физического телефона.
Итак, каковы примеры плохих имен для телефонных устройств? Что-то вроде имени человека, такого как [SimonLeBon], было бы плохим именем для телефона, так как телефон также может использоваться Джоан Джетт и Рик Эстли. Те же рассуждения можно применить к тому, почему вы не хотите называть телефон на основе добавочного номера: имя телефона [100] было бы плохим выбором, поскольку вы можете захотеть повторно завести устройство для номера 160 в будущем или может использоваться несколькими людьми с разными номерами в решении с hot-desking. Использование числовых имен учетных записей также очень плохо с точки зрения безопасности и более подробно рассматривается в Главе 26.
Популярным способом именования телефонов является использование MAC-адреса устройства. Это уникальный идентификатор, характерный для телефона, который закреплен за ним, где он находится, и напрямую не связан с пользователем, работающим с телефоном, или с добавочным номером, который в настоящее время привязан к аппарату.
У некоторых корпораций есть наклейки, которые они размещают на своем оборудовании со штрих-кодом и другой информацией, которая позволяет им хранить запас готового оборудования; эти уникальные коды также будут приемлемым выбором для использования в именовании телефонов, поскольку они не обеспечивают никакого логического отношения к конкретному человеку, но предоставляют конкретную информацию о самих устройствах.
Выбор заключается в том, как вы хотите назвать свои телефоны, но мы в первую очередь хотим отвлечь любую концепцию телефона, принадлежащего человеку, или даже его местоположение в сети, поскольку эти концепции находятся за пределами Asterisk и могут измениться в любое время.
В этой книге вы увидите, что мы используем имена телефонов, которые выглядят как MAC-адреса (например, 0000FFFF0001 и 0000FFFF0002), чтобы различать устройства. Вам понадобятся названия телефонов, которые соответствуют используемому оборудованию (или другая строка, которая уникальна для регистрируемого устройства).
В качестве окончательного утверждения мы должны четко указать что то, что мы предлагаем в отношении имен устройств, не является техническим требованием. Вы можете называть свои устройства как угодно, если ваши имена отвечают требованиям назначений имен Asterisk для устройств (оставаясь буквенно-цифровыми без пробелов, то все будет хорошо).
Телефоны, софтфоны и телефонные адаптеры
Существует три типа конечных точек, которые вы обычно предоставляете своим пользователям, которые могут служить в качестве телефона. Они в большинстве случаев называются телефонами, программными телефонами (софтвонами) и аналоговыми терминальными адаптерами (Analog Terminal Adapters — ATA).
Аппаратный телефон — это физическое устройство. Он похож на офисный телефон: у него есть телефонная трубка, кнопки с цифрами, экран и т. д. Он подключается непосредственно к сети, и это то, о чем люди говорят, когда говорят о VoIP-телефоне (или SIP-телефоне).
Программный телефон (софтфон) — это программное приложение, которое работает на ноутбуке, настольном компьютере, смартфоне или другом вычислительном устройстве. Звук должен проходить через звуковую систему устройства, поэтому вам нужна гарнитура, которая будет хорошо работать с приложениями телефонии. Совсем недавно приложения для софтфона были написаны для смартфонов, которые позволяют вам подключаться к сетям, отличным от сети сотовой связи. Интерфейс софтфона часто оформлен так, чтобы выглядеть как физический телефон, но это необязательно.
ATA предназначен для использования традиционными аналоговыми телефонами (и другими аналоговыми устройствами, такими как факсимильные аппараты, беспроводные телефоны, пейджинговые усилители и т.д.) для подключения к сети SIP3, и обычно это коробка размером с сэндвич бутерброд, содержащая RJ11 разъем для телефона (обычно называемый внешней электронной станцией (Foreign eXchange Station) или FXS-портом), разъем RJ45 для сети и разъем питания. Некоторые ATA могут поддерживать более одного телефона. Другие ATA могут иметь расширенные функции, такие как брандмауэр или порт Foreign eXchange Office (FXO) (аналоговый порт, который может подключаться к схеме ТфОП — PSTN).
У телефонов есть преимущество в том, что, как правило, они имеют хорошие акустические свойства для голосовой связи. Любой телефон хорошего качества спроектирован для восприятия частот человеческого голоса, фильтрации нежелательных фоновых шумов и нормализации результирующего сигнала. Люди будут пользоваться телефонами до тех пор, пока существует телефонная сеть, и мы склонны любить то, что знакомо, поэтому наличие устройства, которое сочетается с Asterisk с использованием знакомого интерфейса, будет привлекательным для многих пользователей. Кроме того, для аппаратного телефона не требуется компьютер.
Недостатки аппаратных телефонов заключаются в том, что они не являются мобильными и как правило дороги по сравнению со многими качественными программными телефонами, имеющимися на рынке сегодня, которые доступны бесплатно. Кроме того, лишний беспорядок на вашем столе может быть нежелательным, если у вас ограниченное рабочее пространство, и если вы много передвигаетесь и, как правило, не находитесь в одном и том же месте, ваш телефон вряд ли подходит вашим потребностям (хотя бы по одному аппарату на каждое место, в котором вы часто бываете, может быть правильным решением).
Софтфоны решают проблему переносимости, установкой на устройство, которое, скорее всего, уже перемещается вместе с вами, например, ваш ноутбук или смартфон. Кроме того, их минимальная стоимость (как правило, бесплатно или около 30 долларов США за полнофункциональную) привлекательна. Поскольку многие программные телефоны бесплатны, вполне вероятно, что первым телефоном, который вы подключите к Asterisk, станет программный телефон. Кроме того, поскольку софтфоны — это просто программное обеспечение, их легко установить и обновить, и у них обычно есть иные функции, которые используют остальные периферийные устройства, такие как веб-камера для видеовызовов или возможность загружать файлы со своего рабочего стола для отправки факсов.
Некоторые из недостатков софтфонов — это не всегда включенное устройство, необходимость надевать гарнитуру каждый раз когда вы звоните, и тот факт, что многие ПК в течение дня будут заняты другими делами в зависимости от того, чем пользователь будет заниматься, что может привести к тому, что софтфон перестанет работать в то время как некоторые фоновые задачи загружают CPU.
Преимущество ATA заключается в том, что вы можете подключать аналоговые устройства4 к вашей сети SIP, такие как беспроводные телефоны (которые во многих случаях превосходят более продвинутые типы радиотелефонов5), пейджинговые усилители и звонки. ATA также иногда можно использовать для подключения к старой проводке, где сетевое соединение может работать неправильно.
Основным недостатком ATA является то, что вы не получите те же функции через аналоговую линию, как на SIP-телефоне. Это технология, которой больше века.
В Asterisk нам необязательно делать выбор между софтфоном, аппаратным телефоном или ATA; вполне возможно и довольно просто иметь один добавочный номер, который одновременно вызывает несколько устройств, такие как настольный телефон, софтфон на ноутбуке, мобильный телефон и, возможно, стробоскоп на задней стороне фабрики (где слишком много шума для прослушивания звонка).
Asterisk с радостью позволит вам взаимодействовать с внешним миром способами, о которых едва ли мечтали всего несколько лет назад. Поскольку мы видим больше унификаций коммуникационных приложений с популярными социальными сетями, такими сообществами, как Skype, и больше внимания к сетевым сервисам, таким какие предоставляет Google, гибкость и популярность программного обеспечения конечного оборудования будут продолжать расти. Размывание линий между голосом и приложениями постоянно развивается, а софтфоны имеют хорошие возможности для быстрого реагирования на эти изменения.
Тем не менее, нам все равно нравится настольный телефон.
Настройка Asterisk
В этом разделе мы расскажем, как создать файлы конфигурации sip.conf и iax.conf в каталоге /etc/asterisk, которые используются для определения параметров, с помощью которых устройства SIP и IAX2 могут связываться с вашей системой.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-13.png)
Asterisk позволяет устройствам, использующим множество разных протоколов, общаться с ним (и, следовательно, друг с другом). Однако протоколы SIP и IAX2 являются наиболее популярными и зрелыми модулями VoIP, поэтому мы сосредоточим наше внимание на них. Для вашей первой сборки Asterisk вам, вероятно, лучше не беспокоиться о других протоколах (таких как Skinny/SCCP, Unistim, H.323 и MGCP). Если вы заинтересованы в одном из этих протоколов, сосредоточьтесь на том, чтобы сначала работать с SIP и IAX2. Конфигурация для других протоколов аналогична, и образцы конфигурационных файлов полны информации и примеров, поэтому, как только у вас есть основы, другие протоколы будут относительно просты в работе.
Файлы конфигурации канала, такие как sip.conf и iax.conf, содержат информацию о конфигурации, относящуюся к этому канальному драйверу (например, chan_iax2.so или chan_sip.so), а также параметры и учетные данные, характерные для телефонных устройств, которые вы хотите подключить к Asterisk через этот тип технологии.
Общая информация о драйвере канала содержится в верхней части файла конфигурации в разделе [general]. Все имена разделов заключены в квадратные скобки, включая имена устройств. Все, что следует за именем раздела (или определением устройства, которое для наших целей является, по сути, одним и тем же), применяется к этому разделу. Раздел [general] также может содержать информацию для определения значений по умолчанию для конфигурации устройств. Всё из раздела [general] можно переопределить в разделе, посвященном каждому устройству (или шаблону, назначенному этому разделу). Asterisk также поставляется с жесткими настройками по умолчанию, поэтому, хотя некоторые параметры являются обязательными, многие другие можно просто игнорировать если вы довольны настройками по умолчанию.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-14.png)
Asterisk назначит параметры, используя следующий рейтинг:
- Конкретный раздел для соответствующего канала
- Шаблон для раздела
- Раздел [general]
- Жестко заданные значения по умолчанию
Это означает, что даже если вы не указали значение для определенного параметра в разделе канала, ваш канал будет по-прежнему иметь настройку для этого параметра. Если вы не уверены, то всегда можете установить параметр явно в разделе файла конфигурации, который имеет дело с этим конкретным каналом (или в соответствующем шаблоне). Учитывая это сказанное, многие из параметров по умолчанию — это параметры, которые не нужно менять, поэтому не беспокойтесь слишком о параметрах, которые не соответствуют вашим потребностям; значения по умолчанию должны быть точными.
Эта концепция должна иметь больше смысла, когда вы будете читать дальше.
Как файлы конфигурации работают с диалпланом
Хотя мы еще не обсуждали диалпланы Asterisk, полезно иметь возможность визуализировать связь между файлами конфигурации канала (sip.conf, iax.conf) и диалпланом (extensions.conf). Диалплан является сердцем системы Asterisk: он контролирует, как логика вызовов применяется к любому соединению с любого канала, например, что происходит, когда устройство набирает номер 101 или как проходит входящий вызов от внешнего провайдера. Как основной файл конфигурации канала, так и файл extensions.conf играет роль в большинстве вызовов, направляемых через систему. На Рисунке 5-1 отображено графическое представление отношений между файлами sip.conf и extensions.conf.6
Когда вызов поступает в Asterisk, идентификатор входящего вызова сопоставляется в файле конфигурации канала для используемого протокола (например, sip.conf). Файл конфигурации канала также обрабатывает аутентификацию и определяет, где этот канал войдет в диалплан.
Как только Asterisk определит, как обрабатывать канал, он передаст управление вызовом в правильный контекст в диалплане. Параметр context в файле конфигурации канала сообщает каналу, где он будет входить в диалплан (который содержит всю информацию о том, как обрабатывать и маршрутизировать вызов)
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_7-13.png)
И наоборот, если диалплан запрограммирован для набора другого устройства (в приведенном выше примере это произойдет в том месте, где номер 101 запускает приложение Dial()), запрос на набор телефонного устройства 0000FFFF0002 будет использовать файл конфигурации канала чтобы определить, как передать вызов из диалплана на целевой телефон в сети (включая такие данные, как аутентификация, кодек и т.д.). Пункт назначения не обязательно должен быть телефоном. Это может быть любой тип канала, о котором знает Asterisk.
Ключевым моментом для запоминания является то, что файлы конфигурации канала управляют не только тем, как вызовы входят в систему, но и как они покидают систему. Например, если один из аппаратов вызывает другой, файл конфигурации канала используется не только для передачи вызова в диалплан, но и для направления вызова из диалплана в пункт назначения.
sip.conf
Модуль канала SIP,7 возможно, является самым зрелым и многофункциональным из всех канальных модулей в Asterisk. Это связано с огромной популярностью протокола SIP, который занял сектор VoIP/телеком индустрии и реализован в тысячах устройств и АТС. Если вы просмотрите файл sip.conf.sample в подкаталоге ./configs исходников Asterisk, вы увидите множество доступных вариантов. К счастью, параметры по умолчанию, как правило содержат все, что вам нужно для начала работы, и поэтому вы можете создать очень простой файл конфигурации, который позволит большинству стандартных SIP-телефонов подключаться к Asterisk.
Первое, что вам нужно сделать, это создать файл конфигурации в каталоге /etc/asterisk с именем sip.conf.
Вставьте или введите следующую информацию в файл:
[general]
context=unauthenticated ; контекст по умолчанию для входящих вызовов
allowguest=no ; отключаем неаутентифицированные (гостевые) вызовы
srvlookup=no ; отключить поиск DNS SRV на исходящих вызовах
; (если у вас нет надежного подключения к DNS,
; в ином случае — yes)
udpbindaddr=0.0.0.0 ; прослушивать UDP запросы на всех интерфейсах
tcpenable=no ; отключить поддержку TCP
[office-phone](!) ; создаем шаблон для ваших устройств
type=friend ; драйвер канала будет искать сперва имя пользователя,
; а затем IP
context=LocalSets ; здесь вызовы с устройства входят в диалплан
host=dynamic ; устройства будут регистрироваться в Астериск
nat=force_rport,comedia ; предположим устройство находится за NAT
; *** NAT — это преобразование сетевых адресов,
; которое позволяет нескольким внутренним устройствам
; совместно использовать внешний IP-адрес.
dtmfmode=auto ; принимать тоновые сигналы от устройств, согласовывать
; автоматически
disallow=all ; установите какие голосовые кодеки это устройство примет
; или предложит
allow=g722 ; аудио кодеки, которые примет или запросит устройство
allow=ulaw ; в порядке приоритета
allow=alaw
; определим имя устройства и используем office-phone как шаблон
[0000FFFF0001](office-phone)
secret=4VQ96sg6ROc ; уникальный пароль для этого устройства –
; НЕ ИСПОЛЬЗУЙТЕ ПАРОЛЬ, УКАЗАННЫЙ В ПРИМЕРЕ!
; определим другое имя устройства с использованием того же шаблона
[0000FFFF0002](office-phone)
secret=sKAw7GCTtcA ; уникальный пароль для этого устройства –
; НЕ ИСПОЛЬЗУЙТЕ ПАРОЛЬ, УКАЗАННЫЙ В ПРИМЕРЕ!
Откройте файл sip.conf, который вы только что создали, и мы рассмотрим каждый элемент.
Мы создали четыре раздела, первый из которых — раздел [general]. Это стандартный раздел, который отображается в верхней части файла конфигурации для всех канальных модулей и всегда должен быть назван таким образом. Раздел [general] содержит общие параметры настройки того, как этот протокол относится к вашей системе, и может также использоваться для определения параметров по умолчанию.
Например, мы определили контекст по умолчанию как unauthenticated, чтобы убедиться, что мы явно объявили, где неаутентифицированные гостевые звонки будут входить в диалплан (скорее иметь больше шансов). Мы назвали его unauthenticated чтобы было очевидно, что вызовам, обработанным в этом контексте, не доверяют и, следовательно, они не могут выполнять такие действия, как выполнение исходящих вызовов в PSTN (что потенциально может стоить денег или представлять кражу личных данных). Вы должны знать, что мы могли бы использовать любое имя, которое хотели бы, а также, чтобы в extensions.conf был указан идентичный контекст, чтобы определить поток вызовов для неаутентифицированных вызовов.
Следующий параметр — allowguest, который мы отключили, так как в настоящее время мы не хотим принимать какие-либо неаутентифицированные вызовы. Имейте в виду, что для некоторых каналов вы действительно можете принимать неаутентифицированные вызовы. Обычное использование разрешения неавторизованных вызовов для компаний, которые разрешают набор номера с помощью унифицированных идентификаторов ресурсов (URI), например адресов электронной почты. Если мы хотим разрешить клиентам звонить нам со своих телефонов без проверки подлинности, мы могли бы разрешить гостевые вызовы и обрабатывать их в контексте unauthenticated, для непрошедших проверку подлинности, определенным предыдущим вариантом.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-15.png)
Вы можете задаться вопросом, почему вы, возможно, захотите разрешить несанкционированные звонки. Причина в том, что если вы публикуете свой SIP URI на своих визитных карточках (например, sip:[email protected]), вызовы этого URI будут неудачны, если ваш контекст для неаутентифицированных просто сбрасывает вызов. Вместо этого вы хотите, чтобы ваш неаутентифицированный контекст помещал входящие вызовы в контролируемую среду. Возможно, вы захотите разрешить вызовы, так как это позволит людям звонить вам, но вы не можете доверять этим вызовам (с точки зрения предоставления им доступа к системным ресурсам, таким как исходящие линии). Концепция здесь похожа на сетевую DMZ.
Вся концепция безопасности и доверия в сети VoIP — это то, что может стать довольно сложным. Спамеры уже усердно работают над этой технологией, и вам нужно знать концепцию. Мы рассмотрим это более подробно позже в книге, в Главах 7 и 26.
Параметр srvlookup используется для указания Asterisk выполнять поиск с помощью записи SRV DNS, которая обычно используется для исходящих подключений к поставщикам услуг. Если DNS недоступен для вашей системы, то он должен быть установлен на no8. Мы поговорим больше об Asterisk и DNS в Главе 12.
Параметр udpbindaddr9 принимает значение IP-адреса или 0.0.0.0, чтобы сообщить Asterisk, какой сетевой интерфейс он должен прослушивать для запросов, переносимых сетевым транспортным протоколом UDP (который является протоколом фактически передающим голосовые каналы при SIP-вызове). Определив 0.0.0.0, мы инструктируем драйвер канала прослушивать все доступные интерфейсы. В качестве альтернативы, мы могли бы ограничить VoIP-соединения для этого протокола одним интерфейсом, указав IP-адрес определенного сетевого интерфейса в нашей системе.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_1-14.png)
В настоящее время в Asterisk параметры udpbindaddr и tcpbindaddr — это предложение всё или ничего. Другими словами, если у вас есть три сетевых адаптера в вашей системе, вы не можете ограничить VoIP-трафик двумя из них: это либо один, либо все.
IPv6 в sip.conf
Asterisk поддерживает IPv6 для трафика SIP и RTP. Все параметры конфигурации в файле /etc/asterisk/sip.conf, относящиеся к IP-адресам, могут принимать либо IPv4 либо IPv6-адрес. В качестве примера рассмотрим различные значения параметра udpbindaddr:
Значение udpbindaddr | Описание |
---|---|
192.168.100.50 | Привязать к определенному адресу IPv4 |
2001:db8::1 | Привязать к определенному адресу IPv6 |
0.0.0.0 | Привязка ко всем адресам IPv4 в системе |
:: | Привязка ко всем адресам IPv4 и IPv6 |
Параметр tcpenable разрешает принимать запросы через сетевой протокол TCP. На данный момент мы отключили его, так как метод UDP в настоящее время более зрелый (и более популярный), и мы пытаемся устранить как можно больше барьеров. Тем не менее, не стесняйтесь тестировать поддержку TCP, как только вы освоите настройку своих устройств.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-16.png)
Существуют также параметры tlsenable и tlsbindaddr для включения SIP через Transport Layer Security (TLS или зашифрованного SIP). Мы рассмотрим конфигурацию SIP с TLS в Главе 7.
Следующий раздел, который мы определили, является шаблоном, который мы выбрали и назвали его [office-phone](!). Мы создали его как шаблон, чтобы использовать значения внутри него для всех наших устройств.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-17.png)
Следущий за именем раздела (!) в файле конфигурации указывает Asterisk что этот раздел рассматривается как шаблон. Делая это, мы устраняем необходимость повторного добавления и изменения параметров конфигурации для каждого устройства, которое мы выбираем для определения. Шаблоны чрезвычайно полезны и доступны во всех конфигурационных файлах Asterisk. Если вы хотите что-то изменить для отдельного устройства, что ранее было определено в шаблоне для этого устройства, вы можете сделать это под заголовком раздела только для этого устройства и переопределить то, что было определено шаблоном. Нет необходимости использовать шаблоны, но они чрезвычайно полезны, и мы используем их широко.
В шаблоне [office-phone](!) мы определили несколько параметров, необходимых для проверки подлинности и управления вызовами устройств, использующих этот шаблон. Первый параметр, который мы настроили, — это type, который мы установили как friend. Это говорит о том, что драйвер канала пытается сначала совместить имя, а затем IP-адрес.
Согласование конфигурации SIP и опции type
В приведенном примере конфигурация для телефонов SIP устанавливается type=friend. Существуют два других типа определений, которые вы можете использовать: user и peer. Различия между ними связаны с тем, как Asterisk интерпретирует входящие запросы SIP. Правила приведены в этой таблице:
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_8-13.png)
Когда запрос от телефона получен и аутентифицирован Asterisk, запрошенный добавочный номер обрабатывается диалпланом в контексте, определенном в конфигурации устройства; в нашем случае — контекст с именем LocalSets. Другими словами, именно так мы определяем, как канал входит в диалплан.
Параметр host определяет IP-адрес конечной точки этого канала (необходимо, когда мы хотим отправить ему вызов). Если мы определим значение как dynamic, мы дадим Asterisk знать, что телефон сообщит нам, где он находится в сети, вместо того, чтобы определить его местоположение статически10. Если бы мы хотели определить адрес статически, то могли бы заменить dynamic IP-адресом, как например 192.168.128.30. Имейте в виду, что если вы определяете статический адрес для канала SIP, соединения на этом канале больше не будут работать, если адрес устройства изменится. Преимущество определения статического IP-адреса заключается в том, что устройству не нужно регистрироваться, чтобы Asterisk знал, где он находится.
Строго говоря, параметр nat необходим только тогда, когда удаленное устройство (телефон) находится за брандмауэром с трансляцией сетевых адресов (NAT). Это важно, потому что протокол SIP включает в себя IP-адреса в сообщениях. Если телефон находится в частной сети, он может поместить в сообщения SIP частные адреса, которые часто бесполезны.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-18.png)
Более подробную информацию о настройке Asterisk для взаимодействия с устройствами за NAT и Asterisk, расположенными за NAT, находится в разделе «Как справиться c преобразованием сетевых адресов (NAT)» в Главе 7.
Опция dtmfmode используется для определения формата DTMF (тонального) Asterisk, который должен быть отправлен по телефону. Четыре варианта: info, inband, rfc2833 и auto. Значение info означает использовать метод SIP INFO, inband — для внутриполосных аудио тонов, а rfc2833 — для внеполосного метода, определенного этим RFC. Использование auto позволяет Asterisk автоматически определять, какой режим DTMF использовать (он предпочитает rfc2833, если тот доступен).
Последние два параметра, disallow и allow (sip.conf), используются для управления кодеками, какие принимаются и предлагаются на телефоне. Определив disallow=all вначале, мы сообщаем Asterisk об изменении любых ранее установленных определенных кодеках в разделе [general] (или внутренних значениях по умолчанию); далее мы явно объявляем, какие кодеки мы будем принимать (в порядке, который мы предпочитаем). В нашем примере мы включили как ulaw, так и alaw, причем наиболее предпочтительным является ulaw (если вы находитесь за пределами Канады или США, вы, скорее всего, захотите сначала объявить alaw).
Теперь, когда мы закончили с нашим шаблоном, мы можем определить имена наших устройств и, используя шаблон office-phone, значительно упростить объем деталей, требуемый для каждого раздела устройства. Имя устройства определено в квадратных скобках, а шаблон, который будет применяться, определяется в круглых скобках, следующих за именем устройства. Мы можем добавить дополнительные опции к имени устройства, указав их ниже имени устройства:
[0000FFFF0003](office-phone) ; шаблон должен быть на той же строке и не
; содержать пробелов
secret=o3dbMtrRV6U ; НЕ ИСПОЛЬЗУЙТЕ ПАРОЛЬ ИЗ ЭТОГО ПРИМЕРА!
allow=gsm
Пароль для устройства определяется параметром secret. Протокол SIP вполне позволяет разрешить практически любой пароль (в том числе никакой); однако, следует отметить, что довольно часто неприятные ребята запускают сценарии фишинга, которые ищут открытые учетные записи VoIP с простыми именами устройств и небезопасными паролями (например, имя устройства 100 с паролем 1234). Используя необычное имя устройства, такое как MAC-адрес, и пароль, который содержит строку, замедляющую атаку перебором, мы можем значительно снизить риск для нашей системы, если нам нужно будет открывать ее для внешнего мира.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_1-15.png)
Не используйте пароль, который мы определили в этом примере. Эта книга будет доступна в Интернете и может быть загружена кем угодно, и этот конкретный пароль почти наверняка станет одним из первых пропусков, добавленных в список, используемый скриптами фишинга VoIP, при атаках паролей с перебором по словарю. Если ваши SIP-порты открыты в Интернете и вы используете простые пароли, будьте уверены, что вас в конечном итоге выманят.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-19.png)
Вы можете создать безопасный пароль, используя один из нескольких генераторов паролей, доступных в Интернете и в вашей операционной системе. Вот простой скрипт, который вы можете запустить на консоли, чтобы создать такой:
$ dd if=/dev/random count=1 bs=8 2>/dev/null | base64 | sed -e ‘s/=*$//’
Когда модуль SIP считывает файл конфигурации sip.conf, он будет интерпретировать каждый раздел, включая шаблон. Поэтому предыдущий пример канала будет настроен так, как если бы он был записан таким образом:
[0000FFFF0003]
type=friend
context=LocalSets
host=dynamic
nat=force_rport,comedia
dtmfmode=auto
disallow=all
allow=g722
allow=ulaw
allow=alaw
; Вышеуказанные параметры взяты из шаблона
secret=o3dbMtrRV6U ; Переопределяет пароль из шаблона
allow=gsm ; Добавляем gsm в список разрешенных кодеков
;Остальные параметры были определены только для этого канала.
Обратите внимание: если вы укажете опцию, которая также была определена в шаблоне, модуль дважды увидит эту опцию. Для большинства параметров значение в секции канала будет переопределять значение, полученное из шаблона, однако для некоторых, например type, allow и disallow может быть иначе.
Фаерволл и преобразование сетевых адресов (NAT)
Телефонный вызов с использованием протокола SIP фактически состоит из трех отдельных сетевых подключений: 1) SIP-соединение (сигнализация для вызова), 2) исходящий аудиопоток (RTP), 3) входящий аудиопоток (RTP).
Если межсетевой экран между двумя концами соединения не распознает входящий поток RTP (т.е. не связывает его с SIP-соединением), то может его отбросить. Когда это произойдет, пользователи не смогут услышать одну из сторон телефонного разговора.
В «VoIP» в Главе 7 мы более подробно обсуждим эту концепцию.
Нахождение последовательного и надежного решения для этого — постоянная боль для сообщества SIP, учитывая множество различных типов брандмауэров и множество различных способов реализации протокола SIP (не только Asterisk, но и всех других SIP -блокируемых устройств и систем, используемых сегодня).
iax.conf
IAX211 — это протокол Inter-Asterisk eXchange, версия 2. IAX2 был разработан для упрощения процесса VoIP-вызовов через брандмауэры (путем передачи сигнализации и мультимедиа через одно и то же соединение) и для удобства прохождения сетей, в которых использовались устройства NAT (которые исторически были проблематичны для протокола SIP).
По мере развития Asterisk на протяжении многих лет, протокол IAX2 созрел. Информационный RFC (RFC 5456 — IAX: Inter-Asterisk eXchange Version 2) был опубликован в 2010 году. Однако IAX2 не стал популярным среди производителей аппаратного обеспечения, возможно, из-за относительной новизны IAX2 RFC, но, конечно, в значительной степени из-за того, что SIP является далеко идущим и самым признанным протоколом VoIP с точки зрения разумности (т.е. нетехнические люди чаще слышали о SIP, чем любом другом протоколе VoIP). Однако у IAX2 есть преимущества, которые стоит обсудить.
Одним из основных преимуществ IAX является однопортовое проникновение брандмауэра. Весь трафик, включая сигнализацию и аудиоданные, передается по одному порту UDP (по умолчанию, через порт 4569), что может значительно упростить настройку и устранение неполадок внешних подключений к Asterisk.12
Другим преимуществом IAX2 является возможность его транкинга, которая инкапсулирует пакеты для нескольких голосовых кадров в одну и ту же дейтаграмму с использованием одного заголовка IAX2. Преимущество этого заключается в уменьшении объема служебной информации пропускной способности, необходимой для отправки множества одновременных вызовов между двумя конечными точками. Объем пропускной способности, сохраненный с транкингом IAX2 при отправке только нескольких вызовов между локациями незначителен, но когда вы начинаете масштабирование до размеров десятков или сотен вызовов, экономия может быть существенной.
Пока нас интересует минимальная конфигурация, необходимая для того, чтобы наши конечные точки IAX2 говорили друг с другом, поэтому давайте рассмотрим, что нам нужно настроить в iax.conf для этого.
Так как IAX2 чаще используется для создания транков между системами Asterisk, мы будем приводить пример этого (а не пример использования IAX2 для пользовательских устройств). Если у вас есть пользовательское устройство IAX2 (например, софтфон), вы обнаружите, что знакомство с файлом sip.conf поможет вам настроить iax.conf для обработки внутренних номеров.
Во-первых, нам нужно создать наш файл iax.conf. Обратите внимание, что, поскольку в этом примере обсуждается IAX-транк, для его настройки вам понадобятся две системы Asterisk, каждая из которых имеет рабочий диалплан. На каждом конце вам понадобится соответствующий файл iax.conf. В каталоге конфигурации /etc/asterisk создайте файл с именем iax.conf и добавьте следующую конфигурационную информацию:
[general]
; не останавливаться на длительное время, если другая конечная точка не отвечает
autokill=yes
; отключить DNS SRV lookups для исходящих вызовов
srvlookup=no
; —————————————————
; шаблон для соединений офисов на основе IAX
[inter-office-trunk](!)
; Asterisk разрешает вызовы с и на этот телефон
type=friend
; контекст, с которого входящие запросы заходят в диалплан
context=LocalSets
delayreject=yes ; задержка отклонения аутентификации(ограничит атаки
; брутфорсом)
disallow=all ; сбросить все доступные голосовые кодеки
allow=ulaw ; предпочтительный кодек ulaw
allow=alaw ; но также разрешить alaw
; —————————————————
;определить транк до нашего первого местонахождения
[head-office](inter-office-trunk)
; безопасный пароль — это значит НЕ ИСПОЛЬЗУЙТЕ ЭТОТ!
secret=NuFuYhg4iHI
; Определите IP-адрес системы Астериск на другом конце этого соединения
host=[ip-адрес дальнего конца]
; —————————————————
; определите другой транк используя этот шаблон
[branch-office](inter-office-trunk)
; безопасный пароль — это значит НЕ ИСПОЛЬЗУЙТЕ ЭТОТ!
secret=o8XBEf2DfQI
; IP-адрес системы Астериск на другом конце
host=[ip-адрес другого конца]
В этом примере контекст LocalSets использовался для упрощения. В производственной среде вы, как правило, создаете отдельные контексты для работы с вашими транковыми устройствами. Это особенно важно для безопасности, так как вы всегда должны минимизировать риск несанкционированного вызова.
Перейдем к вариантам, которые мы добавили в этот файл, начиная сначала — с раздела [general]. Здесь мы определяем нашу конфигурацию по умолчанию, наши глобальные параметры и общую настройку драйвера канала. Здесь мы можем определить множество опций, и мы заставим вас проверить файл iax.conf.sample в каталоге configs ваших исходников Asterisk13, но поскольку мы ищем простую конфигурацию, мы собираемся разрешить использование многих параметров по умолчанию.
Следующий раздел, который мы определили, называется [inter-office-trunk](!), Который является шаблоном, содержащим параметры, общие для всех наших линий IAX.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-20.png)
Как упоминалось в предыдущем разделе, с пометкой (!) после имени раздела Asterisk будет рассматривать этот раздел как шаблон. Шаблоны полезны, поэтому используйте их(!).
Первый вариант, который мы настроили в нашем шаблоне, — это type. Мы определили type как friend, который сообщает Asterisk, что мы планируем как устанавливать вызовы с сетью, так и получать запросы (вызовы) из сети.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-21.png)
Остальные два типа являются user и peer. В IAX2 friend представляет собой комбинацию из обоих как user, так и peer, что является обычным явлением, поскольку межсетевые транки обычно имеют вызовы, идущие в обоих направлениях. Мы могли бы альтернативно определить два отдельных раздела с тем же именем с типами user и peer, а затем определить только необходимую информацию для каждого из этих типов; или если мы планируем только совершать вызовы или принимать вызовы с помощью раздела (например, в случае поставщика услуг входящего или исходящего доступа), мы будем определять его как user или peer. Однако, в подавляющем большинстве случаев, просто использование типа friend является наиболее логичным выбором.
Обратите внимание на разницу между значением параметра типа в iax.conf и sip.conf (см. врезку «Согласование конфигурации SIP и опции type» на стр. 97). В iax.conf смысл намного проще: он имеет отношение только к направлениям телефонных звонков.
Следуя опции type, мы установили для хоста dynamic, что означает, что телефон зарегистрируется у нас, чтобы определить его местонахождение в сети (чтобы мы знали, куда отправлять свои вызовы). В качестве альтернативы мы могли бы статически определить IP-адрес, например 192.168.128.50, где все вызовы будут приниматься и совершаться. Это будет работать, только если устройство всегда будет иметь один и тот же IP-адрес.
Опция context определяет контекст, в котором этот канал будет входить в диалплан. Когда вызов совершается телефоном, и запрос получен Asterisk, он обрабатывается логикой, определенной в контексте, сконфигурированном здесь в диалплане (extensions.conf).
Параметр delayreject=yes указывает Asterisk на небольшую задержку на любые сообщения об отказе из-за неудачной аутентификации. Целью это является повышением уровня защиты от атак брутфорсом (которые в конфигурации по умолчанию могут запускаться по сотни попыток за считанные секунды).
Ниже приведены параметры disallow и allow. Они определяют кодеки, которые будут разрешены для этого канала (в порядке предпочтения). Директива disallow=all сбрасывает любые кодеки по умолчанию, которые могут быть разрешены в разделе [general] (или как часть значений по умолчанию для канала). Затем мы определяем конкретные кодеки, которые хотим разрешить с помощью allow. В нашем примере мы явно разрешили только ulaw и alaw. Это рекомендуется для целей тестирования.14
Теперь, когда у нас есть наш шаблон, мы можем создать определенные описания каналов для каждой конечной точки, которую мы хотим поддерживать. Нам нужно указать только те параметры, которые не определены в шаблоне.
Мы назвали два канала, head-office и branch-office. Вы можете назвать свои каналы как пожелаете, однако, имейте в виду, что, поскольку мы используем type=friend, канал должен иметь одно и то же имя на обоих концах сети, и поэтому ему должно быть присвоено имя, которое имеет смысл с обеих сторон.
Мы назначили наш шаблон inter-office-trunk для обоих каналов, который автоматически назначит все параметры в шаблоне для этого канала.
Параметр secret определяет пароль.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_1-16.png)
Вы должны убедиться, что используете безопасный пароль, особенно если планируете открыть свою систему для внешнего мира. Не используйте что-то глупое, например 1234, иначе пожалеете об этом. Нет, серьезно. Мы не шутим. Даже в лаборатории.
Число успешных атак на телефонные системы с поддержкой VoIP (и не только Asterisk) растет, и будет продолжать увеличиваться. Обычно успешные взломы происходят из-за слабых паролей. Если у вас появится привычка использовать надежные пароли, у вас будет гораздо больше защиты в будущем.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-22.png)
Вы можете сгенерировать сложный пароль с использованием генератора паролей, как в Интернете, так и в вашей операционной системе. Вот простой скрипт, который можно запустить в командной строке Linux, чтобы создать строку, которая будет подходящей в качестве пароля:
$ dd if=/dev/random count=1 bs=8 2>/dev/null | base64 | sed -e ‘s/=*$//’
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_1-17.png)
Не используйте пароли, которые мы определили в примере. Вы можете быть уверены, что вскоре после публикации этой книги это будет один из первых паролей, который бот попытается использовать в вашей системе.
Наконец, мы определяем IP-адрес дальнего конца этой сети. В этом случае мы решили жестко настроить IP-адрес, однако вы также можете определить хост как dynamic, что потребует регистрации дальнего конца у вас. И это для IAX.
Изменение файлов конфигурации канала для вашей среды
Наши примеры до сих пор были основаны на гипотетических именах устройств. Чтобы создавать фактические каналы на основе того, что у вас есть в вашей среде, вы захотите изменить имена устройств в файлах sip.conf и iax.conf на то, что имеет больше смысла.
Например, если у вас есть Polycom IP 430 с MAC-адресом 0004f2119698, вам нужно определить идентификатор устройства в sip.conf для этого устройства:
[0004f2119698](office-phone)
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-23.png)
В sip.conf вы также можете добавить значение description (описание), которое затем можно просмотреть в консоли Asterisk при запуске sip show peers. Например:
[0004f2119698](office-phone)
description=Polycom IP670 Phone
Имейте в виду, что, хотя вы можете описать такие вещи, как «Телефон в офисе Джона» или «Телефон в кабинете 213», реальность заключается в том, что все перемещается, поэтому наилучшей практикой было бы упростить описание, на то, что вряд ли изменится (например, модель телефона никогда не изменится). Некоторые компании назначают теги отслеживания активов для оборудования. Это может быть полезным, если отметить такие детали.
Вы также можете рассмотреть параметр description как часть вашего шаблона (например, description=office-phone), который позволит вам видеть в консоли Asterisk какой шаблон используется устройством.
Если у вас есть софтфон IAX на ПК, который вы хотите использовать, вашему файлу iax.conf может потребоваться что-то вроде этого:
[001b63a28ccc](office-phone)
secret=n4AgD7LURvg
Помните, что вы можете называть свои устройства как угодно (Asterisk об этом не заботится), но для простоты управления убедитесь, что вы выбрали для себя соглашение об именах, которое является логичным, масштабируемым, устойчивым и безопасным (под которым мы подразумеваем: не используйте дополнительные номера в качестве имен каналов).
Телефоны Digium с Астериск
Digium предлагает серию SIP-телефонов, предназначенных для работы с Asterisk. Несмотря на то, что это стандартные SIP-телефоны, добавление модуля DPMA (Digium Phone Module for Asterisk) позволяет этим устройствам работать более тесно с Asterisk чем любой другой модели SIP-телефона. DPMA также позволяет значительно упростить автоматическую настройку этих аппаратов.
Модуль DPMA — это проприетарная технология, обеспечивающая безопасное соединение между системой Asterisk и телефоном Digium. Преимущество DPMA заключается в том, что конфигурация пользовательских устройств значительно упрощена в сочетании с тем фактом, что комплекты с поддержкой DPMA могут быть более тесно интегрированы с функциями Asterisk. Конкретная интеграция Asterisk обеспеченная DPMA, включает:
- Упрощенный процесс провижинга. Телефоны автоматически обнаруживают серверы Asterisk и извлекают их конфигурацию.
- Телефонные контакты могут быть сохранены на сервере Asterisk.
- Интеграция со следующими функциями Asterisk: голосовая почта, каталог, парковка, записи вызовов, очереди вызовов и многое другое.
- Расширенная поддержка присутствия на основе пользователей.
- Возможность писать пользовательские приложения в Javascript, которые работают на телефоне. Эта возможность по-прежнему находится в стадии бета-тестирования на момент написания, но наверняка станет невероятно мощным дополнением.
Подробную документацию по настройке DPMA можно найти в вики Digium.
Загрузка новых конфигураций канала
Чтобы сообщить Asterisk о новых конфигурациях, вам необходимо передать ему команду, которая заставляет перезагрузить соответствующий файл конфигурации. В CLI Asterisk вы можете передавать различные команды в действующую систему Asterisk.
Asterisk CLI
Лучший способ увидеть, что происходит с вашей системой Asterisk, — это использовать CLI Asterisk. Этот интерфейс обеспечивает различные уровни вывода, чтобы знать, что происходит в системе, и предлагает множество полезных утилит, которые позволят повлиять на работу системы. Начните с вызова CLI Asterisk и перезагрузки файлов конфигурации для модулей канала:
$ sudo asterisk -r
*CLI> module reload chan_sip.so
*CLI> module reload chan_iax2.so
Убедитесь, что ваши новые каналы загружены:
*CLI> sip show peers
*CLI> sip show users
*CLI> iax2 show peers
*CLI> iax2 show users
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-24.png)
На этом этапе ваша система Asterisk должна быть сконфигурирована для обработки регистраций с определенных устройств. Вся регистрация — это определение местоположения устройства. Регистрация сама по себе не имеет никакого отношения к тому, разрешено ли комплекту совершение вызовов или нет (хотя успешная регистрация позволяет предположить, что комплект использует правильные учетные данные и, следовательно, также может успешно совершать вызовы).
Вызовы к и от не будут работать до тех пор, пока конфигурация устройств не будет завершена. Поскольку каждое устройство отличается в этом отношении, подробные инструкции по настройке для каждой модели выходят за рамки этой книги. Большинство производителей устройств обеспечивают отличные инструкции по настройке и, во многих случаях, предлагают примеры, характерные для Asterisk.
Тестирование для обеспечения регистрации устройств
Как только ваше устройство зарегистрировалось на Asterisk, вы сможете запросить местоположение и состояние устройства из Asterisk CLI.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-25.png)
Распространенным заблуждением является то, что регистрация — это то, как устройство аутентифицируется для получения разрешения на совершение звонков. Это неверно. Единственная цель регистрации — позволить устройству идентифицировать свое местоположение в сети, так что Asterisk (или любой другой сервер регистратора SIP, если на то пошло) знает, куда отправлять вызовы, предназначенные для этого устройства.
Аутентификация исходящих вызовов является полностью отдельным процессом и всегда выполняется для каждого вызова независимо от того, зарегистрирован ли аппарат. Это означает, что ваш аппарат может выполнять вызовы, но не принимать их. Так обычно происходит, когда устройство не зарегистрировано успешно (поэтому Asterisk не знает, где оно), и все же имеет правильные учетные данные для совершения вызовов (поэтому Asterisk готов принять вызовы от него).
Чтобы проверить статус регистрации устройства, просто вызовите CLI Asterisk:
$ sudo asterisk -r
Ввод следующей команды возвращает список всех одноранговых узлов (peer’ов), о которых знает Asterisk (независимо от их состояния):
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_9-12.png)
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-26.png)
Вы можете заметить, что поле Name/username не всегда показывает полное имя устройства. Это связано с тем, что это поле ограничено 25 символами.
Обратите внимание, что в нашем примере в статусе Unmonitored. Это связано с тем, что мы не используем параметр qualify=yes в нашем файле sip.conf.
Аналоговые телефоны
Существует два популярных способа подключения аналоговых телефонов к Asterisk. Первый заключается в использовании ATA, который чаще всего подключается к Asterisk с использованием протокола SIP. Конфигурация Asterisk для ATA такая же, как и для любого другого телефона на базе SIP. Другой способ — напрямую подключить телефоны к серверу Asterisk с использованием аппаратного обеспечения телефонии от поставщика, такого как Digium. Digium продает телефонные карты, которые могут быть установлены на ваш сервер для предоставления портов FXS для подключения аналоговых телефонов (или факсимильных аппаратов). Для демонстрации мы собираемся показать требуемую конфигурацию, если у вас есть карта Digium AEX440E, которая представляет собой AX410 с половинной длиной PCI Express с четырьмя модулями FXS и аппаратным эхоподавлением.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-27.png)
Независимо от того, какое оборудование вы используете, ознакомтесь с документацией вашего поставщика о любых требованиях к конфигурации оборудования.
Во-первых, убедитесь, что установлены как Asterisk, так и DAHDI (см. «Как его устанавливать» на стр. 57). Обратите внимание, что DAHDI должен быть установлен перед установкой Asterisk.15 Когда вы устанавливаете DAHDI, обязательно установите скрипт инициализации (init) (который в большинстве случаев устанавливается автоматически, в противном случае используйте make config из каталога tools). Это обеспечит правильную инициализацию вашего оборудования при загрузке системы. Скрипт init устанавливается из пакета DAHDI-tools.
Скрипт init использует файл /etc/dahdi/modules для определения того, какие модули должны быть загружены для поддержки оборудования в системе. Установка этого скрипта попытается автоматически настроить этот файл для вас, но вы должны проверить и убедиться что он настроен верно:
# Автогенерация от tools/xpp/dahdi_genconf (Dahdi::Config::Gen::Modules) на
# Tue Jul 27 10:31:46 2010
# Если вы отредактируете этот файл и запустите tools/xpp/dahdi_genconf снова,
# ваши изменения вручную будут ПОТЕРЯНЫ.
wctdm24xxp
Для DAHDI требуется еще один файл конфигурации: /etc/dahdi/system.conf. Он выглядит так:
; Укажите, что хотели чтобы DAHDI генерировал тоны, которые используются
; в Соединенных Штатах.
loadzone = us
defaultzone = us
; У нас есть 4 порта FXS; настроить их для сигнализации FXO.
fxoks = 1-4
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-28.png)
Эта конфигурация предполагает что карта используется в Соединенных Штатах. Некоторые советы по интернационализации см. в Главе 9.
Если карта, которую вы настраиваете, не имеет аппаратной эхоподавления, в /etc/dahdi/system.conf необходимо добавить еще одну строку, чтобы включить эхоподавление на основе программного обеспечения:
echocanceller = mg2,1-4
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-29.png)
MG2 — это эхоподавитель, который поставляется с официальным пакетом DAHDI. Еще один эхоподавитель с открытым исходным кодом, совместимый с DAHDI — OSLEC (Open Source Line Echo Canceller). Большинство людей сообщают о превосходных результатах с OSLEC (он включен в ядро Linux). Дополнительную информацию об установке OSLEC в вашей системе см. на этом веб-сайте.
Теперь используйте скрипт init для загрузки соответствующих модулей и инициализации оборудования:
$ sudo /etc/init.d/dahdi start
Loading DAHDI hardware modules:
wctdm24xxp: [ OK ]
Running dahdi_cfg: [ OK ]
Теперь, когда настроен DAHDI, пришло время перейти к соответствующей конфигурации Asterisk. После установки Asterisk убедитесь, что модуль chan_dahdi установлен. Если он не загружен в Asterisk, проверьте, существует ли он в /usr/lib/asterisk/modules. Если он есть, отредактируйте /etc/asterisk/modules.conf, чтобы загрузить chan_dahdi.so. Если модуль отсутствует на диске, DAHDI не был установлен перед установкой Asterisk; вернитесь и установите его сейчас (подробнее см. «DAHDI» на стр. 57). Вы можете проверить его наличие, используя следующую команду:
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_10-8.png)
Затем вы должны настроить /etc/asterisk/chan_dahdi.conf. Это файл конфигурации для модуля chan_dahdi, который является интерфейсом между Asterisk и DAHDI. Он должен выглядеть так:
[trunkgroups]
; В этой конфигурации нет групп транков.
[channels]
; Контекст channels используется при определении каналов с использованием
; старого устаревшего метода. Не используйте его как имя раздела.
[phone](!)
; Шаблон для размещения опций для всех телефонов.
usecallerid = yes
hidecallerid = no
callwaiting = no
threewaycalling = yes
transfer = yes
echocancel = yes
echotraining = yes
immediate = no
context = LocalSets
signalling = fxo_ks ; Использовать FXO сигнализацию для канала FXS
[phone1](phone)
callerid = «Mark Michelson» <(256)555-1212>
dahdichan = 1
[phone2](phone)
callerid = «David Vossel» <(256)555-2121>
dahdichan = 2
[phone3](phone)
callerid = «Jason Parker» <(256)555-3434>
dahdichan = 3
[phone4](phone)
callerid = «Matthew Nicholson» <(256)555-4343>
dahdichan = 4
Вы можете убедиться, что Asterisk загрузил вашу конфигурацию, запустив команду CLI dahdi show channels:
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_11-5.png)
Для получения подробной информации о конкретном канале вы можете запустить dahdi show channel 1.
Базовый диалплан для проверки ваших устройств
Мы пока не будем слишком глубоко погружаться в диалплан, но будет полезен начальный диалплан, который вы можете использовать для тестирования ваших недавно зарегистрированных устройств. Поместите следующее содержимое в /etc/asterisk/extensions.conf:
[LocalSets]
exten => 101,1,Dial(SIP/0000FFFF0001) ; Замените 0000FFFF0001 на имя вашего устройства
exten => 102,1,Dial(SIP/0000FFFF0002) ; Замените 0000FFFF0002 на имя вашего устройства
exten => 103,1,Dial(SIP/0000FFFF0003) ; Замените 0000FFFF0003 на имя вашего устройства
exten => 104,1,Dial(IAX2/0000FFFF0004) ; Замените 0000FFFF0004 на имя вашего устройства
exten => 105,1,Dial(IAX2/0000FFFF0005) ; Замените 0000FFFF0005 на имя вашего устройства
;
; Это позволит Вам набирать каждый из 4 аналоговых телефонов настроенных
; в предыдущем разделе.
;
exten => 106,1,Dial(DAHDI/1)
exten => 107,1,Dial(DAHDI/2)
exten => 108,1,Dial(DAHDI/3)
exten => 109,1,Dial(DAHDI/4)
exten => 200,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
exten => 3101,1,Dial(IAX2/head-office/101) ; Dial extension 101 at head office
exten => 3102,1,Dial(IAX2/head-office/102) ; Dial extension 102 at head office
exten => _3XXX,1,Dial(IAX2/head-office/${EXTEN})
Этот базовый диалплан позволит вам набирать ваши SIP-устройства с помощью добавочных номеров 100, 101 и 102. Устройства на основе IAX2 могут набираться на внутренних линиях 104 и 105. Четыре линии аналоговой карты можно набирать через номера от 106 до 109 соответственно, Вы также можете прослушать приглашение hello-world, которое было создано для этой книги, путем набора номера 200. Набор 3 плюс любой трехзначный номер попытается отправить этот вызов по вашему IAX-транку в головной офис. Все эти номера являются произвольными числами и могут быть любыми какие захотите. Кроме того, это далеко не полный диалплан; мы разработаем его далее в последующих главах.
Вам нужно будет перезагрузить диалплан, прежде чем изменения вступят в силу в Asterisk. Вы можете перезагрузить его из оболочки Linux:
$ asterisk -rx «dialplan reload»
или из Asterisk CLI:
*CLI> dialplan reload
Теперь вы можете набирать между двумя новыми внутр.номерами. Откройте CLI, чтобы просмотреть ход вызова. Вы должны увидеть что-то вроде этого (и аппарат, который вы вызываете, должен звонить):
— Executing [100@LocalSets:1] Dial(«SIP/0000FFFF0001-0000000c»,
«SIP/0000FFFF0001») in new stack
— Called 0000FFFF0001
— SIP/0000FFFF0001-0000000d is ringing
Если этого не произойдет, вам нужно будет просмотреть свою конфигурацию и убедиться, что вы не сделали никаких опечаток.
Под капотом: Ваш первый звонок
Чтобы вы могли подумать о том, что происходит под капотом, мы кратко рассмотрим кое-что из того, что на самом деле происходит с протоколом SIP, когда два аппарата в одной системе Asterisk вызывают друг друга.
Asterisk как B2BUA
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_6-30.png)
Имейте в виду, что здесь на самом деле два вызова: один от исходного аппарата до Asterisk, а другой — от Asterisk до целевого аппарата. SIP является одноранговым протоколом, и, с точки зрения протокола, происходит два вызова. Протокол SIP не знает, что Asterisk соединяет вызовы; каждый аппарат понимает его связь с Asterisk не имея реального знания об устройстве с другой стороны. Именно по этой причине Asterisk часто упоминается как B2BUA (Back to Back User Agent). Вот почему так легко объединить разные протоколы вместе с Asterisk.
Для вызова, который вы только что сделали, будут иметь место диалоги, показанные на Рисунке 5-2. Подробнее о том, как работает обмен сообщениями SIP, см. Приложение B и SIP RFC.
![](https://voxlink.ru/wp-content/uploads/2019/06/Screenshot_12-4.png)
Вывод
В этой главе мы узнали о лучших методах для именования устройств, абстрагируя понятия пользователей, внутренних номеров и устройств, а также о том, как определять параметры конфигурации устройства и аутентификации в файлах конфигурации канала. Затем мы рассмотрим магию Asterisk, которая называется диалпланом, и посмотрим, как простые вещи могут создавать отличные результаты.
1Это не имеет ничего общего с конфигурацией Asterisk, и каждый производитель оборудования будет иметь свои собственные инструменты, которые позволят вам настроить его устройства. Большинство SIP-телефонов имеют веб-интерфейс, и большинство софт-телефонов имеют меню конфигурации, встроенное в их графический интерфейс.
2Фактически, Asterisk пытается реализовать и абстрагировать понятия пользователей и устройств внутри, используя файл users.conf; однако он обычно используется только графическим интерфейсом Asterisk. Абстрагирование понятий логически с использованием диалплана легче понять и гораздо более гибко.
3Или любая другая сеть, если на то пошло. ATA более формально можно назвать аналого-цифровыми шлюзами, где характер цифрового протокола может изменяться (например, патентованные ATA на традиционных АТС). Дело в том, что ATA не обязательно является устройством SIP.
4ATA — это не единственный способ подключения аналоговых телефонов. Поставляемое оборудования, такое как карты Digium, которые входят в сервер Asterisk и предоставляют порты аналоговой телефонии.
5Для действительно удивительного беспроводного аналогового телефона вы должны проверить устройства от EnGenius DuraFon, которые дороги, но впечатляют.
6Концепция контекста диалплана подробно обсуждается в главах диалплана. Именно контекст определяет, где в диалплане будет обрабатываться вызов, поступающий на канал.
7SIP RFC долго читается, но в первых 25 страницах — хорошее введение.
8Если у вас установлено значение srvlookup — yes, а ваше подключение к Интернету или DNS отключено, это может вызвать всевозможные проблемы с производительностью.
9Дополнением к этому варианту является tcpbindaddr, используемый для прослушивания запросов, передаваемых через сетевой протокол TCP.
10Этот процесс известен как регистрация. См. «Тестирование для обеспечения регистрации устройств» на стр. 114 для получения дополнительной информации о концепциях регистрации устройств.
11Произносится «EEKS» (как в «weeks»). Не нужно говорить «eeks two», так как больше нет такой версии, как 1.
12SIP, который имеет отдельные протоколы и порты передачи сигналов и голосовых данных, использует один порт для сигнализации (SIP-сообщения), но также требует, по меньшей мере, двух RTP-соединений для каждого активного вызова для передачи звука. По умолчанию Asterisk использует порт 5060 для SIP и порты от 10 000 до 20 000 для RTP. Протоколы SIP и RTP позволяют использовать разные порты, и, таким образом, эти вещи могут быть более четко определены в файле rtp.conf.
13Мы также рекомендуем вам прочитать раздел «sip.conf» в этой главе, поскольку он содержит много концепций, которые одинаково применимы к другим файлам конфигурации Asterisk.
14 Если вы хотите использовать более сложные кодеки сжатия, мы рекомендуем вам попробовать их, но сначала запустите канал с основными кодеками, а затем поэкспериментируйте с другими кодеками позже.
15 Обратитесь к Главе 3 за дополнительной информацией об переустановке Asterisk после установки DAHDI.
![](/wp-content/uploads/2019/05/Screenshot_2.jpg)
Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.