Основные компоненты Asterisk: ядро, модули, драйверы
Мы уже разобрали общую архитектуру Asterisk и его связь с FreePBX. Теперь заглянем внутрь самого Asterisk, чтобы понять, как он устроен и из чего состоит. Это знание поможет тебе диагностировать проблемы, тонко настраивать и оптимизировать АТС.
Ядро Asterisk: Мозг системы
Ядро Asterisk — это фундамент. Оно отвечает за базовые операции:
- Управление звонками: устанавливает, поддерживает и завершает соединения.
- Обработка событий: реагирует на всё, что происходит в системе (входящий звонок, нажатие кнопки).
- Планирование задач: распределяет ресурсы и управляет процессами.
- Взаимодействие с модулями: предоставляет API и координирует их работу.
- Работа с диалпланом: интерпретирует и выполняет твои инструкции.
Само по себе ядро не умеет работать с протоколами или устройствами. Его задача — создать универсальную платформу для подключения разных функций.
Модули Asterisk: Расширяем возможности
Asterisk имеет модульную архитектуру, что делает его очень гибким. Модули — это динамически загружаемые компоненты, которые добавляют специфическую функциональность. Они делятся на несколько категорий:
Модули каналов (Channel Drivers)
Они связывают Asterisk с внешним миром — протоколами и оборудованием. Без них Asterisk был бы глух и нем.
chan_sip.so: Классический драйвер для SIP.chan_pjsip.so: Современный и более мощный SIP-драйвер. Рекомендую использовать его для новых проектов.chan_dahdi.so: Для работы с аналоговыми и цифровыми линиями через DAHDI-совместимое оборудование.chan_iax2.so: Для протокола IAX2.
Модули приложений (Application Modules)
Эти функции ты используешь в диалплане для обработки звонков.
app_dial.so: Для исходящих звонков.app_answer.so: Для ответа на входящий вызов.app_playback.so: Для воспроизведения аудиофайлов.app_queue.so: Для организации очередей звонков.app_voicemail.so: Для голосовой почты.
Модули функций (Function Modules)
Эти функции вызываются в диалплане для выполнения вспомогательных операций, например, работы с переменными или базами данных.
func_callerid.so: Для работы с Caller ID.func_odbc.so: Для взаимодействия с базами данных через ODBC.
Модули форматов (Format Modules)
Они отвечают за поддержку аудиокодеков и форматов файлов.
format_wav.so: Для работы с WAV-файлами.codec_ulaw.so,codec_alaw.so,codec_g729.so: Для поддержки соответствующих кодеков.
Модули ресурсов (Resource Modules)
Управляют общими ресурсами, такими как базы данных или таймеры.
res_odbc.so: Обеспечивает подключение к ODBC-совместимым базам данных.
Совет: Чтобы увидеть список загруженных модулей в CLI Asterisk, используй команду
module show. Это поможет понять, какая функциональность сейчас активна в твоей системе.
DAHDI: Мост к традиционной телефонии
Asterisk — это не только VoIP. Он умеет работать и с традиционными телефонными линиями (аналоговыми FXO/FXS, цифровыми E1/T1/ISDN PRI). За это отвечают драйверы DAHDI (Digium/Asterisk Hardware Device Interface).
DAHDI — это набор драйверов ядра Linux, которые позволяют Asterisk общаться с аппаратными платами Digium (и совместимыми). Эти платы подключаются к телефонным сетям общего пользования (ТфОП).
- FXO (Foreign eXchange Office): Порты для подключения к городским телефонным линиям.
- FXS (Foreign eXchange Subscriber): Порты для подключения аналоговых телефонов.
- E1/T1/PRI: Цифровые потоки для подключения к АТС операторов связи.
Важно: Если ты используешь Asterisk только для VoIP и не подключаешь его к аналоговым или цифровым ТфОП-линиям через платы расширения, то DAHDI-драйверы тебе, скорее всего, не нужны. FreePBX Distro обычно устанавливает их по умолчанию, но они могут быть неактивны.
Как всё это работает вместе?
Представь ядро Asterisk как дирижёра оркестра. Модули — это музыканты, каждый со своим инструментом (протоколом, приложением, функцией). Драйверы DAHDI — это специальные музыканты, которые умеют играть на старых, но всё ещё актуальных инструментах (традиционные телефонные линии).
Когда приходит звонок (например, через SIP), соответствующий модуль канала (chan_pjsip.so) принимает его и передаёт ядру. Ядро, опираясь на диалплан, определяет, какое приложение (app_dial.so, app_queue.so и т.д.) должно обработать этот звонок, и вызывает его. В процессе могут подключаться модули функций для вспомогательных задач.
Эта модульная структура делает Asterisk таким гибким: ты загружаешь только нужные компоненты, экономя ресурсы и упрощая управление.
Теперь, когда мы понимаем внутреннее устройство Asterisk, пора подготовить рабочую среду. Начнём с установки FreePBX Distro на виртуальную машину, чтобы получить готовую систему для дальнейших экспериментов.