Найти тему
Nikita Bubnov

VPN SERVER (L2TP через IPSec)

Оглавление

Однажды потребовалось написать инструкцию как настроить сервис VPN на внешнем сервере и после с этим всем подружить ноутбук на MacOS. Пример собирался на ОС Debian 9.9.0 x64 netinst.

Настройка VPN сервер посредством l2tp + ipsec.

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

apt-get install xl2tpd

В репозиториях нет openswan, ставим из исходников.

Для начала придется установить дополнительные библиотеки, необходимые для сборки:

apt-get install libgmp3-dev gawk flex bison make

Далее, качаем с офф-сайта openswan:

wget https://download.openswan.org/openswan/openswan-latest.tar.gz
tar -xvzf openswan-latest.tar.gz

Собираем и устанавливаем:

cd openswan-2.6.50
make programs
make install

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

Приведем конфиг /etc/ipsec.conf к виду(требуется заменить SERVER.IP на свой внешний ip адрес):

config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 oe=off
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=SERVER.IP
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

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

Теперь зададим авторизацию для работы с ipsec. Существует два метода авторизации — по сертификату и по ключу ( PSK ). В данном примере мы настроим авторизацию по ключу в файле /etc/ipsec.secrets:

11.11.11.11 %any: PSK "mykey"

11.11.11.11 — это внешний IP адрес нашего сервера (SERVER.IP)

%any — это встроенная переменная обозначающая любой IP адрес PSK — метод авторизации (может быть RSA )

«mykey» — секретный ключ для авторизации, который потребуется передать клиенту.

Скрипт для настройки сети

В /root/ipsec

Добавляем содержимое:

iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart

Делаем скрипт исполняемым

chmod +x /root/ipsec

ВКЛЮЧАЕМ RC.LOCAL В DEBIAN 9

Создаем файл /etc/rc.local

touch /etc/rc.local
nano /etc/rc.local

Содержимое

#!/bin/sh –e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0

Создаем файл с содержимым:

nano /etc/systemd/system/rc-local.service

Содержимое

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target

Создаем файл /etc/rc.local и делаем его исполняемым выполнив команды:

chmod +x /etc/rc.local

Включаем сервис rc-local выполнив команду:

systemctl enable rc-local

Запускаем сервис rc-local выполнив команду:

systemctl start rc-local.service

Проверяем статус сервиса, запущен или нет выполняем команду:

systemctl status rc-local.service

Ответ системы:

rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset:
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
Active: active (exited) since Tue 2017-07-25 11:10:09 EEST; 7s ago
Process: 1148 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)

Добавляем в rc.local и запускаем

sh /root/ipsec

Теперь пришло время настроить l2tp сервер. Он будет работать через протокол ppp. Приводим конфиг /etc/xl2tpd/xl2tpd.conf к виду:

[global] port = 1701
ipsec saref = yes
saref refinfo = 30
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
name = VPN

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

require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
name VPN
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

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

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

test VPN password *

Рестартуем все сервисы

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

Проверяем работу

ipsec verify

Настройка подключения на MAC.

Создадим новое подключение: Интерфейс –VPN

Тип VPN – L2TP через IPSec

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

-2

Перейдем в «Настройки аунтификации…»

Сохраним пароль пользователя(при желании) и укажем наш ключ.

-3

Перейдем в «Настройки аунтификации…» Отметим «Отправлять весь трафик через VPN».

-4

Сохраним все настройки, можем подключаться.