Ubuntu l2tp ipsec client настройка

Обновлено: 03.07.2024

L2TP сервер удобен тем, что позволяет использовать встроенные средства Windows для подключения. В данной инструкции рассмотрим процесс его установки и настройки на Ubuntu 16.04 и 18.04. В итоге мы получим:

  • VPN-сервер, использующий туннельный протокол L2TP.
  • Защита соединения посредством общего ключа + аутентификация пользователя.
  • Доступ к локальной сети.

Мы выполним следующие настройки:

Настройка IPSEC

Для управления IPSec используется пакет strongswan — установим его командой:

apt-get install strongswan

Открываем конфигурационный файл для настройки ipsec:

Для config setup добавим:

config setup
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
protostack=netkey

* где virtual_private для нас является наиболее важным параметром и определяет приватные сети. В данном примере просто перечислены сети, зарезервированные под локальные — мы можем указать и другие.

. а также вставляем ниже:

conn l2tpvpn
type=transport
authby=secret
pfs=no
rekey=no
keyingtries=2
left=%any
leftprotoport=udp/l2tp
leftid=@l2tpvpnserver
right=%any
rightprotoport=udp/%any
auto=add

  • type — тип соединения. Возможны варианты tunnel ( хост-хост, хост-подсеть или подсеть-подсеть); transport (хост-хост); passthrough (без обработки IPsec).
  • authby — способы аутентификации двух узлов. Возможны варианты secret (по паролю) или rsasig (цифровые подписи RSA).
  • pfs — расшифровывается как Perfect Forward Secrecy. Позволяет активировать совершенную секретность в канале ключей соединения.
  • rekey — перепроверить соединение, когда оно истекает.
  • keyingtries — число попыток, чтобы «договориться» о соединении или его замене.
  • left — IP-адрес левого участника (сервера). %any означает, что адрес может быть любой.
  • leftprotoport — определяет протокол и порт, на котором будет работать левая сторона (сервер). В данном примере указан UDP и порт 1701.
  • leftid — идентификация левого участника соединения.
  • right — IP-адрес правого участника (клиента). %any означает, что адрес может быть любой.
  • rightprotoport — определяет протокол и порт, на котором будет работать правая сторона (клиент). В данном примере указан UDP и любой порт.
  • auto — операция, которая должна запуститься автоматически при старте IPsec.

Создаем секретный ключ — для этого открываем на редактирование файл:

%any %any : PSK "my_key_password"

* в данном примере мы устанавливаем общий пароль my_key_password для соединений с любого IP.

Разрешаем автозапуск strongswan и перезапускаем службу:

systemctl enable strongswan

systemctl restart strongswan

Устанавливаем сервер L2TP:

apt-get install xl2tpd

Открываем файл настройки сервера:

[global]
port = 1701
access control = no
ipsec saref = yes
force userspace = yes
auth file = /etc/ppp/chap-secrets

[lns default]
ip range = 176.16.10.10-176.16.10.200
local ip = 176.16.10.1
name = l2tpserver
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes
exclusive = no
hidden bit = no
length bit = yes
require authentication = yes
require chap = yes
refuse pap = yes

  • port — порт UDP, на котором работает VPN. По умолчанию, 1701.
  • access control — принимать или нет запросы только от клиентов с определенными IP, перечисленными в настройках клиентов.
  • ipsec saref — указывает использовать или нет ipsec Security Association, позволяющий отслеживать несколько клиентов с одинаковыми IP-адресами.
  • force userspace — повышает производительность за счет декапсуляции пакетов L2TP.
  • auth file — путь к файлу аутентификации.
  • ip range — диапазон адресов, которые назначаются подключенным клиентам.
  • local ip — IP-адрес сервера в сети VPN.
  • name — имя сервера для процесса согласования.
  • pppoptfile — путь к файлу с настройкой pppd.
  • flow bit — позволяет добавлять в пакеты порядковые номера.
  • exclusive — если поставить в yes, сервер разрешит только одно соединение с клиентом.
  • hidden bit — скрывать или нет AVP.
  • length bit — использовать ли бит длины, указывающий полезную нагрузку.
  • require authentication — требовать ли аутентификацию.
  • require chap — требовать ли аутентификацию PPP по протоколу CHAP.
  • refuse pap — требовать ли аутентификацию PPP по протоколу PAP.

Разрешаем автозапуск vpn-сервера и перезапускаем его:

systemctl enable xl2tpd

systemctl restart xl2tpd

Открываем на редактирование конфигурационный файл:

noccp
auth
crtscts
mtu 1410
mru 1410
nodefaultroute
lock
noproxyarp
silent
modem
asyncmap 0
hide-password
require-mschap-v2
ms-dns 77.88.8.8
ms-dns 8.8.8.8

Создаем пользователя. Для этого открываем файл:

* формат записи — <логин> <имя сервиса> <пароль> <IP клиента (не обязательно)>

systemctl restart xl2tpd

Настройка клиента

В параметрах сети и Интернет в разделе VPN создаем новое соединение:

Создание нового VPN соединения

Настройка нового VPN соединения

  • Имя подключения — произвольное имя.
  • Имя или адрес сервера — адрес сервера VPN, к которому мы будем подключаться.
  • Тип VPN — для нашего случая, выбираем L2TP/IPsec с предварительным ключом.
  • Общий ключ — ключ, который мы задали в файле /etc/ipsec.secrets.
  • Тип данных для входа — выбираем пользователь и пароль.
  • Имя пользователя и пароль — логин и пароль, которые мы задали в файле /etc/ppp/chap-secrets.

Доступ в Интернет и локальную сеть

. и добавляем строку:

* мы разрешили форвард сетевых запросов и настроили сервер в качестве шлюза.

После применяем настройку:

sysctl -p /etc/sysctl.d/99-sysctl.conf

Добавляем правило в iptables:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

* данное правило включает маскарадинг на интерфейсе eth0. Вам необходимо подставить в команду значение своего сетевого адаптера.

В случае с единым сетевым интерфейсом больше ничего делать не потребуется — Ubuntu начнет работать как Интернет-шлюз.

В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран:

iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

* предполагается, что eth1 используется для внутренней сети, а eth0 — внешней.

Диагностика проблем

Описанная выше настройка не предполагает наличие лога. Для этого открываем конфигурационный файл для ppp:

.
logfile /var/log/xl2tpd/xl2tpd.log
debug

Создадим каталог для лога:

Перезапускаем сервис xl2tpd:

systemctl restart xl2tpd

Пробуем подключиться к серверу — в случае наличия проблем, наблюдаем за логом:

tail -f /var/log/xl2tpd/xl2tpd.log

Дмитрий Моск — частный мастер

Дмитрий Моск

Настройка L2TP VPN-сервера на Ubuntu для возможности подкючения стандартными средствами Windows

Ставил на днях последний дистрибутив Ubuntu 21.04 и понадобилось мне настроить подключение к VPN серверу по протоколу L2TP. Каково было моё удивление что такого столь популярного типа соединения не было в стандартной поставке. Это мы исправим. Давайте разбираться как происходит настройка L2TP в Ubuntu.

Настройки по умолчанию

В настройках по умолчанию в Ubuntu присутствует лишь OpenVPN и PPTP протоколы.


Настройки VPN до нашего вмешательства
Добавление клиента L2TP

Добавим клиент L2TP в Network Manager чтобы наравне с остальными протоколами была возможность добавить L2TP соединение.

После окончания установки перезагрузим компьютер. Также не забывайте сразу после установки новых пакетов ставить все последние обновления на систему.


Включена возможность добавления L2TP

Из предложенного выбираем Layer 2 Tunneling Protocol (L2TP) и заполняем необходимые для подключения поля


Стандартные настройки L2TP

Заполняем все необходимые поля. Необходимый минимум:

Обычно для соединения по L2TP необходимо знать 4 вещи: адрес сервера, логин и пароль пользователя для подключения, и PSK ключ. Первые три параметра мы уже ввели. Теперь нажимаем кнопку IPsec Settings


PSK

В данном окне ставим галочку Enable IPsec tunnel to L2TP host и вводим Pre-shared key (PSK)

Сохраняем все настройки и пробуем подключиться. Если все работает, отлично. Когда есть проблемы с подключением, необходимо смотреть системный журнал Ubuntu и диагностировать проблемы на стороне сервера VPN. Настройка L2TP в Ubuntu возможна и из консоли, но рассмотренный вариант прост и удобен.

В интернете можно найти много примеров настройки L2TP over IPSEC, в том числе с использованием оборудования Mikrotik. Беда только в том, что многие из этих гайдов являются либо не совсем корректными, либо не совсем понятными для тех, кто с IPSEC до этого не сталкивался или сталкивался поверхностно, ну и почти нигде не рассматривается вариант с L2TP-сервером на базе Linux-машины и микротиком в качестве клиента (что, опять же, может вызвать у тех, кто не имел раньше опыта с настройкой IPSEC, массу вопросов и непонимания, почему же ничего не работает).
В данной статье рассматривается организация L2TP over IPSEC с использованием Ubuntu Linux в качестве сервера (например, виртуалка в каком-нибудь DigitalOcean'е) и роутером с Mikrotik RouterOS в качестве клиента. В качестве аутентификации будем использовать pre-shared key (PSK).
ip-адреса и прочие вещи, указанные в примере (чтобы было понятно, что к чему):

Внешний IP-адрес Linux-машины с L2TP-сервером: 1.1.1.1 Внешний IP-адрес Mikrotik-клиента: 2.2.2.2 (примечание: если Mikrotik имеет динамический внешний адрес, то далее будет отдельный пункт для таких случаев) Диапазон адресов для L2TP-клиентов: 10.0.0.0/29

Подразумевается, что все команды, выполняемые на сервере, делаются от имени root.

L2TP-клиентам будем раздавать адреса из диапазона 10.0.0.0/29

Сервер

В первую очередь нам нужно внести изменения в системные настройки ipv4. Дописываем в /etc/sysctl.conf следующие строчки:


Применяем изменения без перезагрузки с помощью sysctl -p, на всякий случай делаем


Устанавливаем нужные пакеты (iptables-persistent в списке нужен для сохранения конфигурации iptables и автоматического восстановления оной после ребута, если вы используете другую утилиту такого толка, например vuurmuur, то не ставьте iptables-persistent и все упоминаия о нем в дальнейшем тексте статьи просто пропускайте):


Добавляем правила в iptables:


Сохраним конфигурацию iptables командой /etc/init.d/iptables-persistent save

Настраиваем IPSEC. В файл /etc/ipsec.conf прописываем следующее (важно - обязательно соблюдая отступы как в примере):


Теперь прописываем ключи в файл /etc/ipsec.secrets


Если внешний адрес у клиента динамический, то вместо 2.2.2.2 пишем %any

Переходим к настройке L2TP-демона. Открываем /etc/xl2tpd/xl2tpd.conf и пишем:


Прописываем опции pppd в /etc/ppp/options.xl2tpd:


И наконец добавляем L2TP-пользователей в /etc/ppp/chap-secrets:


Перезапускаем ipsec и xl2tpd


Теперь настраиваем Mikrotik. Поскольку статья ориентирована на начинающих, я постараюсь показать все на примерах скриншотов из winbox.

Важно: красным на скриншотах выделены разделы/вкладки/и т.д. для того, чтобы было проще их заметить среди остальных (многие почему-то не очень хорошо ориентируются среди множества пунктов меню в winbox, хотя по-моему там всё предельно просто и удобно). В общем, если на скриншоте приведены какие-либо параметры, значит они нужны, поэтому сверяться со скриншотами рекомендую крайне внимательно.

Открываем PPP, вкладку Profiles, добавляем новый:

Затем переходим во вкладку Policies и добавляем:


Теперь добавляем peer в одноименной вкладке (в поле Secret прописываем ключ, который на сервере добавили в /etc/ipsec.secrets):

Возвращаемся в раздел PPP, во вкладке Interfaces создаем новый интерфейс L2TP client:

Сохраняем и применяем настройки. Если все сделано правильно, то L2TP-соединение должно установиться, а в разделе IPSEC - Installed SA должны появиться две записи для наших IPSEC-туннелей.

Дополнительная информация для случаев, когда Mikrotik имеет динамический внешний ip

Будем считать, что внешним интерфейсом у нас на микротике является ether1-gateway

Сохраняем. Теперь каждые две минуты роутер будет проверять, изменился ли внешний ip, и если да, вносить его в нашу IPSEC Policy вместо старого.

Поднимаем свой VPN - L2TP/IPsec на Ubuntu

Для установки L2TP/IPsec нам понадобятся права root пользователя или sudo.

1. Установим необходимые пакеты:

После окончания установки, нам понадобится отредактировать несколько конфигурационных файлов. Для изменения файлов вы можете пользоваться любым удобным для вас способом.

Важно: при редактировании всех, указанных ниже файлов, оставляйте в конце файла пустую строку . При ее отсутствии, службы могут работать некорректно.

Теперь вам необходимо определиться с локальной подсетью для клиентов VPN. Вы можете сделать себе подсеть из любой сети/подсети, которая не маршутизируется в интернете:

2. Открываем файл /etc/ipsec.conf, стираем его содержимое и добавляем следующую конфигурацию:

virtual_private = % v4 : 10.0.0.0 / 8 , % v4 : 192.168.0.0 / 16 , % v4 : 172.16.0.0 / 12 , % v6 : fd00 :: / 8 , % v6 : fe80 :: / 10

Не забудьте изменить 0.0.0.0 в параметре left на внешний IP вашего сервера.

Для обеспечения безопасности, IPSec будет использовать shared-key - совместно используемый ключ. Он один для всех пользователей, периодически его можно изменять в целях безопасности.

3. Открываем /etc/ipsec.secrets и добавляем строку в представленном ниже формате:

Здесь необходимо заменить 0.0.0.0 на внешний IP вашего сервера, а строку в кавычках на ваш собственный общий ключ. Быстро сгенерировать рандомную строку вы можете например такой командой:

4. Теперь убедимся, что нужные нам пакеты установились из зависимостей в первом шаге:

5. Открываем файл /etc/xl2tpd/xl2tpd.conf, стираем его содержимое и добавляем следующее:

ip range = 192.168.1.2-192.168.1.254 local ip = 192.168.1.1 require authentication = yes refuse pap = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes ;ppp debug = yes ;debug avp = yes ;debug network = yes ;debug state = yes ;debug tunnel = yes

Здесь в ip range вы указываете пул адресов, которые будут выдаваться клиентам, подключающимся к вашему L2TP/IPsec VPN, а в local ip - локальный ip шлюза из этой подсети, но не входящий в пул (обычно первый адрес в подсети). Последние строки вы можете раскомментировать в случае, если вам нужен более подробный лог соединения.

Читайте также: