Краткие заметки по дружбе 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Монтируем флешку в папку /mnt
Device Boot Start End Sectors Size Id Type
/dev/sdb4 * 256 31129599 31129344 14,9G c W95 FAT32 (LBA)
# 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С помощью mc копируем бинарник dahdi_tool в /usr/sbin
# 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 ..
Эта утилита почему то не компилируется с 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.confload = 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У меня OpenVox D110P. Он определяется так.
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
Видим лишний драйвер netjet. Его можно забанить в системе, если dahdi_hardware ругается на него. Я не стал.
# dahdi_hardwareВот если тут жалуется на netjet, тогда баним
pci:0000:04:00.0 wcte11xp+ e159:0001 Digium Wildcard TE110P T1/E1 Board
Что бы забанить надо пойти в
/etc/modprobe.d/blacklist.conf
и там вбить
blacklist netjet
и перезагрузить систему
Позволяет смотреть сконфигурированные каналы dahdi:
# dahdi_tool
Смотрим прерывания:
# cat /proc/interruptsДрайвер висит на отдельном прерывании, всё ок. Функции ACPI не мешают. Но если на этом же прерывании висят какие нибудь USB, SATA, то нормальной работы карты можно не ждать. В современных биосах (хотя материнка с простым PCI это та ещё современность, да уж) нет настройки прерываний. Так что остаётся молиться и надеятся. Можно попробовать повесить обработку прерывания на другое ядро. Мне пришлось менять материнку.
17: 5727 7551876 IO-APIC 17-fasteoi wcte11xp
Далее настраиваем диалплан в астериск, как обычно:
exten => s,1,Dial(Dahdi/g1/101,,tT)
это звонок в E1 на панасоник на номер 101, как пример
Вот такая вот история. Надеюсь, я изрядно повеселил Вас в это прекрасное субботнее утро. Тешу себя надеждой, что данное обобщение общесетевой мудрости кому то когда то пригодится. На очереди - борьба с АТС Панасоник, как только карта PRI30 дойдёт. Историю этой борьбы я так же изложу на пикабу.
Всем удачи, счастья, и т.д.
Лига Сисадминов
1.5K поста17.6K подписчика
Правила сообщества
Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.