Настройка IPsec + L2tp Debian клиента

Задача, заставить Debian 12 подключиться к удалённому серверу используя IPsec + l2tp.

Конфигурирование подсистемы IPsec-шифрования.

Инсталлируем strongswan:

# apt-get -y install strongswan

У проекта «strongSwan» хорошая документация, из которой для решения этой простой задачи вполне достаточно чтения пары страниц: «ConnSection» и «IpsecCommand«.

После установки открываем /etc/ipsec.conf

# Basic configuration
config setup
  # strictcrlpolicy=yes
  # uniqueids = no
  # nat_traversal = yes
  # protostack = netkey

# Default options for encryption of connections
conn %default
  ikelifetime = 60m
  keylife = 20m
  rekeymargin = 3m
  keyingtries = 1
  keyexchange = ikev1
  authby = secret
  ike = aes128-sha1-modp2048!
  esp = aes128-sha1-modp2048!

# Encryption of traffic to the "Your VPN Server"
conn myvpn
  # Automatic start of encryption at system startup
  auto = start
  # Restarting encryption if negotiation fails
  dpdaction = restart
  # Restart encryption on unexpected close
  closeaction = restart
  # Reconnect unlimited number of times
  keyingtries = %forever
  keyexchange = ikev1
  pfs = no
  authby = secret
  type = transport
  left = %defaultroute
  leftprotoport = 17/1701
  right = 10.110.110.110
  rightprotoport = 17/1701

Ключ шифрования PSK («Pre-Shared Key»), используемый для предварительной клиент-серверной аутентификации, выносится в отдельный файл, где указывается, в каких условиях таковой должен применяться. /etc/ipsec.secrets

# <GATEWAY IP ADDRESS> <SERVER ADDRESS> : PSK "<PRE-SHARED KEY>"
%any 10.110.110.110 : PSK "YourSecretKey"

Для применения изменений в конфигурации перезапускаем сервис подсистемы IPSec-шифрования:

# systemctl restart ipsec

Просматриваем статус IPsec-соединений:

# ipsec status
Security Associations (1 up, 0 connecting):
       myvpn[1]: ESTABLISHED 18 minutes ago, 45.45.45.45[45.45.45.45]...10.110.110.110[10.110.110.110]
       myvpn{1}:  REKEYED, TRANSPORT, reqid 1, expires in 80 seconds
       myvpn{1}:   45.45.45.45/32[udp/l2f] === 10.110.110.110/32[udp/l2f]
       myvpn{2}:  INSTALLED, TRANSPORT, reqid 1, ESP SPIs: cc86b542_i 003f4a22_o
       myvpn{2}:   45.45.45.45/32[udp/l2f] === 10.110.110.110/32[udp/l2f]

где 10.110.110.110 — адрес вашего сервера, 45.45.45.45 — адрес локальной машины, где мы проводим настройки.

Конфигурирование подсистемы L2TP-подключений.

# apt-get -y install xl2tpd net-tools

Параметры для настройки L2TP-подключения посредством «xl2tpd» хорошо описаны во встроенном руководстве по эксплуатации, вызываемом командой «man xl2tpd.conf» (как вариант, можно посмотреть web-версию).

Открываем конфигурационный файл: /etc/xl2tpd/xl2tpd.conf

[lac myvpn]
lns = 10.110.110.110
;ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.client
length bit = yes
autodial = yes
redial = yes
redial timeout = 30

Описываем параметры PPP-соединения, включая логин и пароль для аутентификации в файле /etc/ppp/options.xl2tpd.client

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
mtu 1280
mru 1280
noipdefault
nodefaultroute
usepeerdns
connect-delay 5000
name Example
password strongSecretPassword

Для применения настроек перезапускаем xl2tp:

# systemctl restart xl2tpd

Если конфигурация «xl2tpd» выше подразумевает автоматическое создание VPN-туннеля, то сразу после перезапуска «xl2tpd» мы уже должны получить желаемое/

Если режим запуска создания VPN-туннеля выбран «ручной» (autodial=no), то запускаем его соответствующей командой:

xl2tpd-control connect myvpn

Автоматизация добавления сетевых маршрутов.

В производственной среде VPN-туннели чаще предназначены для передачи только выделенного трафика — к тем сервисам, что нуждаются в изоляции внутри корпоративной сети. Соответственно, после установления VPN-соединения, необходимо активировать дополнительные сетевые маршруты, направляющие выделенный трафик не через «шлюз по умолчанию», а через L2TP-сервер. Такой функционал давно реализован через систему «хуков (hook)», запускающий произвольные скрипты при изменении состояния PPP-соединений.

Пишем простой bash-скрипт, автоматически запускаемый при инициализации PPP-соединения и добавляющий произвольный набор маршрутов с предварительной проверкой наличия опорной IP-адресации (в имени скрипта «ppp-hook» не допускается символов «.», так что для наглядности заменяем их «-«):

/etc/ppp/ip-up.d/90-l2tp-gate-example-net

#!/bin/bash

if [[ "${PPP_LOCAL}" == "10.155.155.1" ]] ; then
  sleep 1
  ip route add 10.10.10.0/24 via 10.155.155.1
  ip route add 192.168.10.0/24 via 10.155.155.1
fi

exit $?

Не забываем сделать скрипт «исполняемым» (в противном случае подсистема PPP проигнорирует его):

# chmod +x /etc/ppp/ip-up.d/90-l2tp-gate-example-net

Данный материал частично взят с данного сайта

Запись опубликована в рубрике Linux с метками . Добавьте в закладки постоянную ссылку.

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

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