- Linux Debian + L2TP + IPsec ( Налаживаем подключение linux-системы к L2TP-серверу, с обязательным шифрованием VPN-трафика. )
- Заметки и комментарии к публикации:
- VPN в Linux по протоколу L2TP
- Далее я опишу процесс настройки VPN протоколу L2TP в системе Debina 10
- Устанавливаем пакеты для L2tp в терминале
- Настраиваем само подключение по протоколу L2TP
Linux Debian + L2TP + IPsec ( Налаживаем подключение linux-системы к L2TP-серверу, с обязательным шифрованием VPN-трафика. )
OS: «Linux Debian 8/9/10», «Linux Ubuntu Server 16/18/20 LTS».
Apps: «strongswan», «xl2tpd», «ip», «netplan».
Задача: наладить подключение linux-системы к L2TP-серверу, с обязательным шифрованием VPN-трафика.
Для справки: L2TP («Layer 2 Tunneling Protocol») представляет собой сетевой протокол туннелирования канального уровня, сочетающий в себе протокол L2F («Layer 2 Forwarding»), разработанный компанией «Cisco», и протокол PPTP корпорации «Microsoft». Позволяет организовывать VPN с заданными приоритетами доступа, однако не содержит в себе средств шифрования и механизмов аутентификации — потому для создания защищённой VPN его используют совместно с IPSec.
Для управления L2TP-соединениями воспользуемся подсистемой «xl2tpd», а для шифрования — «strongSwan».
Последовательность действий такова:
1. Конфигурирование подсистемы IPsec-шифрования;
2. Конфигурирование подсистемы L2TP-подключений;
3. Автоматизация добавления сетевых маршрутов;
4. Ручное управление VPN-соединениями;
5. Автоматизация инициализации VPN-соединений.
Конфигурирование подсистемы IPsec-шифрования.
Инсталлируем необходимые приложения и утилиты:
У проекта «strongSwan» хорошая документация, из которой для решения нашей простой задачи вполне достаточно чтения пары страниц: «ConnSection» и «IpsecCommand».
В основном конфигурационном файле подсистемы IPsec-шифрования «strongSwan» описываем общие параметры и правила шифрования трафика от IP до IP (пример связи с L2TP/типовым IPsec-шлюзом на базе «RouterOS»):
# ipsec.conf — strongSwan IPsec configuration file
# 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 «l2tp.example.net»
conn ipsec-gate.example.net
# 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 = 100.200.250.21
rightprotoport = 17/1701
Секретный ключ шифрования PSK («Pre-Shared Key»), используемый для предварительной клиент-серверной аутентификации, выносится в отдельный файл, где указывается, в каких условиях таковой должен применяться:
Защищаем файл с паролями от доступа посторонних:
Для применения изменений в конфигурации перезапускаем сервис подсистемы IPSec-шифрования:
Если конфигурация IPsec выше подразумевает автоматическое включение шифрования, то сразу после перезапуска «strongSwan» мы уже должны получить желаемое.
Если режим запуска шифрования для какого-то направления выбран «ручной» (auto=add), то запускаем его соответствующей командой:
Соответственно, при необходимости, аналогичной ручному запуску командой можно шифрование в заданном направлении остановить:
Просматриваем статус IPsec-соединений:
Security Associations (1 up, 0 connecting):
ipsec-gate.example.net[1]: ESTABLISHED 43 seconds ago, 10.20.30.45. 100.200.250.21
ipsec-gate.example.net{1}: INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c57b51bb_i 04fa2652_o
ipsec-gate.example.net{1}: 10.20.30.45/32[udp/l2f] === 100.200.250.21/32[udp/l2f]
Теперь весь трафик к целевому сетевому узлу инкапсулируется в IPsec.
Конфигурирование подсистемы L2TP-подключений.
Инсталлируем необходимые приложения и утилиты:
Параметры для настройки L2TP-подключения посредством «xl2tpd» хорошо описаны во встроенном руководстве по эксплуатации, вызываемом командой «man xl2tpd.conf» (как вариант, можно посмотреть web-версию).
Описываем параметры VPN-канала, который должен быть установлен посредством «xl2tpd»:
[lac l2tp-gate.example.net]
lns = 100.200.250.21
;ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client-gate.example.net
length bit = yes
autodial = yes
redial = yes
redial timeout = 30
Описываем параметры PPP-соединения, включая логин и пароль для аутентификации:
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
mtu 1280
mru 1280
noipdefault
nodefaultroute
usepeerdns
connect-delay 5000
name vpn-node0-tunnel
password strongSecretPassword
Защищаем файл с паролем от доступа посторонних:
Для применения изменений в конфигурации перезапускаем сервис:
Если конфигурация «xl2tpd» выше подразумевает автоматическое создание VPN-туннеля, то сразу после перезапуска «xl2tpd» мы уже должны получить желаемое.
Если режим запуска создания VPN-туннеля выбран «ручной» (autodial=no), то запускаем его соответствующей командой:
Соответственно, при необходимости, аналогичной ручному режиму командой можно определённый VPN-туннель выключить и удалить виртуальный интерфейс:
После вышеприведённых действий в перечне сетевых интерфейсов должен появится новый виртуальный PPP-интерфейс, через который осуществляется передача трафика до целевого L2TP-сервера:
.
ppp0: flags=4305 mtu 1280
inet 10.172.255.2 netmask 255.255.255.255 destination 10.172.255.1
ppp txqueuelen 3 (Point-to-Point Protocol)
.
Простейшим способом проверяем доступность опорного IP-адреса на стороне L2TP-сервера:
Слегка напрягает, что сервисы, обеспечивающие работу IPsec и L2TP прослушивают ряд портов в ожидании входящих подключений тогда, как нам требуется от них только работа в роли клиентов — но, насколько я понимаю, это неотъемлемая особенность работы подсистем, обеспечивающих двухсторонние сетевые туннели:
Proto . Local Address Foreign Address PID/Program name
udp . 0.0.0.0:4500 0.0.0.0:* . /charon
udp . 0.0.0.0:500 0.0.0.0:* . /charon
udp . 0.0.0.0:1701 0.0.0.0:* . /xl2tpd
.
Разумеется, можно прикрыть сетевые сервисы защитным экраном «iptables», предписав предоставлять доступ к портам только для запросов со стороны L2TP-сервера.
Автоматизация добавления сетевых маршрутов.
В производственной среде VPN-туннели чаще предназначены для передачи только выделенного трафика — к тем сервисам, что нуждаются в изоляции внутри корпоративной сети. Соответственно, после установления VPN-соединения, необходимо активировать дополнительные сетевые маршруты, направляющие выделенный трафик не через «шлюз по умолчанию», а через L2TP-сервер. Такой функционал давно реализован через систему «хуков (hook)», запускающий произвольные скрипты при изменении состояния PPP-соединений.
Пишем простой bash-скрипт, автоматически запускаемый при инициализации PPP-соединения и добавляющий произвольный набор маршрутов с предварительной проверкой наличия опорной IP-адресации (в имени скрипта «ppp-hook» не допускается символов «.», так что для наглядности заменяем их «-«):
if [[ «${PPP_LOCAL}» == «10.172.255.2» ]] ; then
sleep 1
ip route add 10.10.10.0/24 via 10.172.255.1
ip route add 192.168.10.0/24 via 10.172.255.1
fi
Не забываем сделать скрипт «исполняемым» (в противном случае подсистема PPP проигнорирует его):
Ручное управление VPN-соединениями.
Учитывая то, что сервисы шифрования и поддержки PPP-туннеля реализованы в двух независимых подсистемах, ради обеспечения должного уровня безопасности важно не забывать об очерёдности их включения и выключения — чтобы в какой-то момент через недоверенные участки сети не пошёл незашифрованный трафик.
Последовательная инициализации IPsec-шифрования и L2TP-туннеля:
Последовательное выключение L2TP-туннеля и IPsec-шифрования:
# xl2tpd-control disconnect l2tp-gate.example.net && xl2tpd-control remove l2tp-gate.example.net && ipsec down ipsec-gate.example.net
Автоматизация запуска посредством «ifupdown».
При автоматическом запуске IPsec-шифрования и L2TP-туннеля нет необходимости отдельно стартовать эти сервисы. Но, в каких-то конфигурациях это может потребоваться:
.
iface eth0 inet dhcp
.
sleep 5 && post-up ipsec up ipsec-gate.example.net && xl2tpd-control connect l2tp-gate.example.net &
Автоматизация запуска посредством «Netplan».
Новомодная подсистема управления сетевой конфигурацией «Netplan» не имеет встроенного обработчика изменения состояния, что странно. Придётся воспользоваться дополнительным инструментом «Network Dispatcher»:
if [[ «${IFACE}» == «eth0» ]] ; then
sleep 5
ipsec up ipsec-gate.example.net && xl2tpd-control connect l2tp-gate.example.net &
fi
Добавляем скрипту статус «исполняемого» (иначе «networkd-dispatcher» проигнорирует его):
Поблагодарить автора ( сделайте свой денежный вклад в хорошее настроение )
Заметки и комментарии к публикации:
Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )
VPN в Linux по протоколу L2TP
В большинстве случаев VPN соединение настраивается по туннельному протоколу L2TP.
Поддержки VPN соединения с протоколом L2TP/IPSec в системе Linux по умолчанию нет. Я использую в качестве основной системы Debian 10 и у меня его нет.
В операционных системах Windows данный протокол есть по умолчанию. Как там происходит процесс настройки вы можете узнать из этой статьи, опубликованной ранее.
Посмотрев дистрибутив Linux mint и Ubuntu оказалось, что и там нет необходимых протоколов.
Так как все эти системы основаны на Debian, решение данного вопроса будет одинаковым на всех системах.
Далее я опишу процесс настройки VPN протоколу L2TP в системе Debina 10
Для начала нам нужно установить необходимые пакеты, которые обеспечат поддержку необходимых нам протоколов.
Необходимые пакеты L2TP для VPN соединения есть в репозиториях Debian 10, поэтому просто ставим их при помощи менеджера пакетов Synaptic.
Открываем менеджер и в поиске пишем L2TP.
после поиска отмечаем для установки два пакета
network-manager-l2tp и его «графическую часть» gnome, удобно для тех кто все делает в графическом интерфейсе
Отмечаем нужные пакеты для установки
В результате выделится зеленым три пакета, для установки.
Со всем соглашаемся и нажимаем применить, дожидаемся окончания установки.
Устанавливаем пакеты для L2tp в терминале
Так же можно все эти пакеты установить командами в терминале, открываем терминал и последовательно выполняем команды
Устанавливаем пакет network-manager-l2tp
sudo apt install network-manager-l2tp
Устанавливаем пакет network-manager-l2tp-gnome
sudo apt install network-manager-l2tp-gnome
Настраиваем само подключение по протоколу L2TP
После установки всех необходимых пакетов нам остается только выбрать необходимый способ подключения в окне сетевых соединений.
Далее все заполняем согласно вашим данным, все данные по подключению вам должен предоставить администратор.
Шлюз — ip вашего сервера, соответственно далее логин и пароль.
Перед тем как ввести пароль выберите способ его хранения, вводить каждый раз или запомнить его раз и навсегда.
Не забудьте указать PSK ключ для подключения, ниже показано где его ввести
После ввода всех данных, сохраняете настроенное соединение и можете выбрать его по клику левой кнопки мыши в трее
На этом, настройка VPN подключения закончена.
Если есть, что добавить или поделится опытом пишите в комментариях.
Я настраивал вот по такому протоколу:
Настройка internet beeline vpn alexandr@mx:~/Настройка internet beeline vpn
$ sudo su
root@mx:/home/alexandr/Настройка internet beeline vpn# ls
xl2tpd_1.3.12-1.1_amd64.deb
libstrongswan_5.7.2-1_amd64.deb
strongswan-starter_5.7.2-1_amd64.deb
strongswan_5.7.2-1_all.deb
trongswan-libcharon_5.7.2-1_amd64.deb
strongswan-charon_5.7.2-1_amd64.deb
network-manager-l2tp_1.2.10-1_amd64.deb
network-manager-l2tp-gnome_1.2.10-1_amd64.deb
dpkg -i xl2tpd_ 1.3.12-1.1_amd64.deb dpkg -i libstrongswan_5.7.2-1_amd64.deb dpkg -i strongswan-starter_5.7. 2-1_amd64.deb dpkg -i strongswan-libcharon_5.7.2-1_amd64.deb dpkg -i strongswan-charon_5.7.2-1_amd64.deb dpkg -i strongswan_5.7.2-1_all. deb dpkg -i network-manager-l 2tp_1.2.10-1_amd64.deb dpkg -i network-manager-l2tp- gnome_1.2.10-1_amd64.deb
© 2019-2023 Про ПК. Инструкции по работе на компьютере, настрока операционных систем Windows и Linux, использование программ.