Всем доброго времени суток.
IP телефония вообще достаточно интересная штука, однако для человека, столкнувшегося с подобной системой в первый раз, процесс настройки может показаться пугающе трудным. Подробнее о том, как и зачем устанавливать программные IP-АТС можно почитать где-нибудь еще (благо информации по этому вопросу предостаточно), я же хотел более подробно остановиться на вопросе ее интеграции с городскими SIP-номерами одного Казахстанского провайдера.

Я думаю, сразу стоит упомянуть, что ни какого отношения к этому провайдеру я не имею (за исключением того, что являюсь пользователем их услуг).
Что нам потребуется:
- Elastix 2.4.0 Stable 32 bit
- софт-фон zoiper или родной клиент для Android
- Telnet/SSH Client
- SFTP-клиент
- вторая сетевая карта
Для ясности:
- Казактелеком — Казахстанский интернет и SIP провайдер
- Megaline — ADSL-интернет от Казактелекома
- ID Phone — SIP-телефония от Казактелекома
Итак. Наша компания получила в свое распоряжение 2 SIP-номера по 2 линии на каждом. Под рукой оказался старенький системник на который и был успешно установлен Elastix. Тут то и началось самое интересное.
Часть 1. Настройка сети.
Немного теории: для обеспечения качества связи, Казактелеком делит физический канал ADSL на 2 логических, не влияющих друг на друга. Получается, что с ADSL-модема будет выходить два интерфейса, один для интернета, другой для ID Phone (SIP). Соответственно Elastix тоже должен быть подключен к обоим этим интерфейсам. Но тут возникает еще одна проблема. ID Phone раздает IP-адрес по DHCP, поэтому интерфейс на Elastix должен быть настроен на получение IP по DHCP. Второй интерфейс служит для доступа в интернет, соответственно должен иметь Default Gateway — основной шлюз. Выходит, что основной шлюз прописан на обоих интерфейсах. Для решения данной проблемы и было принято решение использовать вторую сетевую карту. Идея в том, что второй сетевой картой астериск подключается напрямую в ADSL-модем в порты для ID Phone. Сетевая карта получает динамический IP-адрес типа 10.20.130.11. Проблема в том, что в этой ситуации сервер Elastix обретает два Default Gateway. Один уже ранее прописанный на Megaline 192.168.100.1 и второй, полученный по DHCP из сети ID Phone. Трафик начинает блуждать, ничего не работает. Как быть?
Прежде всего, идем в настройки ADSL-роутера (в моем случае 192.168.100.1) и выключаем DHCP для одного из Ethernet-портов (в моем случае 4-й), в который будет подключен Elastix напрямую из второй сетевой карты. На моем TP-Link TD-W8951ND это выглядит следующим образом:

Подключаем вторую сетевую карту (если еще не сделали этого ранее) и через SSH коннектимся к серверу Elastix, после чего вводим команду
ifconfig
Результат выглядит примерно так:

Видим, что устройство под названием eth0 имеет статичный IP (в моем случае это 192.168.100.6), по которому мы подключаемся к web-интерфейсу. Значит, сетевая карта, которую мы собираемся настроить на работу с DHCP Казактелекома - eth1.
Оказывается, в отличие от винды, линукс можно приучить получать по DHCP не все, что предлагается, а определенные части. Такие, как IP-адрес, домен, DNS-сервера и т.д. НО НЕ Default Gateway! Для этого, используя SSH-клиент подключаемся к серверу и создаем файл под названием
/etc/dhclient-eth<X>.conf
где X – номер вашей сетевой карты. В моем случае это
/etc/dhclient-eth1.conf
пишем:
send host-name "asterisk";
request subnet-mask, broadcast-address, time-offset, host-name;
Теперь в SSH-клиенте перезапускаем сервис сети командой
service network restart
После этого сетевая карта получит адрес по DHCP, но уже без шлюза по умолчанию. Далее создаем файл
/etc/sysconfig/network-scripts/route-eth<X> (без расширения)
, в котором пишем:GATEWAY0=192.168.100.6
NETMASK0=255.0.0.0
ADDRESS0=10.0.0.0
Далее. Изменяем содержимое файлов:
/etc/sysconfig/network-scripts/ifcfg-eth0
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller DEVICE="eth0" BOOTPROTO=static HWADDR=<b>ваш mac-адрес</b> ONBOOT=yes TYPE=Ethernet IPADDR=192.168.100.6 NETMASK=255.255.255.0 NOZEROCONF=yes BROADCAST=192.168.100.255 NETWORK=192.168.100.0 DEFROUTE=yes NM_CONTROLLED="no" NAME="eth0" # # the GATEWAY is sometimes in: /etc/sysconfig/network GATEWAY=192.168.100.1
/etc/sysconfig/network-scripts/ifcfg-eth1
# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ DEVICE=eth1 BOOTPROTO=dhcp ONBOOT=yes HWADDR=<b>ваш mac-адрес</b> TYPE=Ethernet IPADDR= NETMASK= NOZEROCONF=yes NM_CONTROLLED="no"
/etc/sysconfig/network
NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=host.asterisk GATEWAY=192.168.100.1 DNS1=192.168.100.1 DNS2=8.8.8.8
/etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost 192.168.100.6 localhost.localdomain
На этом настройка сетевых карт завершена. На всякий случай, еще раз для ясности:
192.168.100.1 – статичный адрес ADSL-модема
192.168.100.6 – статичный адрес сервера Elastix
Часть 2. Настройка Elastix
Открываем личный кабинет на idphone.kz и выбираем нужный номер телефона. В меню «Персональные данные -> Настройки оборудования или телефона» видим примерно такое окно

Не забудьте нажать кнопку «сменить пароль».
Идем в Elastix-> PBX-> Trunks-> Add SIP Trunk
- Trunk Name: указываете любой. Я использую MegalineTrunk
- Outbound Caller ID: номер телефона. В моем случае это 39****6
- PEER Details:
host=sip.telecom.kz username=922350056 type=friend nat=no qualify=yes canreinvite=nonat insecure=port,invite&invite fromuser=922350056 fromdomain=sip.telecom.kz secret=8GZepVd3 dtmfmode=rfc2833 context=from-trunk disallow=all allow=alaw trunkstyle=customvoip
- Register String: 922350056:8GZepVd3:922350056@sip.telecom.kz/922350056
Идем в Elastix -> PBX -> Inbound Routes -> Add Incoming Route
- Description: не имеет значения, я использовал номер телефона, при наборе которого должен сработать Elastix
- DID Number: 922350056
- Set Destination: тут указывается куда нужно будет переключить абонента. Можно перевести звонок на конкретный Extension или включить голосовое меню (IVR).
Outbound Routes -> Add Route
- Dial Patterns that will use this Route: тут указывается шаблон номеров для вашего города. В моем случае это (empty) + empty | [[23]XXXXXX/empty]
Теперь идем в Elastix -> System -> Network -> Edit Network Parameters
В моем случае, настройки выглядят следующим образом:

Параметр Host указывается произвольно. В принципе, ни на что не влияет.
В конечном счете должно получиться что-то вроде этого:
