В каком файле задается драйвер dahdi для модели карты

Обновлено: 10.07.2024

DAHDI является сокращением от "Digium Asterisk Hardware Device Interface".

Этот модуль канала пришел на смену каналу Zap и наследует все его основные возможности.
Кроме того, были расширены возможности по работе с программными эхоподавителями и добавлены новые параметры в файл конфигурации.

Все релизы Asterisk ветки 1.4 с версией выше 1.4.21, и все релизы ветки 1.6, автоматически используют канал DAHDI вместо Zaptel, даже если Zaptel все еще установлен и присутствует в системе.
О том, как перейти с Zaptel на DAHDI можно почитать тут.

Модуль канала DAHDI обеспечивает интерфейсный уровень между сервером Asterisk с одной стороны, и драйвером интерфейса Daahdi плюс программные эхоподавителели с другой. Драйвера интерфейсов позволяют использовать аппаратные средства (карты) для соединения Asterisk с традиционными аналоговыми или цифровыми телефонными сетями:

Поддерживаемое оборудование

Драйвер DAHDI на данный момент поддерживает следующее аппаратное обеспечение:

Цифровые карты

  • wct4xxp:
    • Digium TE205P/TE207P/TE210P/TE212P: PCI 2 порта T1/E1/J1
    • Digium TE405P/TE407P/TE410P/TE412P: PCI 4 порта T1/E1/J1
    • Digium TE220: PCI-Express 2 порта T1/E1/J1
    • Digium TE420: PCI-Express 4 порта T1/E1/J1
    • wcte12xp:
      • Digium TE120P: PCI один порт T1/E1/J1
      • Digium TE121: PCI-Express один порт T1/E1/J1
      • Digium TE122: PCI один порт T1/E1/J1
      • wcte11xp:
        • Digium TE110P: PCI один порт T1/E1/J1
        • wct1xxp:
          • Digium T100P: PCI один порт T1
          • Digium E100P: PCI один порт E1
          • tor2: Tormenta 4 портовая T1/E1 карта от "Zapata Telephony project"

          Аналоговые карты

          • wctdm24xxp:
            • Digium TDM2400P/AEX2400: до 24 аналоговых портов
            • Digium TDM800P/AEX800: до 8 аналоговых портов
            • Digium TDM410P/AEX410: до 4 аналоговых портов
            • wctdm:
              • Digium TDM400P: до 4 аналоговых портов
              • xpp: Xorcom Astribank: USB устройство, до 32 портов (включая цифровые BRI и E1/T1 модули)
              • wcfxo: X100P, оригинал и его клоны. Простая однопортовая FXO карта.

              Другие драйвера

              • pciradio: Zapata Telephony PCI Quad Radio Interface
              • wctc4xxp: Аппаратный транскодер кодеков от Digium (необходим модуль dahdi_transcode).
              • dahdi_dynamic_eth: Драйвер TDM через Ethernet (TDMoE). Ему необходим модуль dahdi_dynamic.
              • dahdi_dynamic_loc: Mirror a local span. (необходим модуль dahdi_dynamic).
              • dahdi_dummy: Устройство, не предоставляющее каналов, используется только как источник DAHDI сигналов таймера.

              Конфигурация модуля Dahdi

              Для конфигурации модуля Dahdi (не каналов asterisk) используются следующие файлы:

              настройка E1 - /etc/dahdi/system.conf

              В синхронной сети должно выполняться одно простое правило - master должен быть соединен с slave. Если это правило нарушается - будут потерянные(skip) или повторенные (slip) кадры.

              При разговоре слышно легкое пощелкивание, факсы не идут или проходят с ошибками. У вас неправильно настроена синхронизация. Настройте синхронизацию как описано выше.

              ISDN PRI - /etc/asterisk/chan_dahdi.conf

              context - привязывает канал к контексту в плане набора (диалплане), тем самым определяя действия при инициации вызова. :

              channel - назначает канал или несколько каналов, Каналы могут быть определены индивидуально, через запятую, или диапазоном через дефис.

              group - назначает каналы в группу. Для исходящей связи будет выбираться первый свободный канал. Для назначения в несколько групп, перечислите значения через запятую. Чтобы не назначать в группу - оставьте значение пустым.

              switchtype - устанавливает тип сигнализации для PRI.

              qsig: Протокол с минимальной функциональностью, используемый для построения «сети» между двумя или более АТС от различных производителей. fxo_ks: Используется для сигнализации FXS устройств. fxs_ks: Противоположная сторона fxo_ks. Для сигнализации FXO устройств pri_cpe: Сигнализация PRI. Клиентская сторона оборудования (user) pri_net: Сигнализация PRI, network side.

              Аналоговые интерфейсы могут стать источником путаницы в Asterisk.
              Для FXS интерфейсов используется fxo_ks.
              Для FXO - fxs_ks.

              priindication: Этот параметр устанавливает то, как сервер Asterisk должен сигнализировать состояние Busy() и Congestion() для удаленного коммутатора или пользователя. По умолчанию: inband. Доступные значения следующие:

              inband: Сервер Asterisk будет сам проигрывать тональные сигналы без перевода канала в отвеченное состояние; Не доступно для всех соединений PRI/BRI. outofband: Сервер Asterisk будет разрывать связь с информационным кодом busy/congestion, при этом уже сам телефонный коммутатор будет проигрывать тональные сигналы пользователю. Busy(), в этом случае, это то же самое, что установка: PRI_CAUSE=17 и выполнение команды: Hangup().

              pridialplan - устанавливает тип плана набора для ISDN PRI. Игнорируется в большинстве случаев. Может понадобиться для корректной работы CallerID Доступные значения: unknown, local, private, national, international.

              overlapdial: если - «yes», то набранные цифры будут сразу отправляться в поток. По умолчанию: no. (enblock)

              Состояние аналоговых вызовов

              В этой секции описываются директивы сигнализирующие о состоянии вызовов аналоговых интерфейсов.

              Функции CallerID

              calleridcallwaiting - получать CallerID во время вызова.

              Call feature options

              Эти параметры включают или отключают дополнительные опции для FXS (FXO) каналов, такие как конференция и пере-адресация и т.д.. Значения могут быть только (yes/no)

              threewaycalling - разрешает или запрещает three-way calling для канала.

              cancallforward - разрешает или запрещает функцию «следуй за мной».

              ADSI - Включает или выключает поддержку ADSI. ADSI спецификации системы, аналогичной Caller ID для передачи закодированной информация для аналоговых телефонов. Это позволяет создавать интерактивные меню и обеспечивает доступ к таким услугам, как голосовая почта, посредством текстового интерфейса.

              Параметры качества аудио

              echocancel включить эхо-подавление. По умолчанию всегда включен.

              rxgain - регулировка усиления приемника.
              txgain - регулировка усиления передатчика.

              Call Logging Options

              Эти параметры влияют на записи Call Detail Records Asterisk.
              amaflags: Устанавливает AMA флаги, влияющие на классификацию записей в Call Detail Records. Принимает следующие значения:

              accountcode: Устанавливает код счета за звонки. Код в счете может иметь любое буквенное или цифровое значение.

              В описанной инструкции рассмотрим пример установки с нуля Asterisk версии с длительной поддержкой на Linux CentOS 7.

              Подготовка сервера

              1. Устанавливаем необходимые программы

              yum install gcc wget ntpdate automake libtool

              * gcc нужен для сборки исходников, wget — для загрузки файлов из командной строки; ntpdate — синхронизации времени; automake — участвует в создании Makefile при запуске configure; libtool — обеспечивает процесс сборки и использования динамических библиотек.

              2. Настраиваем время

              Устанавливаем временную зону:

              timedatectl set-timezone Europe/Moscow

              * в данном примере московское время.

              Устанавливаем утилиту для синхронизации времени и запускаем ее:

              yum install chrony

              systemctl enable chronyd --now

              3. Настройка безопасности:

              Создаем новый сервис в брандмауэре:

              firewall-cmd --permanent --new-service=asterisk

              Добавим в сервис нужные порты:

              firewall-cmd --permanent --service=asterisk --add-port=5060/tcp

              firewall-cmd --permanent --service=asterisk --add-port=5060/udp

              firewall-cmd --permanent --service=asterisk --add-port=5061/tcp

              firewall-cmd --permanent --service=asterisk --add-port=5061/udp

              firewall-cmd --permanent --service=asterisk --add-port=4569/udp

              firewall-cmd --permanent --service=asterisk --add-port=5038/tcp

              firewall-cmd --permanent --service=asterisk --add-port=10000-20000/udp

              * где 5060 — SIP, 5061 — SIP over TLS, 4569 — IAX, 5038 — AMI (Asterisk Manager Interface), 10000-20000 — диапазон для динамических портов.

              Теперь добавляем созданный сервис как разрешенный:

              firewall-cmd --permanent --add-service=asterisk

              и перезапускаем фаервол:

              Установка Asterisk

              Установка астериска выполняется путем сборки исходников. Сама процедура проходит в 3 этапа:

              1. Установка DAHDI (драйверов плат интерфейсов);
              2. Установка LibPRI (библиотека для работы с потоковыми TDM-интерфейсами);
              3. Собственно, сборка и установка Asterisk.

              1. Сборка DAHDI

              Загружаем исходник, распаковываем его и переходим в распакованный каталог:

              tar -xvf dahdi-linux-complete-current.tar.gz

              Выполняем сборку и установку:

              Выходим из каталога с исходником:

              2. Сборка LibPRI

              Процедура, во многом, похожа на сборку DAHDI. Загружаем исходник, распаковываем его и переходим в распакованный каталог:

              tar -xvf libpri-current.tar.gz

              Выполняем сборку и установку:

              Выходим из каталога с исходником:

              3. Установка самого астериска

              Копируем ссылку на LTS версию Asterisk PBX

              * Certified Asterisk — бизнес версия с поддержкой для коммерческих клиентов.

              Используя ссылку, скачиваем на сервер программу:

              Распаковываем архив и переходим в него:

              tar -xvf asterisk-*.tar.gz

              Используем встроенный скрипт, чтобы установить зависимости для астериска:

              Чистим образовавшиеся временные файлы:

              Добавляем библиотеку для работы с mp3:

              ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib64 --with-dahdi --with-pri --with-iconv --with-libcurl --with-speex --with-mysqlclient

              * полный перечень опция и что они означают можно посмотреть командой ./configure -h.

              Выбираем необходимые компоненты (в данном примере res_config_mysql, app_mysql, cdr_mysql):

              Конфигурирование пакета перед сборкой

              Запускаем сборку и установку:

              Устанавливаем скрипты для автозапуска АТС и готовые конфигурационные файлы:

              Базовая настройка и запуск

              Открываем конфигурационный файл:

              Снимаем комментарии и редактируем следующие пункты:

              runuser = asterisk
              rungroup = asterisk
              defaultlanguage = ru
              documentation_language = ru_RU

              Создаем учетную запись:

              useradd asterisk -m

              Задаем права на следующие каталоги:

              chown -R asterisk:asterisk /var/run/asterisk

              chown -R asterisk:asterisk /etc/asterisk

              chown -R asterisk:asterisk /var//asterisk

              chown -R asterisk:asterisk /usr/lib64/asterisk

              chown -R asterisk:asterisk /var/log/asterisk

              и проверяем настройки:

              Если программа запустится, мы увидим Asterisk Ready:

              Успешный запуск Asterisk

              Теперь можно запустить астериск как службу:

              systemctl enable asterisk

              systemctl start asterisk

              Заведение пользователя

              Создадим наш первый диалплан (правило обработки звонков):

              Допишем в него следующее:

              * в данном примере мы создаем контекст с именем outcaling для трехзначных номеров (XXX) с вызовом по SIP по внутреннему номеру.

              Теперь создадим два внутренних номера:

              [public](!)
              type=friend
              context=outcaling
              host=dynamic
              disallow=all
              allow=alaw
              allow=ulaw
              language=ru
              qualify=yes
              canreinvite=yes
              call-limit=4
              nat=no

              [101](public)
              regexten=101
              secret=1234
              callerid="101" <101>
              callgroup=1
              pickupgroup=1

              [102](public)
              regexten=102
              secret=5678
              callerid="102" <102>
              callgroup=1
              pickupgroup=1

              * сначала мы создали шаблон public, в который занесли общие параметры. Шаблон мы применили к создаваемым коротким номерам.
              * где:

              • [101], [102] — имена для обозначения номеров.
              • type — типы проверки номеров. Могут быть peer, user или friend. Peer — вызовы сопоставляются с IP-адресами и номерами портов. User — проверка username. Friend — включает возможности peer и user (проверка username и IP-адреса источника) и лучше всего подходит для телефонов и телефонных программ.
              • regexten — добавочный номер. Если не задан, используется имя.
              • secret — пароль для аутентификации.
              • context — контекст или группа правил.
              • host — IP-адрес или имя клиента. Для автоматической регистрации используем dynamic.
              • callerid — идентификатор пользователя при звонке.
              • disallow — запрещает кодеки (задается перед параметром allow).
              • allow — разрешает кодеки. alaw и ulaw — алгоритмы для кодеков g711.
              • language — код используемого языка.
              • callgroup — задает группу устройства (для возможности перехвата).
              • pickupgroup — задает перечень групп, которые можно перехватывать.
              • qualify — включает или отключает периодическую проверку подключенного клиента.
              • canreinvite — включает или отключает прохождение голосового RTP трафика через Asterisk. Устанавливать, только если клиент поддерживает функцию SIP re-invites.
              • call-limit — ограничение количества одновременных вызовов.
              • nat — устанавливается в yes, если клиент находиться за NAT.

              Перезапускаем наш сервис:

              systemctl restart asterisk

              Подключение телефона и проверка

              Для проверки сервера устанавливаем софт-телефон на компьютер. Например, а качестве SIP-клиента под Windows можно установить бесплатную программу 3CX Phone, для Android — Zoiper.

              Пример настройки клиента 3CX Phone:

              Пример настройки 3CX Phone

              Настраиваем подключение с логином и паролем 101 / 1234, второй — 102 / 5678. Пробуем позвонить.

              Исправление ошибок

              Рассмотрим процесс устранения предупреждений и ошибок во время запуска Asterisk.

              DUNDi — протокол динамической маршрутизации для IP-телефонии. Позволяет автоматически находить сервер, обслуживающий конкретный номер.

              Если вы не используете этот протокол, то для нескольких офисов приходится создавать отдельные планы нумерации, поделенные на диапазоны. И создавать отдельные маршруты до всех офисов (и транки до кучи). Когда сеть АТС несколько подрастет, то это положение вещей может стать неудобным, и даже создавать проблемы (а может и не создать).

              Практика

              Статей по настройке можно найти много, но они обычно не раскрывают особенности настройки DUNDi в связке с FreePBX (он поддерживает настройку DUNDi в полу ручном режиме).

              Итак, нам потребуется:

              1. Создать пару приватный\публичный ключ для каждого сервера, подключенного к DUNDi маршрутизации
              2. Выбрать сервера, которые будут корневыми для работы DUNDi (можно сделать и простую звезду или связать всех со всеми)
              3. Создать контекст в котором будем искать внутренние номера (можно и не создавать, и прицепиться к существующему)
              4. Создать DUNDi конфигурацию
              5. Создать транк, через который будет происходить вызов (в этом случае я использую IAX2)
              6. Создать DUNDi транк, на который навесить исходящую маршрутизацию

              Ключи DUNDi

              Заходим на сервера по ssh и:


              Файл *.pub надо передать на другие сервера, которые будут в прямой связи с этим сервером

              Контекст поиска внутренних номеров

              Конфигурация DUNDi

              Транк для совершения вызова

              Название транка в этой вкладе — просто отображаемое имя


              А в этой, уже то, что использует Asterisk, секцию Incoming мы вообще не используем


              Перезагрузить конфигурацию DUNDi можно так:

              Перезагрузить ключи можно так:

              DUNDi транк и маршрутизация

              Название транка в этой вкладе — просто отображаемое имя


              DUNDi Mapping соответствует секции mappings из файла /etc/asterisk/dundi.conf



              Так как план нумерации у меня четырехзначный, то и шаблон номера у меня такой


              Проверка

              После применения изменений, из командной строки asterisk -rv можно:
              Посмотреть статус DUNDi пиров:

              Читайте также: