Настраиваем 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.

ссылка на оригинал статьи http://habrahabr.ru/company/FastVPS/blog/205162/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *