Все ниже производимые действия проходят на Ubuntu 14.04.4 Server amd64 и опираются на заметку где пошагово разобрана установка голой установки Asterisk.

Вот я и подошел к тому моменту когда собираемая, анализируемая информация перестала быть просто кашей в голове. Данная заметка шпаргалка самому себе. Ну что ж начну пожалуй своей повествование:

Asterisk поддерживает протокол SCCP посредством одного из двух модулей:

  • chan_skinny.so — базовый функционал SCCP. Модуль уже входит в состав Asterisk.
  • chan_sccp.so — расширенный функционал SCCP. Устанавливается отдельно.

Но сперва настраиваю точное время на сервере, хотя это нужно было сделать еще при установке сервера. Когда телефон будет подключен на нем будет точное время и текущая дата.

ekzorchik@srv-host:~$ sudo apt-get install ntp ntpdate -y

ekzorchik@srv-host:~$ sudo rm /etc/localtime

ekzorchik@srv-host:~$ sudo ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

ekzorchik@srv-host:~$ sudo nano /etc/ntp.conf

server pool.ntp.org

ekzorchik@srv-host:~$ sudo ntpdate pool.ntp.org

ekzorchik@srv-host:~$ sudo ntpdate -bs pool.ntp.org

ekzorchik@srv-host:~$ date

Sat Apr 2 10:08:04 MSK 2016

ekzorchik@srv-host:~$ sudo asterisk -r

Asterisk 13.7.2~dfsg-0~ppa1, Copyright (C) 1999 – 2014, Digium, Inc. and others.

Created by Mark Spencer <markster@digium.com>

Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show warranty’ for details.

This is free software, with components licensed under the GNU General Public

License version 2 and other licenses; you are welcome to redistribute it under

certain conditions. Type ‘core show license’ for details.

=========================================================================

Connected to Asterisk 13.7.2~dfsg-0~ppa1 currently running on srv-host (pid = 780)

srv-host*CLI> sccp show devices

No such command ‘sccp show devices’ (type ‘core show help sccp show’ for other possible commands)

ekzorchik@srv-host:~$ wget http://downloads.sourceforge.net/project/chan-sccp-b/Chan_SCCP-4.2.3_STABLE_r6728.tar.gz

Читаю файл README на предмет что необходимо проделать прежде чем подойти к процессу компиляции:

ekzorchik@srv-host:~$ sudo apt-get install autoconf automake make libtool m4 -y

После компилирую модуль SCCP которого в Asterisk нет.

ekzorchik@srv-phone:~$ tar zxf Chan_SCCP-4.2.3_STABLE_r6728.tar.gz

ekzorchik@srv-host:~$ cd Chan_SCCP-4.2.3_STABLE_r6728/

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ ./configure

configure: error: Cannot find pbx libraries – these are required.

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ sudo apt-get install asterisk-dev -y

в один прекрасный момент повторяя задокумментированные шаги столкнулся что не могу поставить пакет asterisk-dev

Err http://ppa.launchpad.net/jan-hoffmann/asterisk13/ubuntu/ trusty/main asterisk-dev all 1:13.7.2~dfsg-0~ppa1

404 Not Found

E: Failed to fetch http://ppa.launchpad.net/jan-hoffmann/asterisk13/ubuntu/pool/main/a/asterisk/asterisk-dev_13.7.2~dfsg-0~ppa1_all.deb 404 Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ sudo apt-get update  --fix-missing

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ sudo apt-get install asterisk-dev -y

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ ./configure

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ sudo make && sudo make install

ekzorchik@srv-host:~/Chan_SCCP-4.2.3_STABLE_r6728$ cd ~/

После включаем загрузку chan_sccp.so при загрузке Asterisk:

ekzorchik@srv-host:~$ sudo nano /etc/asterisk/modules.conf

noload => chan_skinny.so

load => chan_sccp.so

load => res_features.so

Сохраняем внесенные изменения.

ekzorchik@srv-host:~$ sudo cp Chan_SCCP-4.2.3_STABLE_r6728/conf/sccp.conf /etc/asterisk/sccp.conf

ekzorchik@srv-host:~$ sudo chown -R asterisk:asterisk /etc/asterisk/

ekzorchik@srv-host:~$ sudo asterisk -r

Asterisk 13.7.2~dfsg-0~ppa1, Copyright (C) 1999 – 2014, Digium, Inc. and others.

srv-host*CLI> core reload

srv-host*CLI> quit

Asterisk cleanly ending (0).

Executing last minute cleanups

ekzorchik@srv-host:~$ sudo reboot

После загрузки проверяю, что Asterisk видит модуль (SCCP) который я выше скомпилировал и добавил в систему:

ekzorchik@srv-host:~$ sudo asterisk -r

srv-host*CLI> module show like sccp

Module Description Use Count Status Support Level

chan_sccp.so Skinny Client Control Protocol (SCCP). R 0 Running unknown

1 modules loaded

srv-host*CLI> sccp show version

Skinny Client Control Protocol (SCCP). Release: 4.2.3 STABLE – 6728M (built by ‘ekzorchik’ on ‘2016-03-29 13:58:13 UTC’)

srv-host*CLI> sccp show devices

+— Devices ——————————————————————————————————————————————–+

| Descr Address Mac RegState Token RegTime Act Lines Nat |

+ ========================= ============================================ ================ ========== ===== ========================= === ===== ========= +

| Phone Number One — SEP001122334455 None No To Thu Jan 1 03:00:00 1970 No 0 Auto |

| Phone Number Two — SEP002244668800 None No To Thu Jan 1 03:00:00 1970 No 0 Auto |

В выводе выше значатся два дефолтных описания телефонов взятых из файла: /etc/asterisk/sccp.conf, для своей установки советую удалить данный файл и создать свой собственный.

Далее по заметке своего блога поднимаю tftpd, но все же ниже подробные шаги поднятия tftpd:

ekzorchik@srv-host:~$ sudo apt-get install tftpd-hpa -y

ekzorchik@srv-host:~$ sudo mkdir /tftpboot

ekzorchik@srv-host:~$ sudo chmod -R 777 /tftpboot/

ekzorchik@srv-host:~$ sudo chown -R nobody:nogroup /tftpboot/

ekzorchik@srv-host:~$ sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.backup

ekzorchik@srv-host:~$ sudo nano /etc/default/tftpd-hpa

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/tftpboot"

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="--secure --create"

ekzorchik@srv-host:~$ sudo service tftpd-hpa restart

tftpd-hpa stop/waiting

tftpd-hpa start/running, process 1379

ekzorchik@srv-host:~$ sudo netstat -tulpn | grep :69

udp 0 0 0.0.0.0:69 0.0.0.0:* 1663/in.tftpd

Чтобы проконтролировать кто подключается к данному tftp сервису нужно глянуть логи здесь:

ekzorchik@srv-host:~$ cat /var/log/syslog | grep tftp

На Mikrotik настраиваю специализированную Wifi сеть где авторизироваться могут только определенные устройства (ограничение по MAC адресу) и доступ из этой сети только к TFTP-серверу и по совместительству он же Asterisk:

После на данной Wifi сети активирую в настройках DHCP следующие параметры:

Winbox — ip&mac — user&pass — IP — DHCP-Server — вкладка Options — Add

  • Name: tftp
  • Code: 150
  • Valude: 10.7.8.122

после открываю вкладку Networks, выделяю сеть и левой кнопкой по ней два раза перехожу в ее настройки, где в параметре: DHCP Options: выбираю созданный параметр указывающий телефонам Cisco расположение TFTP сервера в сети для их конфигурации.

Далее подключаю телефон Cisco CP-7925G к созданной сети Wifi на Микротике, для этого можно задействовать мою заметку где я показываю как посредством Web-интерфейса настроить телефон или же только на телефоне обозначить к какой сети Wifi подключаться, вот например так: В главном меню когда включили телефон переходим в настройки (по умолчанию язык интерфейса Английский) Settings — Network Profiles — выбираю профиль Profile 1 и нажимаю клавишами View — WLAN Configuration. Теперь чтобы внести изменения нужно разблокировать телефон, т. е. Набрать следующие символы именно в такой последовательности: **# и нажать кнопку «Вызов» этой комбинацией я разблокирую настройки (выбираю соответствующую настройку нажимаю Change — выбираю и нажимаю Save), у меня:

  • SSID: cisco
  • Security Mode: Open
  • 802.11 Mode: 802.11b/g

Так хочу заменить, что если перейти в любой другой раздел настроек блокировка изменения будет активирована и ее также нужно будеть снять той комбинацией выше которую я указал

У меня телефон успешно подключился об этом говорит строка подключения устройства к wifi сети на микротике:

Успешная регистрация телефона Cisco CP-7925G на Микротике

Теперь нужно создать конфигурационные файлы для работы с телефонами Cisco CP-7925G

ekzorchik@srv-host:~$ nano /tftpboot/XMLDefault.cnf.xml

<Default>

<callManagerGroup>

<members>

<member priority="0">

<callManager>

<ports>

<ethernetPhonePort>2000</ethernetPhonePort>

<mgcpPorts>

<listen>2427</listen>

<keepAlive>2428</keepAlive>

</mgcpPorts>

</ports>

<processNodeName>10.7.8.122</processNodeName>

</callManager>

</member>

</members>

</callManagerGroup>

<authenticationURL></authenticationURL>

<directoryURL></directoryURL>

<idleURL></idleURL>

<informationURL></informationURL>

<messagesURL></messagesURL>

<servicesURL></servicesURL>

</Default>

Не забываем сохранить внесенные изменения.

ekzorchik@srv-host:~$ nano /tftpboot/SEPE02F6D647697.cnf.xml

<device>

<deviceProtocol>SCCP</deviceProtocol>

<sshUserId>root</sshUserId>

<sshPassword>cisco</sshPassword>

<devicePool>

<dateTimeSetting>

<dateTemplate>D.M.Y</dateTemplate>

<timeZone>GMT0</timeZone>

</dateTimeSetting>

<callManagerGroup>

<members>

<member priority="0">

<callManager>

<ports>

<ethernetPhonePort>2000</ethernetPhonePort>

</ports>

<processNodeName>10.7.8.122</processNodeName>

</callManager>

</member>

</members>

</callManagerGroup>

</devicePool>

<commonProfile>

<phonePassword></phonePassword>

<backgroundImageAccess>false</backgroundImageAccess>

<callLogBlfEnabled>0</callLogBlfEnabled>

</commonProfile>

<vendorConfig>

<disableSpeaker>false</disableSpeaker>

<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>

<pcPort>0</pcPort>

<settingsAccess>1</settingsAccess>

<garp>0</garp>

<voiceVlanAccess>0</voiceVlanAccess>

<videoCapability>0</videoCapability>

<autoSelectLineEnable>0</autoSelectLineEnable>

<webAccess>1</webAccess>

<spanToPCPort>1</spanToPCPort>

<loggingDisplay>1</loggingDisplay>

<loadServer></loadServer>

</vendorConfig>

<userLocale>

<name>Russian_Russian_Federation</name>

<uid></uid>

<langCode>ru_RU</langCode>

<winCharSet>utf-8</winCharSet>

</userLocale>

<networkLocale>Russian_Federation</networkLocale>

<networkLocaleInfo>

<name>Russian_Federation</name>

</networkLocaleInfo>

<deviceSecurityMode>1</deviceSecurityMode>

<idleTimeout>0</idleTimeout>

<directoryURL></directoryURL>

<servicesURL></servicesURL>

<idleURL></idleURL>

<messagesURL></messagesURL>

<proxyServerURL></proxyServerURL>

<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>

<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>

<dscpForCm2Dvce>96</dscpForCm2Dvce>

<transportLayerProtocol>2</transportLayerProtocol>

<capfAuthMode>0</capfAuthMode>

<capfList>

<capf>

<phonePort>3804</phonePort>

</capf>

</capfList>

<certHash></certHash>

<encrConfig>false</encrConfig>

</device>

Затем качаем с сайта cisco прошивку для имеющегося телефона, на момент написания данной заметки она значится как: CP7925G-1.4.8.4.TAR, но вот только скачать ее можно лишь имея привилигированный аккаунт на сайте Cisco, бесплатный же такой возможности не дают, так что ищите на просторах интернета либо последнюю либо любую, к примеру я использую CP7925G-1.4.7.3.TAR, распаковываю данный архив в tftpboot:

aollo@system:~$ scp /home/aollo/Documents/tips_narabotki/tips_cisco/CP7925G-1.4.7.3/* ekzorchik@10.7.8.122:/tftpboot

После поправляю права на каталог /tftpboot:

ekzorchik@srv-host:~$ sudo chmod -R 777 /tftpboot/

ekzorchik@srv-host:~$ sudo sudo chown -R nobody:nogroup /tftpboot/

ekzorchik@srv-host:~$ sudo service tftpd-hpa restart

ekzorchik@srv-host:~$ sudo netstat -tulpn | grep :69

udp 0 0 0.0.0.0:69 0.0.0.0:* 1777/in.tftpd

На заметку: чтобы телефон перечитал получаемые файлы через tftp его нужно выключить и включить.

Также нужно поправить разрешения на доступ mikrotik’а к Asteris’ку, потом как сейчас если обратить внимание на консоль asterisk можно заметить ошибки в доступе:

ekzorchik@srv-host:~$ sudo asterisk -r

[Apr 3 13:22:18] WARNING[1017]: sccp_socket.c:1140 sccp_accept_connection: SCCP: Rejecting Connection: Ip-address ‘10.7.8.128:1522’ denied. Check general deny/permit settings (deny:0.0.0.0/0.0.0.0,permit:192.168.1.0/255.255.255.0,).

srv-host*CLI> quit

Asterisk cleanly ending (0).

Executing last minute cleanups

ekzorchik@srv-host:~$ sudo nano /etc/asterisk/sccp.conf

через «Поиск и Замена» меням строки:

192.168.1.0/255.255.255.0

192.168.1.5/255.255.255.255

на

0.0.0.0/0.0.0.0

ekzorchik@srv-host:~$ sudo chown -R asterisk:asterisk /etc/asterisk/

ekzorchik@srv-host:~$ sudo service asterisk restart

Теперь заходим в консоль Asterisk и проверяем, что cisco-телефон успешно подключился:

ekzorchik@srv-host:~$ sudo asterisk -r

srv-host*CLI> sccp show devices

+— Devices ——————————————————————————————————————————————–+

| Descr Address Mac RegState Token RegTime Act Lines Nat |

+ ========================= ============================================ ================ ========== ===== ========================= === ===== ========= +

| Phone Number One — SEP001122334455 None No To Thu Jan 1 03:00:00 1970 No 0 Auto |

| Phone Number Two — SEP002244668800 None No To Thu Jan 1 03:00:00 1970 No 0 Auto |

| <not set> 10.7.8.128:1763 SEPE02F6D647697 Progress No To Sun Apr 3 13:27:06 2016 No 1 (Auto)On |

+——————————————————————————————————————————————————–+

Отлично, как видно в выводе значится MAC-адрес (E02F6D647697) моего телефона Cisco CP-7925 который успешно подключился к серверу Asterisk. Я долго шел чтобы разобрать все шаги которые нужно было применить чтобы самостоятельно воспроизвести то, что уже работало в компании настроенное одним человек только который не очень то и любил все докумментировать, а тем более объяснить как оно тут вообще устроено. А из всего это случались частые обрывы, недовольство пользователей, руководства, но сейчас когда работаю я такого нет. Только порядок и ни какого хаоса. В дальнейших заметках я рассмотрю много интересных задач с которыми мне пришлос столкнуться самостоятельно. На этом я прощаюсь и до новых встреч, с уважением автор блога — Олло Александр (aka ekzorchik).

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru