Краткие заметки по дружбе OpenVox D110P (Digium Wildcard TE110P) и Астериск в 2022 году

Волей судеб не так давно досталась мне старенькая плата OpenVox D110P, делающая поток E1 PRI. И подумал я, а не подключить ли мне на работе Asterisk к старенькой АТС Panasonic?
Меня несколько увлекает вот этот мир IP телефонии, можно сказать, это моё хобби. Разбавляет суровые трудовыебудни. К тому же на работе потихоньку издыхает кабель между зданием с АТС, и зданием, где сидит основная толпа работников. И потихонечку умирают телефоны то у одного сотрудника, то у другого. 400 метров телефонного тридцатипарника стоит как то неадекватно дорого (от 200р/метр в магазинах и от 100р/метр на авито, итого - 40 000р - 80 000р),К тому же есть удалённые офисы, и хотелось бы и их привязать в общую сеть. Ну и между зданиями есть гигабитная оптика, загруженная максимум на 1%. Выделить VLAN на голосовую связь и гонять разговоры вообще ничего не мешает. Итого, посчитав плюсы и минусы кабельного и ип-телефонного направления дальнейшего развития я с этим вопросом пришёл к начальнику.
Ответ был ожидаем - ну дерзай, коль заняться нечем, сынку. И сынку устремился.
Для начала выбили 3000р денег для покупки на авито карты ISDN PRI 30 для АТС Panasonic TDA 600. И пока она ползёт с авито по необъятной родине, начинаем ставить астериск на старенький комп, собранный из списанного всякого, и настраивать карту.
В процессе установки я столкнулся с некоторыми трудностями, которые сейчас здесь и изложу. Может, кого то данная статейка избавит от душевных страданий, и сэкономит пару часов (или дней) времени.
Для начала я перечислю грабельки, на которые я наступил в процессе.
DAHDI - подсистема Digium, которая отвечает за взаимодействие всяких карточек (и USB устройств), предназначенных для взаимодействия непосредственно астериск с внешним миром. Карта потока E1 - из той же оперы.

Грабля №1 - DAHDI очень неохотно работает из виртуалки. DAHDI и OpenVox D110P (Digium Wildcard TE110P) из виртуалки не работают вообще никак. Даже скажу больше, если материнка повесила карту и какой нибудь USB на одно прерывание - то нормальной работы не будет. Если биос позволяет назначить прерывания ручками - хорошо. Если нет - ищем другую материнку. Вот тут товарисч, например, с такой картой развлекается, в каментах говорят, что подобные грабли бывают и на оригинальных картах.
http://asterisk-support.ru/question/66948/nastroika-karty-op...
Для себя сделал вывод, что карточки - это такое себе в плане надёжности, и если надо прям вот надёжную связь со старой АТС, то надо искать хороший шлюз E1 PRI в SIP. Все эти карты - это полупрофессиональные (и больше даже скажу, в сторону любительских) решения, но т.к. для меня это хобби, а к внутренней связи дофига требований не предъявляют, то почему бы и нет.

Грабля №2 - из репозитория а-ля apt-get install asterisk dahdi нифига ничего не работает. Т.е. астериск то работает, но поддержки dahdi в нём нет. И dahdi устанавливается какой то кривой. Как сервис не запускается, в init.d его нет, как то непонятно всё. Карточку видит, но подсовывает не тот драйвер (возможно потому, что OpenVox - это всё таки китайский аналог оригинала). Не тот драйвер мы конечно забанили в modprobe, но оно так и не взлетело. dahdi_tool карту не видит. Грусть-печаль. В итоге, когда нашёл таки норм dahdi, там всё сразу заработало, без этих вот забаниваний итд.

Грабля №3. Я давно уже живу с интернетами, зарегестрирован на куче форумов, везде плюс-минус достаточно адекватное общение. Но на форумах телефонии это прямо дичь какая то. Я там узнал о себе много нового. Даже мой командир в этих вот армиях не сумел так тонко раскрыть мой гнилой внутренний мир, как уважаемые телефонисты на профильных форумах. Так как объективно, классическая телефония отмирает, а эти люди посвятили ей свою жизнь, я так понял, им обидно, что никто не готов им платить 100$ за совет по настройке учрежденческой АТС панасоник. На форумах, таких, как http://forum.officeats.ru и прочих похожих есть весьма знающие люди, такие как НачШтаба, SergA, и т.д., но лет 5-10 назад они что то советовали, а ныне задают пару уточняющих вопросов, а потом рекомендуют обратиться за помощью к специалистам, либо просто мешают вопрошающего с говном. Либо , неточная цитата "Переведите мне 100$, я Вам за 5 мин всё настрою".
Вот еще пример: https://www.linux.org.ru/forum/general/14943017
Товарищи Turbid и NobleWolf тихонечко подъёбывают начинающего с высоты своего опыта, при это толком не говоря в чём проблема. В итоге когда их советы оказываются нерабочими, рекомендуют качать готовую сборку.
Ух, печёт от таких советчиков. И таких в мире телефонии оказалось прям вот много, что несколько затрудняет погружение в тему.

Грабля №4. В 2016 году примерно вышла 3-я версия dahdi. В ней исключили все  "старые" (по мнению digium) карты из поддержки. Т.е. моей карты там, блин, нет. Я пол-дня продрючился, пытаясь понять почему не грузится драйвер карты, перед тем, как понял что wcte11xp.so тупо нет в последней сборке dahdi. Ух, бля, негодяи. Ловля чёрной кошки в тёмной комнате как она есть.
Спасибо товарищу на каком то безымянном форуме, он указал на этот досадный факт.

Грабля №5. Начал под Ubuntu 20.04 собирать dahdi 2.xx - не собирается. Требует старые хедеры для сборки, под 20.04 я их не нашел, беда-печаль. Не хватило ква-квалификации для сборки старого dahdi. Кстати, из репозитория по " # apt install dahdi" ставится как раз dahdi 2.xx, но не работает. Ставится как то криво.
Но на сайте OpenVox (кто бы мог подумать, да) нашёлся всё же dahdi 3.1.0 с поддержкой старых карточек, и он нормально собрался в ubuntu 20.04. Алилуйя! А говорят - берите фирменное, нативное железо! Поддержка лучше, дольше. Ага, щаз. Китайская карта актуальна и поныне, в 2022г., а оригинал в 2016 сдох. Понятно, что и оригинал (Digium Wildcard TE110P) заведётся на опенвоксовских драйверах скорее всего, но сам факт вот этого плевка в душу от digium меня расстраивает.
Вот ссылочка: https://www.openvox.cn/pub/drivers/dahdi-linux-complete/

Ну и далее, укажу сейчас кратенький гайд, чего уж теперь тянуть то. Себе на память и добрым молодцам (и девицам так же) в помощь.
К коллайдеру!

Ставим ubuntu server 20.04 server. При установке ставим ssh.

$ sudo -s
# apt-get update && apt-get upgrade -y
# apt-get install mc wget build-essential git autoconf subversion pkg-config libtool -y
# mc
Смотрим, какое имя у нашей флешки
# fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/sdb4 * 256 31129599 31129344 14,9G c W95 FAT32 (LBA)
Монтируем флешку в папку /mnt
# mount /dev/sdb4 /mnt

Заходим mc в архив asterisk-18.tar.gz и копируем папку asterisk-src в домашнюю папку. У меня это /home/pbx


И извлекаем флешку

# umount /mnt

Ставим dahdi, dahdi-tools и libPRI:

# cd /home/pbx/asterisk-src/dahdi-linux-complete-3.1.0+3.1.0
# make
# make install
# cd ..

# cd dahdi-tools-3.1.0
# autoreconf -i
# ./configure
# make install
# make install-config
# dahdi_genconf modules
# cd ..

# cd libpri-1.6.0
# make
# make install
# cd ..
# cd dahdi-tool-distr
# cd ..
С помощью mc копируем бинарник dahdi_tool в /usr/sbin

Эта утилита почему то не компилируется с dahdi, хотя в исходниках она есть, и сообщений об ошибках в процессе не было, странно. Я тупо себе на флешку скопировал бинарник dahdi_tool из репозиторной установки, когда ещё ставил dahdi по apt-get. Он нормально заработал.


Ставим сам asterisk:

# cd asterisk-18
# contrib/scripts/get_mp3_source.sh
# contrib/scripts/install_prereq install
В середине процесса вводим телефонный код, или оставляем как есть, оно ни на что не влияет далее
Завершается вот так:
#######################################
## install completed successfully

#######################################

# ./configure

В конце будет ASCII логотип asterisk

# make menuselect

Выбрать format_mp3 и остальное по желанию. Убедиться, что помечен chan_dahdi в Chanel Drivers

# make
# make install
# make samples
# make basic-pbx
# make config
# ldconfig
# cd ..

Создаём пользователя asterisk без домашней папки, допускаем его к группам dialout, audio, и даём ему все права в папках с конфигами.

# adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
# usermod -a -G dialout,audio asterisk
# chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk /etc/dahdi
# chmod -R 750 /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk /etc/dahdi

Чтобы настроить Asterisk для запуска от имени вновь созданного пользователя asterisk, откройте файл /etc/default/asterisk

И добавьте либо раскомментируйте эти строчки:

AST_USER="asterisk"
AST_GROUP="asterisk"

Стартуем Asterisk:

# systemctl start asterisk

И ставим службу астериска в автозапуск:

# systemctl enable asterisk

Астериск установлен. Настраиваем конфиги DAHDI и ASTERISK


/etc/dahdi/system.conf

Основная строка выглядит так: span => <Number>,<Timing>,<Line BuildOut>,<Framing>,<Coding>[,Yellow]
Например, span = 1,1,0,ccs,hdb3,crc4
Number: номер платы
Timing:
0 - Порт является источником синхронизации (master)
1 - Получает синхронизацию с удаленной станции (slave)
2 - Receives secondary backup timing from remote end
3 - Receives tertiary backup timing from remote end
4 - Receives quaternary backup timing from remote en
При работе с "железной" АТС рекомендуется ставить АТС в мастер, а астериск в слейв, ибо с тактированием у этих карточек печально всё.
span = 1,1,0,ccs,hdb3,crc4
bchan = 1-15,17-31
dchan = 16
loadzone = ru
defaultzone = ru
или, как вариант:
span=1,1,0,ccs,hdb3
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31
loadzone = ru
defaultzone = ru

/etc/asterisk/chan_dahdi.conf

[trunkgroups]
[channels]
language =ru
usecallerid =yes
callwaiting =yes
usecallingpres =yes
callwaitingcallerid =yes
threewaycalling =yes
transfer =yes
canpark =yes
cancallforward =yes
callreturn =yes
echocancel =yes
echocancelwhenbridged =yes
echotraining =yes
callerid =asreceived
group=1
;[E1]
context = from-internal
switchtype = qsig
signalling = pri_cpe
channel => 1-15,17-31

Включаем запуск модуля DAHDI в asterisk (добавляем строку в файл)

/etc/asterisk/modules.conf
load = chan_dahdi.so

На всякий случай ещё раз назначаем уровни доступа к файлам и владельцев, это на случай если конфиги создавали новые, а старые переименовывали. Мы ж всё из под рута делаем. А потом астериск ноет, что не могу загрузить файл конфигурации. Астериск то из под пользователя asterisk стартует. Перезагружаемся.
# chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk /etc/dahdi
# chmod -R 750 /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk /etc/dahdi
# reboot

Заходим под суперюзера:

# sudo -s

И, волнительный момент, заходим в консоль Астериска:

# asterisk -rvvvv

Это распространённые команды Asterisk для dahdi:

*CLI> dahdi show channels

*CLI> dahdi show status

*CLI> dahdi restart

Так смотрим в каком состоянии находится поток E1

*CLI> pri show spans

PRI span 1/0: Up, Active

По нажатию "?" выпадает подсказка.

Так вот, если при наборе
*CLI> ?

Если вдруг в списке подсказок нет ни pri, ни dahdi, значит, либо dahdi не запускается, либо asterisk его не видит. Надо искать проблему.
Во первых, проверить, что сервис dahdi нормально стартует.
# service dahdi status

Должно выпасть сообщение, что dahdi запущен, модуль драйвера (wcte11xp - для моей карточки) запущен, или будет жаловаться на что то. Тут надо гуглить и разбираться.


# lspci -v
04:00.0 Network controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
Subsystem: Device 795e:0001
Flags: bus master, medium devsel, latency 64, IRQ 17
I/O ports at d000 [size=256]
Memory at f7c00000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [40] Power Management version 2
Kernel driver in use: wcte11xp
Kernel modules: netjet, wcte11xp
У меня OpenVox D110P. Он определяется так.
Видим лишний драйвер netjet. Его можно забанить в системе, если dahdi_hardware ругается на него. Я не стал.

# dahdi_hardware
pci:0000:04:00.0 wcte11xp+ e159:0001 Digium Wildcard TE110P T1/E1 Board
Вот если тут жалуется на netjet, тогда баним
Что бы забанить надо пойти в
/etc/modprobe.d/blacklist.conf
и там вбить
blacklist netjet

и перезагрузить систему


Позволяет смотреть сконфигурированные каналы dahdi:

# dahdi_tool

Смотрим прерывания:
# cat /proc/interrupts
17: 5727 7551876 IO-APIC 17-fasteoi wcte11xp
Драйвер висит на отдельном прерывании, всё ок. Функции ACPI не мешают. Но если на этом же прерывании висят какие нибудь USB, SATA, то нормальной работы карты можно не ждать. В современных биосах (хотя материнка с простым PCI это та ещё современность, да уж) нет настройки прерываний. Так что остаётся молиться и надеятся. Можно попробовать повесить обработку прерывания на другое ядро. Мне пришлось менять материнку.
Далее настраиваем диалплан в астериск, как обычно:
exten => s,1,Dial(Dahdi/g1/101,,tT)

это звонок в E1 на панасоник на номер 101, как пример

Вот такая вот история. Надеюсь, я изрядно повеселил Вас в это прекрасное субботнее утро. Тешу себя надеждой, что данное обобщение общесетевой мудрости кому то когда то пригодится. На очереди - борьба с АТС Панасоник, как только карта PRI30 дойдёт. Историю этой борьбы я так же изложу на пикабу.

Всем удачи, счастья, и т.д.

Лига Сисадминов

1.5K поста17.6K подписчика

Добавить пост

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.