Различие между этими технологиями довольно существенное. Во-первых, рассматривая в контексте стека TCP/IP, можно сказать, что высокоуровневые протоколы SIPи H.323, охватывают все уровни стека: канальный, сетевой, транспортный и прикладной. Это позволяет размещать шлюз в любой точке Интернета, откуда есть доступ до сервера IP-АТС Asterisk.
Особенности работы TDMoE-шлюзов.
Напротив, TDMoE-шлюзы работают только на канальном уровне. Кадры с голосом не имеют IP-адресов, а имеют лишь MAC-адреса, что ограничивает возможность размещения таких шлюзов за границей коммутируемой сети, в которой расположен сервер Asterisk. Разместить такой шлюз в другой сети, за роутером уже будет невозможно. Итак, шлюз и Asteriskдолжны быть подключены напрямую в один Ethernet-коммутатор.
Второй важной особенностью является требования к сети у TDMoE-шлюзов. Технология TDMoE (TimeDivisionMultiplexingoverEthernet– Мультиплексирование потока с временным разделением и передачей через сети Ethernet) является аналогом потоков E1, в которой голосовые кадры идут в строго очередном порядке в строго отведенный временной промежуток. Фактически, это является привычным Е1 потоком, передающимся через Ethernet. К такому потоку предъявляются чрезвычайно строгие требования по задержке сигнала и джиттеру: не более 1,5 секунд.
Архитектура взаимодействия TDMoE-устройства и Asterisk.
Для понимания работы TDMoEв Asterisk, вспомним, каким образом Asteriskвзаимодействует с цифровыми и аналоговыми картами (напр., Digiumили Parabel). Цифровыми и аналоговыми картами занимается драйвер DAHDi, который работает как отдельный модуль ядра, позволяющий ОС Linuxвзаимодействовать с устройством и портами через PCI (PCI-Express) шину сервера. Со стороны Asteriskесть модуль chan_dahdi.so, который обеспечивает взаимодействие самого Астериска и драйверов DAHDi.
При использовании технологии TDMoE, внутренняя шина сервера PCI (PCI-Express) «заменяется» на Ethernet-кабель, фактически, позволяя вынести DAHDi-порты из сервера на расстояние до 100 метров и подключая к серверу произвольное количество портов (ограниченное лишь скоростью сети и мощностью сервера).
Какие преимущества у TDMoE-шлюзов.
Шлюзы TDMoEдля Asteriskявляются низкоуровневыми устройствами в хорошем смысле этого слова. Устройства взаимодействуют с Asteriskна уровне нативных драйверов DAHDi. SIPи H.323 – шлюзы могут иметь разнообразные проблемы с совместимостью из-за разнообразных вариаций по реализации SIP-стека.
Шлюз TDMoEтребует минимальной настройки. В базовой конфигурации достаточно лишь указать его МАС-адрес на Asterisk, чтобы устройства увидели друг друга.
К шлюзу TDMoEневозможно получить удаленный доступ, что влияет на безопасность сервера. К сожалению, SIPи H.323-шлюзы могут быть доступны по сети, при этом имея уязвимости служб или стека, из-за чего нередко атаки производятся именно на них.
Настройка TDMoE-портов производится целиком из Asterisk. Не требуется двойная настройка: первый раз на сервере, второй – на шлюзе, в отличие от VoIP-шлюзов.
Настройка шлюза TDMoE.
В большинстве случаев настройка шлюза не требуется, настройки по умолчанию уже предполагают возможность работы. В случае, если у вас более одного шлюза, необходимо вручную прописать МАС-адреса шлюзов, т.к. они имеют одинаковые значения.
Настройка шлюза возможна после подключения консольного кабеля к шлюзу. Подключаясь через СОМ-порт, попадаем в псевдографический интерфейс, где можно настроить все параметры шлюза:
В моем случае, однако, потребовалась небольшая настройка. Из-за того, что шлюз поставлялся в варианте без аппаратного эхоподавления, а в настройках шлюза было включено использования эходава, сигнализация проходила, а голосовой поток не устанавливался.
Проблема решилась отключением эхоподавления на шлюзе (опция ЕС):
Настройка сервера Астериск.
Настройка сводится к нескольким этапам.
1. Настройка DAHDi.
2. Конфигурация каналов через chan_dahdi.confв Asterisk.
3. Конфигурация DialPlan в Asterisk
Настройка DAHDi в свою очередь сводится к двум этапам:
1.1. Настраиваем SPAN (DynamicSPAN). В файл /etc/dahdi/system.confпрописываем следующие параметры:
dynamic=eth,eth0/00:01:02:03:04:00,30,1
; В этой строке 4 переменных, разделенных запятыми:
- тип устройства: eth,
- адрес TDMoIP-шлюза и порт, через который он доступен: eth0/00:01:02:03:04:00,
- количество каналов – 30 штук
- Источник синхронизации: 1 означает что само устройство является источником синхроимпульсов
fxols=1-7 ; Задаем FXS-каналы 1 банка (обратите внимание, что FXSканалы имеют FXO-сигнализацию и наоборот)
fxsls=8-15 ; Задаем FXO-каналы 2 банка (обратите внимание, что FXSканалы имеют FXO-сигнализацию и наоборот)
fxols=16-22 ; Задаем FXS-каналы 3 банка
fxols=23-30 ; Задаем FXS-каналы 4 банка
alaw=1-30 ; Задаем тип кодирования звукового потока (alawили ulaw)
loadzone=ru; Задаем локальную принадлежность для корректного определения сигналов КПВ.
defaultzone=ru;
Проверка.
Сохраняем файл и перезагружаем dahdi при остановленном Asterisk. Рекомендуется перед этим выполнить dahdi_cfg–s, для выгрузки SPAN-а.
После перезапуска dahdiзапускаем dahdi_tool. Шлюз должен определиться и отобразить статус OK:
Также необходимо убедиться, что сетевой тракт работает корректно и не допускает задержки и пропуска кадров. Для этого нужно запустить команду
watch -n 0.1 cat /proc/dahdi/dahdi_dynamic_stats
В данном выводе важно смотреть на последнюю строку и следить за тем, чтобы значения параметров slip, skipи прочих не росли, а оставались фиксированными. Они могут отличаться от нуля, но главное – чтобы они не росли.
2. Конфигурация каналов в /etc/asterisk/chan_dahdi.conf
Теперь приступаем к настройке канала драйвера дахди со стороны астериск. Для этого в вышеуказанном файле необходимо задать ряд параметров, а также указать каналы и их тип.
Параметры можно разделить на глобальные и индивидуальные (канальные).
Глобальныенастройки:
[trunkgroups]
[channels]
language=en
context=from-zaptel
signalling=fxs_ks
rxwink=300 ; Atlas seems to use long (250ms) winks
busydetect=yes
busycount=10
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
echotraining=800
rxgain=0.0
txgain=0.0
group=0
callgroup=1
pickupgroup=1
immediate=no
Индивидуальные (канальные) настройки могут быть в этом же файле, однако чаще всего выносятся в отдельный файл, например dahdi-channels.conf. Это делается исключительно для удобства.
Например, для настройки ФХО канала мы задаем следующие параметры:
signalling=fxo_ls
pickupgroup=
mailbox=10@device
immediate=no
echotraining=800
echocancelwhenbridged=no
echocancel=no
context=from-internal
callprogress=yes
callgroup=
callerid=device <10>
busydetect=yes
busycount=7
accountcode=
channel≥16
Обязательными являются лишь выделенные жирным параметры. Остальные могут как задаваться глобально, так и вообще не указываться.
После того как сохранили файл, выполняем команду dahdirestartв консоли Астериск.
Далее убеждаемся в том, что канал поднялся и стал доступен командой dahdishowchannels:
Более подробно посмотреть параметры настройки конкретного канала можно увидеть из команды dahdishowchannel16 (любой существующий номер канала):
3. Далее, переходим к заключительной части, настраивая диалплан Астериск
В файл extensions.confв контекст from-internal (или в том, в котором находится данный канал), создаем диалплан аналогичный следующему:
[from-tdmoe]
Exten ≥ _.,1,Dial (SIP/trunk_to_operator/${EXTEN},60,Ttr)
Same ≥ n,Hangup ()