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 — для нашего случая, выбираем 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 протоколы.
Добавление клиента L2TP
Добавим клиент L2TP в Network Manager чтобы наравне с остальными протоколами была возможность добавить L2TP соединение.
После окончания установки перезагрузим компьютер. Также не забывайте сразу после установки новых пакетов ставить все последние обновления на систему.
Из предложенного выбираем Layer 2 Tunneling Protocol (L2TP) и заполняем необходимые для подключения поля
Заполняем все необходимые поля. Необходимый минимум:
Обычно для соединения по L2TP необходимо знать 4 вещи: адрес сервера, логин и пароль пользователя для подключения, и PSK ключ. Первые три параметра мы уже ввели. Теперь нажимаем кнопку IPsec Settings
В данном окне ставим галочку 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 вместо старого.
Для установки 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 шлюза из этой подсети, но не входящий в пул (обычно первый адрес в подсети). Последние строки вы можете раскомментировать в случае, если вам нужен более подробный лог соединения.
Читайте также: