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

Для регистрации абонентов используем бесплатный 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:

Далее переходим в раздел protocol management. Регистрация не требуется, поскольку необходимые настройки уже прописаны на Asterisk. Значения полей username и password не используются по этой же причине.


Здесь прописан маршрут для всех вызовов с аналоговых портов, указывающий на Asterisk. Но в нашем случае данные настройки не требуются, т.к. требуется настроить только исходящие вызовы.

Исходящие вызовы от Asterisk перенаправляем в hunt group 1:

Все аналоговые порты объединяем в hunt group 1 и для каждого порта прописываем номер «9»:

Здесь указываем порядок выбора портов для hunt group. Поле Registration Mode в нашем случае не используется:

Настройки аналоговых портов:

Таким образом, при наборе номера, начинающегося с «9», Asterisk направляет вызов на Audiocodes, который, в свою очередь, «сняв трубку» и получив гудок от АТС, сразу набирает номер вместе с «9» (по умолчанию).
Настройка шлюзов DrayTek Vigor 2910
Системные параметры:

Используем 1 порт WAN:

Настраиваем IP-адрес на порту WAN:


На интерфейсе LAN прописываем заранее выбранный IP-адрес. Можно настроить DHCP сервер для удаленного доступа в локальную сеть. Например, для того чтобы через каждый шлюз можно было бы подключить до 5-ти устройств, создаем блоки по 8 адресов и прописываем в шлюзе:

В разделе LAN to LAN создаем новый профиль:

В настройках профиля выбираем L2TP with IPSec как наиболее защищенный вариант. Указываем username, password для соединения L2TP и тип аутентификации. Здесь же указываем параметры IPSec. Параметры Dial-In Settings в нашем случае роли не играют. В параметрах TCP/IP используем route и указываем опцию «change default route…»:



Здесь можно проверить работоспособность конфигурации:

В настройках VoIP создаем новый профиль (здесь же можно посмотреть статус для каждого из предварительно настроенного профиля):

Нажимаем на номер профиля в колонке Index и переходим к детальным настройкам. Указываем адрес сервера, номер, ID и пароль, соответствующие настройкам на Asterisk. В поле Register via указываем LAN/VPN – этот параметр определяет, какой IP-адрес будет использоваться при регистрации и маршрутизации вызовов. В нашем случае нужно, чтобы использовался адрес интерфейса VPN, но по непонятным причинам шлюз всегда выбирает адрес LAN (в прошивку шлюза заложена функция sipalg, настраиваемая только через telnet, которая теоретически должна подставлять адрес VPN, но добиться ее работы так и не удалось). Эту проблему удалось обойти при помощи дополнительных настроек на Cisco 2811, рассмотренных далее.

В разделе Phone settings выбираем используемые кодеки для каждого порта FXS. Другие параметры оставляем по умолчанию:


Настройки маршрутизатора 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.