Рубрика:
IP-телефония
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
ДМИТРИЙ НЕСТЕРКИН, инженер, системный администратор ООО «Телисет-С», имеет сертификат Microsoft MCDST. Сфера интересов: сетевые технологии, программное обеспечение с открытым исходным кодом
Перенос телефонных линий между офисами на базе IP-АТС Asterisk и Linksys
В последнее время возможности классической телефонии перестают удовлетворять нужды бизнеса, и на смену ей приходит IP-телефония
Так, например, перед нашей компанией встала задача сохранения телефонных номеров, арендованных для старого офиса, после переезда в новый. Задача осложнялась тем, что данные номера были именно арендованы, а не выкуплены в собственность. В результате с прежним арендодателем была достигнута договоренность о возможности размещения нашего оборудования на их площадке и перенаправлении наших трех телефонных линий с помощью технологии VoIP.
Для реализации идеи было выбрано оборудование:
- Linksys SPA400 (голосовой шлюз с 4 FXO-портами);
- Linksys SPA8000 (голосовой шлюз с 8 FXS-портами);
- Сервер IP-телефонии на базе Asterisk (в качестве конкретной реализации был выбран Elastix 1.6-13).
Постановка задачи
Теперь рассмотрим топологию сети (см. рис. 1). В нашем примере будут использоваться две подсети, объединенные посредством VPN.
Рисунок 1. Схема организации IP-телефонии между офисами
- Подсеть 1 – 192.168.10.0/27 – это «новый» офис, где расположены сервер Asterisk и телефоны сотрудников. Сервер Asterisk имеет внутренний IP-адрес 192.168.10.5 и внешний IP-адрес, который будем условно обозначать, как 12.34.56.78. Голосовой шлюз Linksys SPA8000 имеет IP-адрес 192.168.10.8.
- Подсеть 2 – 192.168.10.32/27 – это «старый» офис, где установлен голосовой шлюз Linksys SPA400 с IP-адресом 192.168.20.40 и маршрутизатор с внешним IP-адресом, также условно принимаемым, как 87.65.43.21 и внутренним IP-адресом 192.168.10.33.
Данные подсети отделены от «компьютерной» локальной сети офиса (192.168.1.0/24) с целью исключения возможного влияния передаваемых потоков данных на качество голосовой связи.
Голосовой шлюз Linksys SPA400 был помещен вместе с нашим маршрутизатором, создающим VPN-туннель в новый офис, на площадку прежнего арендодателя. VPN-туннель устанавливается на внешний IP-адрес сервера IP-телефонии. Для IP-телефонии была также проведена дополнительная выделенная линия доступа в Интернет (в качестве основного канала доступа в Интернет мы используем WiMax, а качество приема сигнала зачастую заметно падает, что может привести к неудовлетворительному качеству голосовой связи).
Компания Linksys заявляет, что шлюз SPA400 совместим только с их собственной IP-АТС SPA9000, однако в реальности это не совсем справедливо и позволило нам сэкономить на оборудовании, т.к. нам требовалось всего лишь 5 внутренних телефонных линий и уже имелись аналоговые телефонные аппараты.
Однако, не все так радужно. Дело в том, что данный шлюз не является полноценным SIP-клиентом – он не способен сам регистрироваться на других SIP-устройствах и лишь позволяет зарегистрироваться на нем. Никаких настроек, кроме самых базовых, для настройки SIP-протокола в нем не предусмотрено. Более того, изначально, по замыслу разработчиков, это – транк без возможности ручного назначения линий. В результате его использование автоматически требует участия какой-либо IP-АТС для коммутации звонков.
IP-АТС Asterisk позволяет организовать практически любые сервисы, которые могут потребоваться сотрудникам компании: интерактивное голосовое меню, голосовая почта, переадресация и перехват вызовов, уведомления о звонках на электронную почту и т.д.
Устанавливаем на наш сервер (Intel® Pentium® 4 CPU 2.66 ГГц, 1 Гб RAM, 80 Гб HDD) Elastix. Установка практически полностью автоматизирована и даже в ручном режиме задает минимум вопросов. Дистрибутив основан на CentOS 5.3 и использует его репозитарии. Поэтому при необходимости можно легко установить любое необходимое ПО через менеджер пакетов YUM. После установки управлять сервером IP-телефонии можно будет через веб-интерфейс. По умолчанию учетные данные для входа в конфигурацию таковы: имя пользователя – admin, пароль – palosanto.
Настройка сервера IP-телефонии
Сначала прописываем настройки голосовых шлюзов на сервере IP-телефонии. Для этого изменяем конфигурационный файл extentions_custom.conf:
;Настройки SPA8000
;Этот контекст мы отвели для внутренних номеров, вписываемых вручную [office]
;Стандартный контекст Elastix для добавочных номеров include => from-internal-custom exten => 8001,1,Dial(SIP/8001,,t) exten => 8002,1,Dial(SIP/8002,,t) exten => 8003,1,Dial(SIP/8003,,t) exten => 8004,1,Dial(SIP/8004,,t) exten => 8005,1,Dial(SIP/8005,,t) exten => 8006,1,Dial(SIP/8006,,t) exten => 8007,1,Dial(SIP/8007,,t) exten => 8008,1,Dial(SIP/8008,,t)
;Этот контекст мы отвели под городские линии [from-pstn]
;По умолчанию звонок приходит секретарю на номер 8001 exten=>spa400,n,Goto(office,8001,1)
Через веб-интерфейс Elastix добавляем добавочные номера в соответствии с настройками SPA8000 (PBX-PBX Configuration-Extensions) и транк для SPA400 (PBX-PBX Configuration-Trunks). Обязательно нужно указать параметры транка:
canreinvite=no context=from-trunk dtmfmode=rfc2833 host=192.168.10.40 incominglimit=4 nat=yes port=5060 qualify=yes type=friend username=spa400
и строку регистрации:
register=spa400@192.168.10.40/spa400 [spa400] type=friend user=spa400 ;IP-адрес SPA400 host=192.168.20.40 dtmfmode=rfc2833 canreinvite=no context=from-trunk insecure=very
В результате в файле sip_additional.conf должны появиться соответствующие записи:
;Имя транка для SPA400 [spa400] disallow=all ;Мы используем кодек G.711U allow=ulaw canreinvite=no context=from-trunk dtmfmode=rfc2833 host=192.168.10.40 incominglimit=4 nat=yes port=5060 qualify=yes type=friend ;Совпадает с именем пользователя в настройках SPA400 username=spa400
;Один из добавочных номеров, добавленный через веб-интерфейс [1001] deny=0.0.0.0/0.0.0.0 type=friend secret=P@ssw0rd qualify=yes port=5060 pickupgroup= permit=0.0.0.0/0.0.0.0 nat=yes mailbox=1001@device host=dynamic dtmfmode=rfc2833 dial=SIP/1001 ;В нашем случае можно также указать контекст office context=from-internal canreinvite=no callgroup= callerid=device <1001> accountcode= call-limit=50
Также прописываем правила входящей (Inbound Routing) и исходящей маршрутизации(Outbound Routing) с указанием шаблонов номеров, например:
- 9|8XXXXXXXXXX;
- 9|ZXXXXXX.
Здесь символ «|» отделяет префикс, который не передается в телефонную линию; «X» – цифры от 0 до 9; «Z» – цифры от 1 до 9.
SPA400, по замыслу разработчиков, является транком, у которого отсутствует возможность ручного выбора линий. Однако, в последней версии микропрограммы 1.1.2.2 такая возможность появилась. Для реализации выбора линий необходимо выполнить следующие действия.
Через веб-интерфейс Elastix добавляем 4 входящих маршрута (Inbound routes) . Каждый маршрут соответствует порту на SPA400. В параметрах маршрута указываем значение DID равным идентификатору порта в конфигурации самого шлюза.
Для исходящей маршрутизации создаем 4 пользовательских (custom) транка, привязанных к «основному» транку SPA400. В параметрах каждого транка указываем число каналов (Maximum channels) равным 1 и указываем строку вызова (Custom dial string): Local/$OUTNUM$
@from-trunk-spa400-X
где X – номер порта.
В файле extensions_custom.conf вручную вписываем контексты для каждого порта:
;Контекст для порта №1 [from-trunk-spa400-1] exten => _1.,1,Dial(SIP/spa400/L1${EXTEN}) exten => _1.,n,Congestion
Здесь spa400 – это имя «основного» транка SPA400, L1 – номер порта (1).
После внесения всех транков в конфигурацию в меню Исходящие маршруты (Outbound routes) выбираем порядок использования телефонных линий.
На этом настройка IP-АТС закончена.
Настройка голосовых шлюзов
Первым идет Linksys SPA8000 (настройки производились в режиме Admin login, advanced).
Во вкладке Router нас интересует подменю WAN Setup. Здесь мы настраиваем параметры локальной сети и шлюз в Интернет. В остальных подменю в большинстве случаев можно ничего не менять.
На вкладке Voice настраиваем непосредственно параметры телефонии. В подменю SIP можно при необходимости провести тонкую настройку SIP-протокола (используемые порты, предпочитаемые кодеки и т.д.).
В подменю Regional полезным может оказаться раздел Miscellaneous, в котором можно указать параметры ваших офисных телефонных линий, если они по каким-то причинам не совсем стандартные (например, низкое сопротивление).
Далее настраиваем телефонные порты (линии) L1-L8. Здесь стоит описать настройку поподробнее.
В разделе Proxy and Registration мы заполняем поле Proxy – вписываем сюда IP-адрес сервера IP-телефонии на базе Asterisk.
В разделе Subscriber Information заполняем поля:
- Display Name – отображаемое имя абонента;
- User ID – добавочный номер;
- Password – пароль.
Для успешной регистрации User ID и пароль должны совпадать с добавочным номером и паролем в настройках Asterisk. В разделе Audio Configuration необходимо установить для параметра DTMF Tx Mode значение normal.
Рисунок 2. Основные параметры настройки добавочного номера
Если все прошло удачно, вы должны получить что-то вроде этого (см. рис. 3). У линии, статус которой отображен на рисунке, состояние Idle и тон в значении none, т.к. к ней не подключен телефонный аппарат.
Рисунок 3. Информация о состоянии шлюза Linksys SPA8000
Далее настраиваем Linksys SPA400. Настройки данного шлюза крайне скупы, так как его самостоятельное использование производителем не предполагается. В пределах же данной статьи нас интересует исключительно вкладка Setup.
В подменю Basic Setup прописываем сетевые настройки (см. рис. 4).
Рисунок 4. Настройка регистрации шлюза Linksys SPA400
В подменю SPA9000 Interface заполняем поля:
- User ID – spa400 (имя пользователя);
- SPA9000 Address – оставляем в положении Discover automatically (это обязательно);
- Port ID – для неподключенных портов надо прописать OFFX, где X – номер порта, для подключенных – идентификатор линии (любое значение на ваш выбор).
Организация VPN
Для организации VPN можно использовать IPSEC или PPTP (в случае дешевого роутера). Настройка клиентского устройства зависит от марки оборудования и его функциональности. Рассмотрим установку серверной части для обоих вариантов.
Используем IPSEC
Сначала удостоверимся, что в ядре включена маршрутизация IP: параметр net.ipv4.ip_forward в файле /etc/sysctl.conf должен быть равен 1.
DEVICE=ipsec0 TYPE=IPSEC ONBOOT=yes IKE_METHOD=PSK SRCGW=192.168.10.5 DSTGW=192.168.10.33 SRCNET=192.168.10.0/27 DSTNET=192.168.10.32/27 DST=87.65.43.21
где X равен 0 для сети 192.168.10.0/27 и 1 – для сети 192.168.10.32/27):
IKE_PSK=ipT3l3phonY
Содержимое данного ключевого файла должно совпадать на сервере и клиенте, владельцем его должен быть root, а права доступа – 600.
Создаем файл 87.65.43.21.conf:
; remote 87.65.43.21 { exchange_mode main, aggressive; my_identifier address; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 2 ; } }
На стороне клиента соединение имеет уникальное имя ipsec0, а файл соединения имеет имя 12.34.56.78.conf.
Редактируем файл /etc/raccoon.conf:
path include "/etc/racoon"; path pre_shared_key "/etc/racoon/psk.txt"; path certificate "/etc/racoon/certs";
#После тестирования значение следует заменить на notify log debug;
padding { #Максимальная длина интервалов между пакетами maximum_length 20; #Разрешить/запретить случайную длину randomize off; #Разрешить/запретить жесткую проверку strict_check off; #Извлечь последний октет exclusive_tail off; } listen { isakmp 12.34.56.78 [500]; } ## IKE, фаза 1 remote 87.65.43.21 { exchange_mode main,aggressive; my_identifier address 85.236.7.158; lifetime time 28800 seconds; #Возможны значения obey, strict, claim proposal_check obey; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key ; dh_group 2 ; } } ## IKE, фаза 2 sainfo address 192.168.10.5/27 any address 192.168.10.32/27 any { pfs_group 2; lifetime time 28800 seconds ; encryption_algorithm 3des, des ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate ; } sainfo address 192.168.10.32/27 any address 192.168.10.5/27 any { pfs_group 2; lifetime time 28800 seconds ; encryption_algorithm 3des, des ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate ; } #Данная строка добавляется автоматически при активации тоннеля, вписывать ее не нужно include "/etc/racoon/193.233.70.167.conf";
Редактируем файл политик setkey.conf:
# !/sbin/setkey -f
flush; spdflush; #Исходящий трафик spdadd 192.168.10.5/27 192.168.10.32/27 any -P out ipsec esp/tunnel/85.236.7.158-193.233.70.167/require; #Входящий трафик spdadd 192.168.10.32/27 192.168.10.5/27 any -P in ipsec esp/tunnel/193.233.70.167-85.236.7.158/require;
Владельцем данного файла должен быть root, а права доступа – 600.
Редактируем файл ключей psk.txt:
87.65.43.21 ipT3l3phonY
Используем PPTP
Для установки PPTPD в репозитарии необходимо добавить файл /etc/yum.repos.d/Doylenet.repo такого содержания:
[doylenet] name=Doylenet custom repository for CentOS baseurl=http://files.doylenet.net/linux/yum/centos/5/i386/doylenet/ gpgcheck=1 gpgkey=http://files.doylenet.net/linux/yum/centos/RPM-GPG-KEY-rdoyle enabled=1
Редактируем файл /etc/ppp/options.pptpd:
#authorisation Name pptpd
#encription refuse-pap refuse-chap require-mschap-v2 require-mpppe-128
#misc nodefaultroute nobsdcomp nodeflate
#plugins auth require-mppe
Редактируем файл /etc/ppp/chap-secrets:
client_name pptpd client_password "*"
Редактируем файл /etc/pptpd.conf:
option /etc/ppp/options.pptpd localip 12.34.56.78 remoteip 192.168.10.35
***
Итак, мы перенаправили телефонные линии из одного офиса в другой, и теперь клиенты могут звонить нам по старым телефонным номерам, независимо от того, где находится наш новый офис. Данное решение можно также использовать для создания единого номерного поля в разных офисах – достаточно завести в один офис многоканальные линии и перекоммутировать часть каналов на голосовой шлюз Linksys SPA400 (или другой аналогичный). Также благодаря гибкости Asterisk можно использовать IP-телефонные аппараты или программные IP-телефоны (их часто называют «софтофонами»), например, X-Lite, Ekiga и т.п. совместно с традиционными аналоговыми телефонными аппаратами.
Приложение
Конфигурация iptables
Утилита конфигурации iptables запускается командой system-config-securitylevel-tui.
Нам необходимо открыть следующие порты и протоколы:
- Порты 5004-5082 UDP в цепочке INPUT для протокола SIP.
- Порты 10000-20000 UDP в цепочке INPUT для протокола RTP.
- Протокол 47 (GRE) в цепочках INPUT и OUTPUT в случае использования VPN-туннеля на базе PPTP.
- Порт 1723 в цепочках INPUT и OUTPUT для PPTP-соединения.
- Протокол 50 (esp) в цепочках INPUT и OUTPUT для адресов внешнего интерфейса и удаленного маршрутизатора IPSEC.
- Порт 500 (ike) в цепочках INPUT и OUTPUT для адресов внешнего интерфейса и удаленного маршрутизатора IPSEC.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|