Pull to refresh

Настройка удаленных рабочих мест для сотрудников (телефония и сеть) с использованием соединений, защищенных IPSec

Задача



Возникла такая задача: Требуется организовать рабочие места для рабочей группы из пары десятков удаленных сотрудников поверх защищенных шифрованием каналов. Телефонные звонки на экстеншены удаленных сотрудников должны осуществляться только с номеров других удаленных сотрудников, т.е. это должна быть обособленная от офисной телефонная сеть, своего рода «виртуальная АТС». Удаленные сотрудники должны иметь возможность осуществлять вызовы только на номера других удаленных сотрудников и на любые внешние номера через корпоративную АТС (на АТС выход в город из офиса осуществляется через «9»). Для каждого удаленного сотрудника должна быть возможность установления соединения из любой точки подключения к сети интернет (в том числе через NAT). Соединение между двумя удаленными сотрудниками должно быть защищенным технологиями шифрования.

Схема решения


image

Для регистрации абонентов используем бесплатный SIP-proxy сервер Asterisk на базе протокола SIP (в данном решении сервер ставился с Live CD, информация по установке сервера здесь: http://asteriskpbx.ru/wiki/AstPbx/Install ). Для терминации вызовов на корпоративной АТС используем имевшийся в наличии не используемый шлюз Audiocodes MP-118-FXO. Для подключения удаленных пользователей используется шлюз DrayTek Vigor 2910 с портами FXS и широкими возможностями по настройке шифрования. В качестве vpn-сервера выступает уже работающий маршрутизатор Cisco 2811, который также выполняет NAT-ирование одного из пулов офисных адресов. Также в данной конфигурации задействован Cisco PIX 525, который стоит за роутером. Его конфигурация здесь не рассматривается — там ничего сложного, в основном списки доступа для нужных портов/адресов, в нужных направлениях.

Настройка Asterisk



Настройки для шлюзов DrayTek делаем в файле sip_users.conf:
[110](user)
secret=callerid=«Draytek110» <110>

[111](user)
secret=callerid=«Draytek111» <111>

[112](user)
secret=callerid=«Draytek112» <112>
и т.д.
Для настройки соединения сервера с Audiocodes используем информацию отсюда: http://blog.voipsupply.com/setting-up-an-audiocodes-mp-114118-fxo-with-asterisk-and-freeswitch
В файле sip.conf добавляем настройки:
[pstn]
type=friend
context=inbound
dtmfmode=inband
host=nat=yes
canreinvite=no
qualify=no
где значение host – IP адрес шлюза Audiocodes (регистрация шлюза на сервере в этом случае не происходит, т.к. адрес указан явным образом).
Далее в файле extensions.conf находим и удаляем (или комментируем символом «;») прописанные по умолчанию маршруты:
; Outgoing calls rules
[numberplan-users]
;include => numberplan-private-trunks
;exten => _XXXXXXX,1,Macro(trunkdial|${TRUNK_1}|${EXTEN}); Local no E164
;exten => _[2-9]XXXXXXXXX,1,Macro(trunkdial|${TRUNK_1}|${EXTEN}); Long distance
;exten => _XXXXXXX.,1,Macro(trunkdial|${TRUNK_1}|${EXTEN}); International
;exten => _0X.,1,Macro(trunkdial|${TRUNK_2}|${EXTEN:1)})
И там же, под строкой [numberplan-users], добавляем маршрут:
exten => _X.,1,Dial(SIP/${EXTEN}@pstn)
Таким образом, вызовы на номера, не прописанные в sip_users.conf, будут направляться на Audiocodes.
После этого заходим в консоль управления Asterisk командой
asterisk –r
и обновляем конфигурацию сервера:
astpbx*CLI> sip reload
astpbx*CLI> extensions reload
Из консоли можно запускать отладку вызовов командой sip debug (выключается командой sip no debug). Просмотреть сообщения, появляющиеся в консоли, можно в файле /var/log/asterisk/ messages.astpbx

Настройка SIP на шлюзе Audiocodes MP-118-FXO



На шлюзе используется прошивка версии 5.20A.031.007.
Настраиваем основные параметры в разделе quick setup:
image
Далее переходим в раздел protocol management. Регистрация не требуется, поскольку необходимые настройки уже прописаны на Asterisk. Значения полей username и password не используются по этой же причине.
image
image
Здесь прописан маршрут для всех вызовов с аналоговых портов, указывающий на Asterisk. Но в нашем случае данные настройки не требуются, т.к. требуется настроить только исходящие вызовы.
image
Исходящие вызовы от Asterisk перенаправляем в hunt group 1:
image
Все аналоговые порты объединяем в hunt group 1 и для каждого порта прописываем номер «9»:
image
Здесь указываем порядок выбора портов для hunt group. Поле Registration Mode в нашем случае не используется:
image
Настройки аналоговых портов:
image
Таким образом, при наборе номера, начинающегося с «9», Asterisk направляет вызов на Audiocodes, который, в свою очередь, «сняв трубку» и получив гудок от АТС, сразу набирает номер вместе с «9» (по умолчанию).

Настройка шлюзов DrayTek Vigor 2910



Системные параметры:
image
Используем 1 порт WAN:
image
Настраиваем IP-адрес на порту WAN:
image
image
На интерфейсе LAN прописываем заранее выбранный IP-адрес. Можно настроить DHCP сервер для удаленного доступа в локальную сеть. Например, для того чтобы через каждый шлюз можно было бы подключить до 5-ти устройств, создаем блоки по 8 адресов и прописываем в шлюзе:
image
В разделе LAN to LAN создаем новый профиль:
image
В настройках профиля выбираем L2TP with IPSec как наиболее защищенный вариант. Указываем username, password для соединения L2TP и тип аутентификации. Здесь же указываем параметры IPSec. Параметры Dial-In Settings в нашем случае роли не играют. В параметрах TCP/IP используем route и указываем опцию «change default route…»:
image
image
image
Здесь можно проверить работоспособность конфигурации:
image
В настройках VoIP создаем новый профиль (здесь же можно посмотреть статус для каждого из предварительно настроенного профиля):
image
Нажимаем на номер профиля в колонке Index и переходим к детальным настройкам. Указываем адрес сервера, номер, ID и пароль, соответствующие настройкам на Asterisk. В поле Register via указываем LAN/VPN – этот параметр определяет, какой IP-адрес будет использоваться при регистрации и маршрутизации вызовов. В нашем случае нужно, чтобы использовался адрес интерфейса VPN, но по непонятным причинам шлюз всегда выбирает адрес LAN (в прошивку шлюза заложена функция sipalg, настраиваемая только через telnet, которая теоретически должна подставлять адрес VPN, но добиться ее работы так и не удалось). Эту проблему удалось обойти при помощи дополнительных настроек на Cisco 2811, рассмотренных далее.
image
В разделе Phone settings выбираем используемые кодеки для каждого порта FXS. Другие параметры оставляем по умолчанию:
image
image

Настройки маршрутизатора Cisco 2811



При настройке использованы материалы с сайта www.cisco.com (http://www.cisco.com/en/US/docs/ios/12_4t/12_4t2/pt_wnlns.html ).
Версия IOS: Advanced Enterprise Services 12.4(15)T1

Настройки IPSec:


crypto keyring L2TP
pre-shared-key address 0.0.0.0 0.0.0.0 key <ключ>

Указываем необходимое количество правил шифрования:
crypto isakmp policy 10
encr aes
authentication pre-share
group 2

crypto isakmp policy 20
encr aes 256
authentication pre-share
group 2

crypto isakmp policy 30
encr 3des
hash md5
authentication pre-share
group 2

crypto ipsec transform-set TS1 esp-aes esp-sha-hmac
mode transport
crypto ipsec transform-set TS2 esp-3des esp-md5-hmac
mode transport

Команда «set nat demux» позволяет избежать проблем с установлением соединений L2TP через NAT:
crypto dynamic-map DYN_MAP 10
set nat demux
set transform-set TS1 TS2

crypto map CRYP_MAP 6000 ipsec-isakmp dynamic DYN_MAP

interface FastEthernet0/0
crypto map CRYP_MAP

Важно! При использовании нескольких transform-set в одной crypto-map нужно указывать их в одной строке:

set transform-set TS1 TS2

В такой конфигурации работать будет только transform-set “TS1”:

crypto dynamic-map DYN_MAP 10
set nat demux
set transform-set TS1

crypto dynamic-map DYN_MAP 20
set nat demux
set transform-set TS2

Настройки L2TP


Чтобы обойти проблему с указанием неверного IP-адреса на шлюзах DrayTek, описанную выше, используем встроенную в Cisco IOS функцию локального сервера AAA:

aaa new-model
aaa authentication ppp default local
aaa authorization network default local

Для каждого из шлюзов DrayTek создаем список атрибутов которые будут передаваться шлюзу протоколом IPCP при установлении соединения L2TP после авторизации. Атрибут addr – адрес, присваиваемый виртуальному интерфейсу VPN (несмотря на то, что на шлюзе DrayTek адрес, жестко прописанный на интерфейсе LAN, и адрес интерфейса VPN совпадают, такая конфигурация остается рабочей). При авторизации шлюза на Cisco создается маршрут, указывающий на динамически создаваемый интерфейс virtual-access. Второй атрибут route добавляет маршрут для сети на LAN порту шлюза. Он используется, если к корпоративной сети через VPN требуется подключить компьютер, или чтобы на интерфейсах шлюза LAN и VPN использовались разные адреса:

aaa attribute list Draytek110
attribute type addr 172.16.64.33 service ppp protocol ip
attribute type route «172.16.64.32 255.255.255.248» service ppp protocol ip

Закрепляем за именем пользователя (в данном случае – это шлюз DrayTek) его пароль и список атрибутов (делается это обязательно одной строкой: username Draytek110 aaa attribute list Draytek110 password ABC):

username Draytek110 password 7 xxxxxxxxxx
username Draytek110 aaa attribute list Draytek110

vpdn enable

vpdn-group 2
accept-dialin
protocol l2tp
virtual-template 2

Вместо адреса, выдаваемого командой peer default ip address, шлюзу передается адрес, указанный в атрибутах локального сервера ААА:

interface Virtual-Template2
ip unnumbered FastEthernet0/0
no peer default ip address
ppp authentication chap ms-chap

Дополнительная подзадача



Требуется организовать call-группу из 2-х определенных номеров (в данном примере это пользователи [102] и [118]), то есть, при вызове любого из этих пользователей должны звонить одновременно оба телефона и отвечает на звонок тот номер, где первым сняли трубку. Для этого на сервере Asterisk в файле extensions.conf в области [local-users] добавляем строчки:

[local-users]
exten => 102,1,NoOp(Dialling hunt group)
exten => 102,n,Dial(SIP/102&SIP/118,50,t)
exten => 118,1,NoOp(Dialling hunt group)
exten => 118,n,Dial(SIP/102&SIP/118,50,t)

После этого в консоли Asterisk делаем extensions reload.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.