VPN сервера L2TP + IPsec.

Мы уже писали о VPN сервере с помощью PPTP. Но скажем честно это  уже старый и не безопасный способ, хотя и простой в реализации. Сегодня мы сделаем VPN сервер на современной технологии L2TP туннель  плюс шифровании трафика с помощью IPSec. Считается, что протокол L2TP вобрал в себя лучшие черты L2F и PPTP. IPsec (сокращение от IP Security) — набор протоколов для обеспечения защиты данных, передаваемых по межсетевому протоколу IP. Позволяет осуществлять подтверждение подлинности (аутентификацию), проверку целостности и/или шифрование IP-пакетов. IPsec также включает в себя протоколы для защищённого обмена ключами в сети Интернет. Приступим:

apt-get install openswan xl2tpd ppp

Для Debian 8  придется openswan собирать их исходников, в стандартном репозитории его нету. Для начало придется установить дополнительный библиотеки необходимые для сборки:

apt-get install libgmp3-dev gawk flex bison

Пакет: gawk  — это GNU реализация языка программирования AWK.

Пакет: flex — это программа для генерации сканеры: программы, которые признаны лексических шаблонов в тексте(приблизительный перевод).

Пакет: bisom — это универсальный генератор парсер, который преобразует описание грамматики для LALR(1) контекстно-свободной грамматики в программу на C для разбора этой грамматике.

Теперь скачаем IPsec и распакуем:

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

tar -xvzf openswan-latest.tar.gz

Далее зайдем в  папку openswan-2.6.49.1(в моем случае) и установим IPsec:

cd openswan-2.6.49.1

make programs

make install

К стати не стоит удалять папку с исходниками после установки программы. В этой папке содержится скрипт, отвечающий за удаление программы, это относится ко всем корректно написанным программам для Linux.

Начнем настройку IPsec, открываем файл /etc/ipsec.conf:

version 2.0

config setup
  nat_traversal=yes Разрешить NAT (IP Masqurade)
  oe=off 
  protostack=netkey # Решить, какой стек протоколов будет использоваться "auto", "klips", "netkey" and "mast".
 conn L2TP-PSK
  authby=secret # аутентификация по Preshared Key
  pfs=no
  rekey=no
  type=tunnel
left=185.14.XX.XX # Ip адрес сервера
  leftnexthop=%defaultroute # шлюз внешнего интерфейса
  leftprotoport=17/1701
  right=%any
  rightprotoport=17/%any
  rightsubnetwithin=0.0.0.0/0
  auto=add
  dpddelay=30
  dpdtimeout=120
  dpdaction=clear

Следующим шагом – добавим ключ шифрования. Для этого укажем в файле /etc/ipsec.secrets желаемый ключ:

%any %any: PSK "TestSecret"

Перейдем к настройке L2TP. Откроем в редакторе файл /etc/xl2tpd/xl2tpd.conf:

[global] # глобальные настройки
 ipsec saref = yes # Включить отслеживание IPsec Security Association
 [lns default] # настройки сервера.
 ip range = 192.168.1.231-192.168.1.239 #Указывает диапазон IPv4-адресов, которые LNS будет назначать туннелям PPP от подключающихся LAC. Можно указать несколько диапазонов.
 local ip = 192.168.1.1 # Использовать указанный IPv4, в качестве собственного IP-адреса для xl2tpd.
 refuse chap = yes # Требовать или отказывать удалённому VPN-клиенту в PPP-аутентификации по протоколу CHAP (refuse | require) chap.
 refuse pap = yes # Требовать или отказывать удалённому VPN-клиенту в PPP-аутентификации по протоколу PAP. (refuse | require) pap.
 require authentication = yes # Требовать или отказывать удалённому VPN-клиенту в PPP-аутентификации.
 #unix authentication Если значение установлено в "yes", то для PPP-аутентификации удалённого VPN-клиента будет использоваться unix-аутентификация, то есть пара "логин:пароль" берётся из локального "/etc/passwd", используемого операционной системой, в которой запущен xl2tpd.
 ppp debug = no # Данный параметр включает режим отладки для pppd.
 pppoptfile = /etc/ppp/options.xl2tpd #Указывает путь к файлу, содержащему параметры настройки pppd.
 length bit = yes # Если значение установлено в "yes", то будет использован бит длины, указывающий полезную нагрузку (payload) l2tp-пакета.

Наша следующая цель – файл конфигурации /etc/ppp/options.xl2tpd:

require-mschap-v2
 ms-dns 8.8.8.8 # Адрес DNS сервера.
 mtu 1200
 mru 1200
 asyncmap 0
 auth
 crtscts
 lock
 hide-password
 modem
 debug
 name l2tpd # Имя.
 proxyarp
 lcp-echo-interval 30
 lcp-echo-failure 4
 logfile /var/log/xl2tpd.log # Путь к лог файлу

Наше соединение использует авторизацию по паролю, поэтому укажем его в соответствующем файле  /etc/ppp/chap-secrets:

# /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
test * "test"  *

Перезагружаем IPSec и L2TP.