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. 

Комментарии

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

Популярные сообщения из этого блога

Разные версии PHP на разных сайтах на одном сервере

Microsoft Office. Окно "Давайте начнем"

При подключении VPN перестаёт работать NTLM (не видит сетевые ресурсы)