L2TP+IPSec VPN на Linux Debian

В продолжение темы VPN серверов на Debian, попробуем поднять L2TP+IPSec VPN сервер.

Устанавливать будем на том же сервере, где сейчас установлен VPN PPTP.

1. Настройка Debian, обновим пакеты и настроим сеть

Обновим систему и пакеты:

apt-get update && apt-get upgrade && apt-get dist-upgrade

Настроим сеть:

nano /etc/network/interfaces
nano /etc/resolv.conf

Применим настройки:

/etc/init.d/networking restart

2. Установим 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*
make programs
make install

Конфигурируем IPSec:

nano /etc/ipsec.conf

Содержимое:
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

Пробелы перед строками обязательны. SERVER.IP — это внешний IP нашего сервера.

Настроим авторизацию через PreShared Key:

nano /etc/ipsec.secrets 

Содержимое:
SERVER.IP %any: PSK "PreSharedKey"

SERVER.IP — это внешний IP нашего сервера
%any: — подключение с любого IP
PSK — метод авторизации для L2TP.
PSK — PreSharedKey, т.е вместо сертификата будем использовать секретное слово.
«PreSharedKey» — само секретное слово

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

nano /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

Теперь необходимо добавить скрипт в автозагрузку. Однако В Debian 9 по-умолчанию не работает файл-автозапуска скриптов 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

Делаем его исполняемым:

chmod +x /etc/rc.local

Включаем автозапуск rc-local:

systemctl start rc-local
systemctl status rc-local

Добавляем содержимое нашего скрипта /root/ipsec в файл rc.local перед exit 0 и запускаем скрипт:

sh /root/ipsec

Настройка l2tp:

nano /etc/xl2tpd/xl2tpd.conf

Содержимое:
[global]
ipsec saref = yes

[lns default]
ip range = 192.168.1.202-192.168.1.220
local ip = 192.168.1.201
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

ip range = 192.168.1.202-192.168.1.220 — диапазон IP адресов выделяемых для VPN Подключений
local ip = 192.168.1.201 — адрес самого сервера VPN внутри локальной сети
refuse chap = yes — запретить Chap авторизацию
refuse pap = yes — запретить Pap авторизацию

Дополнительные настройки:

nano /etc/ppp/options.xl2tpd

Содержимое:
require-mschap-v2
ms-dns 192.168.1.1
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name VPN
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

require-mschap-v2 — требуем авторизацию через MSChap2
ms-dns 192.168.1.1 — это DNS сервер внутри локальной сети. Можно указать и глобальные DNS сервера (типа 8.8.8.8 или 77.88.8.8), но тогда внутренние ресурсы завязанные на DNS не будут видны клиентам подключенным через VPN.
name VPN — этот параметр будет присутствовать в настройках пользовательских аккаунтов.

Настройка пользователей:

nano /etc/ppp/chap-secrets

Формат содержимого:

vpnuser VPN password *

VPN — это и есть тот параметр из /etc/ppp/options.xl2tpd

Перезапускаем сервисы:

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

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

ipsec verify

В итоге мы имеем сервер, который может обслуживать VPN подключения, и по PPTP, и по L2TP+IPSec.

Top