ПЯТОЕ ИЗДАНИЕ Asterisk: Полное руководство Jim Van Meggelen, Russell Bryant and Leif Madsen Beijing · Boston · Farnham · Sebastopol · Tokyo ii Asterisk: The Definitive Guide Jim Van Meggelen, Russell Bryant и Leif Madsen Copyright © 2019 James Van Meggelen. Все права защищены. Отпечатано в Соединенных Штатах Америки. Переведено в Российской Федерации. Опубликовано O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. Книги О'Рейли можно приобрести для образовательных, деловых или рекламных целей. Онлайн-издания также доступны для большинства названий (http://oreilly.com). Для получения дополнительной информации свяжитесь с нашим корпоративным/организационным отделом продаж: 800-998-9938 или [email protected]. Редактор: Майк Лукидес и Рэйчел Румелиотис Дизайнер интерьера: Дэвид Футато Редактор разработки: Джефф Блейель Художник обложки: Карен Монтгомери Редактор производства: Кристен Браун Иллюстратор: Ребекка Демарест Редактор текста: Дуайт Рэмси Перевод: GitHub: krote5k, airosa-id, zrtpsrtp, OilK Корректор: Рэйчел Монаган Верстка и индексация перевода: Дмитрий Кузнецов Индексатор: Джудит МакКонвилль Июль 2019: Пятое издание История изменений для пятого издания 2019-06-21: Первый релиз 2020-10-16: Первый релиз русского перевода Смотри https://www.oreilly.com/catalog/errata.csp?isbn=0636920140610 для обзора подробностей. Логотип O'Reilly является зарегистрированной торговой маркой O'Reilly Media, Inc. Изображение на обложке и соответствующий фирменный стиль Asterisk: The Definitive Guide являются товарными знаками O'Reilly Media, Inc. Хотя издатель и авторы приложили добросовестные усилия для обеспечения точности информации и инструкций, содержащихся в данной работе, издатель и авторы отказываются от любой ответственности за ошибки или упущения, включая, помимо прочего, ответственность за ущерб, возникший в результате использования или опираясь на эту работу. Вы используете информацию и инструкции, содержащиеся в этой работе, на свой страх и риск. Если какие-либо образцы кода или другие технологии, содержащиеся или описываемые в данной работе, подпадают под действие лицензий с открытым исходным кодом или прав интеллектуальной собственности других лиц - вы несете ответственность за то, чтобы их использование соответствовало таким лицензиям и/или правам. Asterisk: Полное руководство доступно под международной лицензией Creative Commons Attribution-NonCommercial- NoDerivatives 4.0. 978-1-492-03160-4 [LSI] iii Оглавление Вступление………………………………………………………………………………………………11 Предисловие……………………………………………………………………………………………14 1. Революция в телефонии……………………………………………………………………………1 Asterisk и VoIP: преодоление разрыва между традиционной и сетевой телефонией 2 Проект телефонии Zapata 2 Массовые изменения требуют гибкости технологий 3 Asterisk: хакерская УАТС 3 Asterisk: профессиональная УАТС 4 Сообщество Asterisk 4 Дискусионный сайт сообщества Asterisk 4 Списки рассылки Asterisk 4 Сайт Asterisk Wiki 5 IRC-каналы 5 Вывод 5 2. Архитектура Asterisk…………………………………………………………………………………6 Модули 6 Приложения 7 Модули соединений 8 Модули записи деталей вызова (CDR) 9 Модули журналирования событий канала 9 Драйверы каналов 9 Трансляторы кодеков 10 Интерпретаторы формата 11 Функции диалплана 11 PBX Модули 12 Модули ресурсов 13 Дополнительные модули 14 Тестовые модули 14 Файловая структура 15 Конфигурационные файлы 15 Модули 15 Библиотека ресурсов 15 Spool 15 Журналирование 16 Диалплан 16 Аппаратные средства 16 Версии Asterisk 16 Вывод 17 3. Установка Asterisk……………………………………………………………………………………18 Установка Linux 20 Выбор вашей платформы 20 Шаги для VirtualBox 21 Linux (OpenStack) Host 22 Зависимости 23 Установка Asterisk 27 Загрузка и необходимые компоненты 27 Компиляция и установка 28 Начальная конфигурация 29 Настройки SELinux 32 Настройки брандмауера 33 Финальные настройки 33 Проверка вашей новой системы Asterisk 34 Распространенные ошибки установки 35 Некоторые финальные заметки по конфигурации 35 iv Примеры файлов конфигурации для дальнейшего использования 35 Командная оболочка Asterisk 36 safe_asterisk 37 Вывод 37 4. Сертификаты для безопасности конечных точек……………………………………………38 Неудобство безопасности 38 Безопасность SIP 38 Имена подписчиков 38 Безопасность SIP-сигнализации 39 Защита медиапотока 41 Шифрование RTP 42 Вывод 42 5. Конфигурация пользовательских устройств…………………………………………………43 Концепции именования телефонов 45 Телефоны, софтфоны и телефонные адаптеры 47 Настройка Asterisk 48 Как конфигурация канала работает с диалпланом 49 chan_pjsip 50 Тестирование чтобы убедиться что ваши устройства зарегистрированы 54 Базовый диалплан для тестирования ваших устройств 55 Под капотом: Ваш первый звонок 56 Вывод 57 6. Основы диалплана…………………………………………………………………………………58 Синтаксис диалплана 58 Контексты 59 Extensions (расширения) 61 Приоритеты 62 Приложения 63 Приложения Answer(), Playback() и Hangup() 64 Базовый прототип диалплана 65 Простой диалплан 65 Hello World 65 Создание интерактивного диалплана 67 Приложения Goto(), Background() и WaitExten() 67 Обработка неверных значений и тайм-аутов 69 Использование приложения Dial() 69 Использование переменных 72 Совпадения по шаблонам 75 Включения (Includes) 79 Вывод 80 7. Внешние подключения……………………………………………………………………………81 Основы транкинга 81 Фундаментальный диалплан для исходящих соединений 82 ТфОП 83 Традиционные транки ТфОП 83 VoIP 86 Преобразование сетевых адресов (NAT) 86 Терминация и инициирование ТфОП 89 Настройка SIP-транков 92 Набор экстренных служб 94 Вывод 95 8. Голосовая почта………………………………………………………………………………………96 Файл конфигурации voicemail.conf 97 Исходный файл voicemail.conf 97 Секция [general] 98 Секция [zonemessages] 101 v Почтовые ящики 101 Интеграция диалплана голосовой почты 104 Приложение диалплана VoiceMail() 104 Приложение диалплана VoiceMailMain() 106 Стандартные комбинации кнопок голосовой почты 106 Создание каталога набор-по-имени 107 Голосовая почта по электронной 108 Бэкэнды хранения голосовой почты 109 Файловая система Linux 109 IMAP 110 Хранение сообщений в базе данных 110 Заключение 110 9. Интернационализация……………………………………………………………………………111 Внешние устройства по отношению к серверу Asterisk 112 Подключение ТфОП, DAHDI, карт Digium и аналоговых телефонов 114 Драйверы DAHDI 115 Интернационализация в Asterisk 117 Caller ID 118 Язык и/или акцент подсказок 118 Штампы времени/даты и произношение 119 Вывод - простая шпаргалка 121 10. Погружение в диалплан…………………………………………………………………………122 Выражения и манипуляции с переменными 122 Базовые выражения 122 Операторы 123 Функции диалплана 124 Синтаксис 124 Примеры функций диалплана 124 Условное ветвление 125 Приложение GotoIf() 125 Условное ветвление по времени с GotoIfTime() 129 GoSub 130 Определение подпрограмм 131 Возврат из подпрограммы 132 Локальные (Local) каналы 133 Использование базы данных Asterisk 135 Хранение данных в AstDB 135 Получение данных из AstDB 136 Удаление данных из AstDB 136 Использование AstDB в диалплане 136 Полезные функции Asterisk 137 Концеренц-связь с ConfBridge() 137 Полезные функции диалплана 138 CALLERID() 138 CHANNEL() 138 CURL() 139 CUT() 139 IF() и STRFTIME() 139 LEN() 140 REGEX() 140 STRFTIME() 140 Вывод 141 11. Функции АТС, включая парковку, пейджинг и конференц-связь………………………142 features.conf 142 Раздел [general] 142 Раздел [featuremap] 143 vi Раздел [applicationmap] 143 Группировка сопоставлений приложений 145 Парковка и пейджинг 146 Парковка вызовов 146 Пейджинг (aka Публичное обращение) 148 Места для отправки Вашего пейджинга 149 Зоны пейджинга 153 Продвинутая конферец-связь 153 Видео-конференцсвязь 155 Вывод 155 12. Очереди автоматического распределения вызовов……………………………………156 Создание простой очереди ACD 157 Участники очереди 160 Управление участниками очереди через CLI 161 Определение участников очереди в таблице queue_members 162 Управление участниками очереди с помощью логики диалплана 162 Автоматический вход и выход из нескольких очередей 164 Расширенные очереди 166 Очередь с приоритетом (Queue Weighting) 166 Приоритет участника очереди 167 Динамическое изменение пенальти (queuerules) 168 Управление объявлениями 169 Переполнение 171 Использование локальных каналов 174 Статистика очереди: файл queue_log 176 Вывод 178 13. Состояния устройств……………………………………………………………………………179 Состояния устройств 179 Проверка состояний устройств 179 Состояния номеров с использованием директивы hint 180 Хинты 180 Проверка состояний внутреннего номера 181 SIP-присутствие 182 Использование пользовательских состояний устройств 182 Вывод 183 14. Автосекретарь……………………………………………………………………………………184 АС - это не IVR 184 Проектирование вашего АС 184 Приветствие 186 Главное меню 186 Тайм-аут 187 Invalid (Неверно) 187 Вызов добавочного номера 188 Создание вашего АС 188 Запись подсказок 188 Диалплан 190 Доставка входящих звонков в АС 191 IVR 191 Вывод 192 15. Интеграция реляционной базы данных……………………………………………………193 Ваш выбор базы данных 193 Управление базами данных 194 Устранение неисправностей базы данных 194 SQL-инъекция 194 Мощь вашего диалплана с функцией func_odbc 195 Мягкое введение в func_odbc 196 vii Веселимся с func_odbc: горячий стол 196 Использование Realtime 207 Статический Realtime 208 Динамический Realtime 209 Хранение записей деталей вызовов (CDR) 210 Интеграция базы данных с очередями 213 Хранение параметров диалплана для очереди в базе данных 213 Запись queue_log в базу данных 214 Вывод 214 16. Введение в интерактивное голосовое меню………………………………………………215 Компоненты IVR 215 Конструктивные соображения IVR 217 Модули Asterisk для создания IVR 217 CURL() 217 func_odbc 218 AGI 218 AMI 218 ARI 218 Простое IVR с использованием CURL() 218 Диалплан 218 Функция записи подсказок IVR 219 Распознавание речи и преобразование текста-в-речь 220 Преобразование текста-в-речь 220 Распознавание речи 221 Вывод 221 17. AMI и файлы вызовов……………………………………………………………………………222 Файлы вызовов 222 Ваш первый файл вызова 222 Заметки о файлах вызова 223 Быстрый запуск AMI 223 AMI через TCP 224 AMI через HTTP 225 Конфигурация 225 manager.conf 225 http.conf 226 Обзор протокола 226 Кодировка сообщений 228 AMI через HTTP 228 Пример использования 230 Инициирование вызова 230 Перенаправление вызова 232 Фреймворки разработки 233 Вывод 234 18. AGI……………………………………………………………………………………………………235 Быстрый запуск 235 Варианты AGI 235 Process-Based AGI 235 FastAGI - AGI через TCP 236 Async AGI - AMI-контролируемый AGI 237 Обзор коммуникаций AGI 238 Установка сеанса AGI 238 Команды и ответы 240 Завершение сеанса AGI 243 Пример: Доступ к базе данных учетной записи 244 Фреймворки разработки 245 Вывод 246 viii 19. Asterisk REST Interface……………………………………………………………………………247 Быстрый запуск ARI 247 Базовая конфигурация Asterisk 247 Тестирование вашей среды ARI 248 Работа со средой ARI с использованием Swagger 249 Строительные блоки ARI 251 REST 251 WebSocket 251 Stasis 252 Фреймворки 252 ari-py (и aioari) для Python 253 node-ari-client 253 AsterNET.ARI 253 ari4java 253 phpari 253 aricpp 254 asterisk-ari-client 254 Вывод 254 20. WebRTC………………………………………………………………………………………………255 Браузер как телефон 255 Предварительное знание 255 Настройка Asterisk для WebRTC 256 Cyber Mega Phone 258 Подробнее об WebRTC 260 Вывод 260 21. Системный мониторинг и журналирование………………………………………………261 logger.conf 261 Просмотр журналов Asterisk 263 Журналирование демоном Linux syslog 263 Проверка ведения журнала 264 Ротация лога 264 Call Detail Records - Записи деталей вызовов 264 Содержимое CDR 264 Приложения диалплана 266 cdr.conf 266 Бэкэнды 267 Пример записей деталей вызова 271 Предостережения 271 Регистрация событий канала 272 Вывод 272 22. Безопасность………………………………………………………………………………………273 Сканирование действительных учетных записей 273 Уязвимости аутентификации 273 Fail2ban 274 Установка 274 Конфигурация 274 Шифрование медиапотока 276 Уязвимости диалплана 276 Безопасность сетевых API Asterisk 277 Другие меры по снижению риска 277 Ресурсы 279 Вывод—Лучший идиот 279 23. Asterisk: Будущее телефонии…………………………………………………………………280 Телефон мертв (за исключением тех случаев, когда это не так) 280 Перегрузка связи 281 Проблемы с разработкой открытого исходного кода 281 ix Будущее Asterisk 282 WebRTC 282 Будущее телефонии 282 Об авторах………………………………………………………………………………………………293 Послесловие……………………………………………………………………………………………293 x