...

понедельник, 9 декабря 2013 г.

Настраиваем VPN связь посредством l2tp + ipsec c использованием в качестве сервера OpenVZ котейнер

Здравствуйте,

не так давно командой OpenVZ было выпущено новое ядро с поддержкой ipsec внутри контейнера. Давно хотелось отказаться от стороннего ПО на локальной Windows машине и использовать возможность настройки защищенного VPN канала силами самой системы. В качестве сервера будем использовать Debian 7 контейнер на OpenVZ. В качестве клиента — стандартный VPN клиент Windows. В качестве авторизации — авторизацию по PSK ( по ключу ).


Прежде всего активируем возможность net_admin для контейнера и дадим контейнеру ppp устройство для работы, как указано в подсказке от разработчиков:



vzctl set CTID --capability net_admin:on --save
vzctl set CTID --devices c:108:0:rw --save
vzctl restart CTID


Внутри контейнера создаем ppp устройство и выставляет корректные права доступа к нему:



mknod /dev/ppp c 108 0
chmod 600 /dev/ppp


загрузим на HN нужные модули через modprobe:



modprobe ppp_async
modprobe pppol2tp
modprobe xfrm4_mode_transport
modprobe xfrm4_mode_tunnel
modprobe xfrm_ipcomp
modprobe esp4


Внутри контейнера в качестве ipsec демона будем использовать openswan, а в качестве l2tp сервера стандартный xl2tpd из репозиториев:



apt-get install openswan xl2tpd


Далее настроим форвардинг и остальную часть сетевой подсистемы для корректной работы с NAT и VPN:



echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source <main IP of server>
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
for each in /proc/sys/net/ipv4/conf/*; do echo 0 > $each/accept_redirects; echo 0 > $each/send_redirects; done


Приступим к настройке ipsec демона.


Приведем конфиг /etc/ipsec.conf к виду:



config setup
protostack=netkey
nat_traversal=yes # Enables NAT traversal
virtual_private=%v4:192.168.1.0/8 # with this option you can add your local IP in NAT
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret # Auth with PSK ( preshared key )
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
salifetime=10m
type=tunnel # type of l2tp connection ( tunnel / transport )
left=11.11.11.11 # left - is internet IP of l2tp server
leftprotoport=17/1701
right=%any # right - is IP of client ( if client NATed , that IP of client is IP in NAT )
rightprotoport=17/1701




Наиболее важные моменты конфига прокомментированы. Также следует не забыть составить конфиг именно таким образом, как указано выше, то есть с сохранением пробелов в начале строки у тех команд, у которых они указаны, так как отступ команды демоном привязывается к блоку, определяемому безотступным «conn».

Теперь пришло время настроить l2tp сервер. Он будет работать через протокол ppp.


Приводим конфиг /etc/xl2tpd/xl2tpd.conf к виду:



[global]
port = 1701
auth file = /etc/xl2tpd/l2tp-secrets # auth file with pars login/password for l2tp auth
[lns default]
ip range = 10.0.0.2-10.0.0.200 # range of IP's , that give to clients when auth is good
local ip = 10.0.0.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = no # debug mode
pppoptfile = /etc/ppp/options.xl2tpd # this is ppp options config file
length bit = yes
exclusive = no
assign ip = yes
name = VPN-Server




В данном конфиге, опять же, все критичные места прокомментированы, а остальные интуитивно понятны. При настройке сервера комментарии из конфига требуется убрать.

Настраиваем файл авторизации l2tp — /etc/xl2tpd/l2tp-secrets. В файле позволим подключаться всем, так как у нас l2tp работает через ppp, то и использовать будем именно ppp авторизацию.



# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
* * * # let all , because we use auth with ppp


Далее настраиваем конфиг ppp, который запрашивается нашим l2tp демоном ( /etc/ppp/options.xl2tpd ):



refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
#debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4


В случае возникновения проблем со связью или с подключением для дебага работы l2tp просто раскомментируем "#debug" и смотрим в системный лог /var/log/syslog на наличие ошибок.


Настраиваем авторизацию в ppp ( /etc/ppp/chap-secrets ):



# Secrets for authentication using CHAP
# client server secret IP addresses
test2 l2tpd test *


Логин — test2

Сервер, для которого валидна эта пара для авторизации — l2tpd

Пароль — test

Подключаться с этим паролем могут клиенты со всех IP адресов — *


Рестартим оба сервиса:



/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart


Теперь проверим корректность работы модулей самого ipsec внутри контейнера:



ipsec verify



выводом работоспособного ipsec будет нечто подобное:

root@XXX:~# ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.37-g955aaafb-dirty/K2.6.32-042stab084.10 (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [WARNING]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support


Теперь настроим в Windows 7 клиент для подключения к нашему VPN l2tp с шифрованием по ipsec.


Для начала создадим новое VPN подключение


Всё стандартно

Пуск — Панель управления — Центр управления сетями и общим доступом — Настройка нового подключения или сети — Подключение к рабочему месту — Использовать мое подключение к интернету ( VPN )





Далее указываем IP адрес или FQDN имя l2tp сервера

Подсказка
image




Вписываем логин и пароль от l2tp

Подсказка





Не подключаемся и закрываем настройку подключения

Подсказка





Идем в свойства нашего нового подключения и проверяем еще раз корректность ввода адреса сервера ( вкладка Общие )

Подсказка





Во вкладке «Безопасность» выставляем верный тип нашего соединения ( l2tp over ipsec ) и разрешаем авторизацию по протоколу CHAP. В дополнительных настройках l2tp выбираем авторизацию по ключу и вписываем наш PSK от IPsec

Подсказка





Настройка окончена. Теперь Вы можете использовать новое подключение к VPN.


Спасибо за внимание


Ваганов Николай, старший системный администратор FastVPS LLC


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий