Задача, заставить 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
Данный материал частично взят с данного сайта