В данной инструкции описано как с нуля установить и произвести первоначальную настройку компьютерной телефонии на базе «Asterisk» с подключением к услуге «iD Phone» компании «Казахтелеком».
Некоторые идеи я почерпнул из этой статьи: http://habrahabr.ru/post/198684/ (большое спасибо автору за это), но:
- во-первых, по указанной инструкции система у меня не заработала;
- во-вторых, не со всеми решениями в ней я согласен;
- в-третьих, мы будем настраивать не «Elastix», а «AsteriskNow»;
- в-четвертых, я постарался написать инструкцию максимально подробной — для людей мало разбирающихся в Linux-системах и в «Asterisk» (каковым я и сам являюсь).
Дано:
- Операционная система будет установлена с нуля. Использован будет дистрибутив «AsteriskNOW» — это операционная система «CentOS» с предустановленным программным обеспечением «Asterisk» и веб-интерфейсом для его управления «FreePBX». Другими словами в данной инструкции отсутствует блок, в котором была бы описана установка «Asterisk» на уже развернутой Linux-системе.
- «Казахтелеком» предоставляет услугу «iD Phone» не через Интернет, а подключая абонентов к своей специальной SIP-сети. Физически, конечно, это чаще всего один канал (ADSL или оптика) вместе с Интернет и/или «iD TV». Роутер же отдает предоставляемые услуги на разные порты. Считаем, что у нас уже есть настроенный роутер, который с одного порта отдает Интернет, а с другого — «iD Phone».
- Компьютер имеет две сетевых карты: одна из них смотрит в Интернет, другая — в SIP-сеть «Казахтелекома».
Задача:
Получить работающую IP-АТС, имеющую доступ в Интернет.
Решение:
Скачиваем «AsteriskNOW» отсюда: http://www.asterisk.org/downloads
Устанавливаем «AsteriskNOW»:
Входим в систему под пользователем root и паролем, который задали при установке.
Для редактирования файлов я использую файловый менеджер Midnight Commander. Для его установки необходимо дать следующую команду:
yum install mc
Эта команда сработает, если ваш компьютер уже получил доступ к Интернету. Это может не произойти по причинам описанным ниже. Тогда можно временно отключить сетевой кабель от интерфейса, который смотрит в SIP-сеть «Казахтелекома».
Соглашаемся на всё. Когда понадобиться отредактировать какой-нибудь файл, запускаем Midnight Commander командой:
mc
Проверяем, что работают оба сетевых интерфейса. Даем команду:
ifconfig
У меня такой вывод:
eth0 Link encap:Ethernet HWaddr 00:15:5D:7B:4F:18
inet addr:192.168.0.52 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe7b:4f18/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5695 errors:0 dropped:0 overruns:0 frame:0
TX packets:3363 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7623500 (7.2 MiB) TX bytes:241151 (235.4 KiB)
Interrupt:9 Base address:0xc000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Это обозначает, что активен только один интерфейс. Активируем второй интерфейс. Для этого необходимо отредактировать файл "/etc/sysconfig/network-scripts/ifcfg-eth1". Значение параметра ONBOOT необходимо изменить с «no» на «yes».
Даем команду на перезапуск сетевых интерфейсов:
service network restart
Еще раз даем команду:
ifconfig
И получаем уже новый вывод:
eth0 Link encap:Ethernet HWaddr 00:15:5D:7B:4F:18
inet addr:192.168.0.52 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe7b:4f18/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5981 errors:0 dropped:0 overruns:0 frame:0
TX packets:3503 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7646872 (7.2 MiB) TX bytes:281444 (274.8 KiB)
Interrupt:9 Base address:0xc000
eth1 Link encap:Ethernet HWaddr 00:15:5D:7B:4F:19
inet addr:10.2.X.X Bcast:255.255.255.255 Mask:255.255.255.0
inet6 addr: fe80::215:5dff:fe7b:4f19/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:684 (684.0 b) TX bytes:4379 (4.2 KiB)
Interrupt:9 Base address:0xe000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Теперь видно, что активировались оба интерфейса. Разберемся, который из них куда смотрит.
eth0 получил адрес из подсети 192.168.0.X — это интерфейс, который смотрит в Интернет. Именно из этой подсети раздает адреса DHCP-сервер роутера.
eth1 получил адрес из подсети 10.X.X.X — это интерфейс, который смотрит в SIP-сеть «Казахтелекома». Именно из этой подсети раздает адреса DHCP-сервер «Казахтелекома».
А вот теперь мы приблизились к проблеме, которая мешает одновременному функционированию доступа к Интернету и к SIP-сети «Казахтелекома». Дело в том, что на первый интерфейс у нас назначен шлюз по умолчанию 192.168.0.1 (IP-адрес роутера). Но вместе с получением IP-адреса на второй интерфейс от DHCP-сервера «Казахтелекома» приходит адрес шлюза, который перебивает установленный на первом интерфейсе. После этого весь Интернет-трафик начинает идти в SIP-сеть «Казахтелекома». Для устранения этой проблемы заставим второй интерфейс получать от DHCP-сервера только те параметры, которые не помешают работе первого интерфейса. Для этого создаем файл /etc/dhclient-eth1.conf — это конфигурационной файл DHCP-клиента. В файл необходимо добавить следующие строки:
reject 192.168.0.1;
send host-name "asterisk";
request subnet-mask, broadcast-address, time-offset, host-name;
По поводу первой строки. Была у меня проблема с одним из роутеров D-Link — даже при отключенном DHCP-сервере роутер присваивал адрес на интерфейс, подключенный к SIP-сети «Казахтелекома». Первая строка конфигурационного файла запрещает интерфейсу eth1 получать IP-адрес от DHCP-сервера с адреса 192.168.0.1.
Итак, мы добились того, что шлюзом по умолчанию остается роутер. Это решение порождает другую проблему — часть трафика телефонии должна была бы уходить в SIP-сеть, но будет уходить в Интернет. Для нормального функционирования телефонии необходимо, чтобы в интерфейс SIP-сети уходил не только трафик, имеющий назначением подсеть 10.2.X.Х (в моем случае), а весь трафик для подсети 10.Х.Х.Х. Для этого создаем файл /etc/sysconfig/network-scripts/route-eth1 и добавляем в него следующую строку:
10.0.0.0/8 dev eth1
Настраиваем статический IP-адрес на интерфейсе, который смотрит в Интернет, и по совместительству в локальную сеть, где в будущем будут развернуты SIP-клиенты нашей IP-АТС. Для этого даем команду:
system-config-network
Даем команду на перезапуск сетевых интерфейсов:
service network restart
В дальнейшей настройки нашей IP-АТС мы будем неоднократно обращаться к имени SIP-сервера «Казахтелекома»: sip.telecom.kz. При текущей настройке нашего компьютера это имя разрешается в белый IP-адрес 92.46.61.21. Нам необходимо добиться того, чтобы это имя разрешалось в IP-адрес SIP-сети «Казахтелекома».
Сначала необходимо узнать внутренний IP-адрес сервера, который определен для вашего региона. Для этого открываем следующую страницу: http://idphone.kz/?page_id=1010. На ней есть таблица адресов Outbound Proxy при настройке услуги iD Phone через pvc 0/41. Именно в ней ищем необходимый нам адрес.
На всякий случай процитирую эту таблицу здесь:
Актау 10.0.0.44
Актобе 10.0.0.36
Алматытелеком 10.0.0.12
Астанателеком 10.0.0.20
Атырау 10.0.0.28
Караганда 10.0.0.148
Кокшетау 10.0.0.140
Костанай 10.0.0.129
Кызылорда 10.0.0.60
Павлодар 10.0.0.108
Петропавловск 10.0.0.116
Семей 10.0.0.92
Шымкент 10.0.0.68
Талды-Корган 10.0.0.84
Тараз 10.0.0.76
Уральск 10.0.0.52
Усть-Каменогорск 10.0.0.100
Жезказган 10.0.0.156
Теперь добавляем в файл /etc/hosts такую строку:
10.0.0.116 sip.telecom.kz
Это для Петропавловска (мой случай). Замените адрес 10.0.0.116 на соответствующий вашему региону.
Убеждаемся, что все работает правильно. Даем команду:
ping 8.8.8.8
Если пинг идет, значит компьютер имеет доступ к Интернету.
Даем команду:
ping ya.ru
Если имя разрешилось, значит DNS-работает корректно.
Даем команду:
ping 10.0.0.1
Если пинг идет, значит компьютер имеет доступ к SIP-сети «Казахтелекома». На момент написания статьи в «Казахтелекомовской» сети пинговались адреса 10.0.0.1, 10.0.0.2, 10.0.0.3. Но, на самом деле отсутствие пинга не может 100% говорить о том, что у вас проблемы с настройкой. Дело в том, что «Казахтелеком» может в любой момент закрыть пинг на своих серверах. Например, адрес 10.0.0.116 на момент написания статьи не пинговался.
Даем команду:
ping sip.telecom.kz
Если имя разрешается в тот адрес, что задали в файле /etc/hosts, значит настройка этого момента произведена верно. Как написано выше, пинг на sip.telecom.kz может не идти.
Произведем обновление модулей операционной системы. Для этого даем команду:
yum update
На все вопросы системы соглашаемся.
Мы закончили с настройкой операционной системы и теперь пришло время переходить к настройке «Asterisk». Для начала нам необходимо выяснить наши параметры подключения к SIP-серверу «Казахтелекома». Для этого идем в личный кабинет услуги «ID Phone»: https://cabinet.idphone.kz. Будьте внимательны: этот сайт открывается только для пользователей Интернета от «Казахтелекома». Т.е. если вы, например, счастливый пользователь проводного Интернета от «Билайна», то кабинет у вас не откроется.
В кабинете следуем к разделу с параметрами подключения:
Значения в полях «Линия/Порт» и «Логин» у меня одинаковые. У вас тоже, скорее всего, т.к. поля эти для редактирования закрыты. Договоримся в дальнейшем это значение называть <SIP-логин>. Ну, а значение из поля «Пароль» будем называть <SIP-пароль>.
Открываем веб-интерфейс управления «Asterisk», который называется «FreePBX». Для этого на любом компьютере в локальной сети открываем веб-обозреватель и в адресной строке набираем адрес, который присвоили «Asterisk». В нашем случае:
192.168.0.3
Идем настраивать транк, т.е. соединение между нашим «Asterisk» и SIP-сервером «Казахтелекома»:
Предустановленные параметры входа в админку: логин — admin, пароль — admin:
В раздел «опции для PEER» вставляем следующий текст:
type=friend
username=<SIP-логин>
secret=<SIP-пароль>
host=sip.telecom.kz
nat=no
fromuser=<SIP-логин>
fromdomain=sip.telecom.kz
dtmfmode=rfc2833
insecure=very
canreinvite=no
qualify=no
disallow=all
allow=alaw
В раздел «опции USER» вставляем следующий текст:
fromuser=<SIP-логин>
canreinvite=no
secret=<SIP-пароль>
type=user
context=from-trunk
Поле «Строка регистрации» заполняем следующей строкой:
<SIP-логин>:<SIP-пароль>@sip.telecom.kz/502000
Остальные поля я заполняю значением телефонного номера и производными от него:
Жмем большую красную кнопку «Apply Config» (не забываем ее жать каждый раз, как она появляется — без этого наши настройки не заработают):
Проверяем в консоли операционной системы, что транк зарегистрировался. Для этого сначала надо попасть в интерфейс командной строки «Asterisk». Набираем:
asterisk -r
Далее набираем:
sip show registry
Должен отобразиться наш транк и его состояние должно быть Registered. Вот пример моего вывода:
[root@asterisk ~]# asterisk -r
Privilege escalation protection disabled!
See https://wiki.asterisk.org/wiki/x/1gKfAQ for more details.
Asterisk 11.6.1, Copyright (C) 1999 - 2013 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 11.6.1 currently running on asterisk (pid = 1607)
asterisk*CLI> sip show registry
Host dnsmgr Username Refresh State Reg.Time
sip.telecom.kz:5060 N XXXXXXXXX 85 Registered Sun, 22 Dec 2013 13:53:45
1 SIP registrations.
Создаем исходящую маршрутизацию (объясняем системе, что делать, когда кто-то из пользователей АТС пытается позвонить наружу):
В настройке исходящего маршрута необходимо указать:
- его название («outside», например);
- шаблон номера, по которому будет срабатывать этот маршрут (шаблон «9|.» обозначает, что все номера, которые начинаются на «9» будут отработаны этим маршрутом, при этом девятка будет убрана из номера, когда номер пойдет в транк);
- транк, который мы создали ранее, и в который мы хотим отправлять все наши звонки («502000»).
Создаем внутренний номер:
В настройках внутреннего номер необходимо указать:
- сам номер (например, «101»);
- как будет отображаться звонящий с этого номера на экране (например, так же «101»);
- пароль внутреннего номера (минимум 6 символов, минимум две буквы, минимум две цифры — например, «pwd101»).
Создаем входящую маршрутизацию (объясняем системе, что делать, когда снаружи кто-то позвонит на наш транк):
В настройках входящего маршрута необходимо указать:
- его описание (например, «inside»);
- куда отправлять входящий звонок (в нашем случае отправляем на внутренний номер «101»).
Ну вот мы и закончили настраивать нашу АТС. Пришло время проверить, как все работает. Для этого установим софт-фон и зарегистрируемся на нашей АТС за внутренним номером «101».
Качаем «X-lite» отсюда http://www.counterpath.com/x-lite-for-windows-download.html. Устанавливаем на одном из компьютеров локальной сети.
Настраиваем «X-lite»:
В настройках аккаунта указываем:
- внутренний номер, за которым мы хотим зарегистрироваться (в нашем случае «101»);
- адрес IP-АТС в локальной сети (в нашем случае «192.168.0.3»);
- пароль внутреннего номера (в нашем случае «pwd101»).
Если мы все сделали правильно, то в статусе софт-фона появится «Available»:
А вот теперь действительно все! Пробуем позвонить с софт-фона в город, а потом с города, на наш номер «ID Phone».
Автор: MaxTarasov