Настройка VPN сервера на Ubuntu: L2TP/IPsec и OpenVPN — подробное руководство

Практическое руководство по созданию VPN-сервера на Ubuntu. Рассматриваем L2TP/IPsec и OpenVPN: установка, настройка, безопасность, устранение неполадок.

Зачем нужен собственный VPN-сервер и что он даёт

Собственный VPN-сервер на Ubuntu — это способ получить безопасный доступ к домашней или офисной сети из любой точки мира, а также защитить интернет-трафик при использовании публичных Wi-Fi сетей. В отличие от коммерческих VPN-сервисов, самостоятельный сервер даёт полный контроль над данными и конфигурацией. Вы не зависите от политики логирования стороннего провайдера и можете настроить доступ строго под свои задачи.

VPN (Virtual Private Network) создаёт зашифрованный туннель между вашим устройством и сервером. Весь трафик проходит через этот туннель, что защищает его от перехвата. Для системного администратора или энтузиаста Linux собственный VPN — это ещё и способ реализовать политику сетевой безопасности. Например, можно разрешить доступ к почтовому серверу только с IP-адресов VPN-подсети, создав белый список в брандмауэре.

Наиболее популярные протоколы для самостоятельного развёртывания — L2TP/IPsec и OpenVPN. L2TP/IPsec часто выбирают за встроенную поддержку в большинстве операционных систем (Windows, macOS, iOS, Android, Linux) без установки дополнительного ПО. OpenVPN, в свою очередь, славится гибкостью, высокой скоростью и возможностью обхода строгих сетевых фильтров. Оба варианта имеют свои особенности, которые мы разберём далее.

Выбор протокола: L2TP/IPsec или OpenVPN

Перед настройкой важно определиться с протоколом. L2TP (Layer 2 Tunneling Protocol) сам по себе не шифрует трафик, поэтому его всегда комбинируют с IPsec. Связка L2TP/IPsec использует порты UDP 500, 4500 и 1701. Она отличается простотой настройки клиентов, но может блокироваться в сетях со строгим файрволом, так как использует фиксированные порты.

OpenVPN работает через TLS и может использовать любой порт, включая TCP 443, который обычно не блокируется. Это делает его более устойчивым к цензуре. OpenVPN поддерживает сертификаты, что повышает безопасность, но требует установки клиентского ПО на всех устройствах. В тестах OpenVPN часто показывает высокую скорость — например, достаточную для просмотра видео 4K.

Для быстрого развёртывания с минимальными усилиями и поддержкой «из коробки» на всех устройствах выбирайте L2TP/IPsec. Если нужна максимальная гибкость, устойчивость к блокировкам и продвинутые функции (например, интеграция с LDAP или 2FA), остановитесь на OpenVPN Access Server.

Предварительная подготовка сервера Ubuntu

Независимо от выбранного протокола, сервер должен быть подготовлен. Вам понадобится VPS или физическая машина с Ubuntu (рекомендуется 20.04 или 22.04 LTS), доступ по SSH и права суперпользователя. Убедитесь, что система обновлена: sudo apt update && sudo apt upgrade -y.

Для L2TP/IPsec необходимо включить IP forwarding — возможность маршрутизации пакетов между интерфейсами. Отредактируйте файл /etc/sysctl.conf, раскомментируйте строку net.ipv4.ip_forward=1 и примените изменения командой sysctl -p. Это позволит клиентам VPN получать доступ в интернет через ваш сервер.

Также нужно настроить брандмауэр. Если вы используете iptables, добавьте правило маскарадинга для подсети VPN, например: iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE. Убедитесь, что имя сетевого интерфейса (eth0) соответствует вашему (проверить можно командой ip a). Для автоматического применения правил после перезагрузки создайте systemd-юнит или используйте iptables-persistent.

Настройка L2TP/IPsec сервера: установка и конфигурация StrongSwan

Для L2TP/IPsec на Ubuntu используется StrongSwan в качестве реализации IPsec и xl2tpd для L2TP. Установите пакеты:

sudo apt install strongswan libcharon-extra-plugins xl2tpd

Настройка StrongSwan начинается с файла /etc/ipsec.conf. В секции config setup укажите параметры отладки и uniqueids=no. Затем добавьте описание соединения:

conn l2tp-vpn
    type=transport
    authby=secret
    pfs=no
    rekey=no
    keyingtries=2
    left=%any
    leftid=@srvl2tp
    right=%any
    auto=add

Ключевые параметры: type=transport — транспортный режим, authby=secret — аутентификация по предварительному общему ключу (PSK), pfs=no — отключение Perfect Forward Secrecy для совместимости с некоторыми клиентами. В файле /etc/ipsec.secrets укажите PSK:

%any : PSK "ваш_секретный_ключ"

После этого перезапустите StrongSwan: sudo systemctl restart strongswan-starter и добавьте в автозагрузку: sudo systemctl enable strongswan-starter.

Настройка L2TP-сервера (xl2tpd) и PPP

Следующий шаг — настройка xl2tpd. Отредактируйте /etc/xl2tpd/xl2tpd.conf. В секции [global] укажите порт 1701 и путь к файлу аутентификации. В секции [lns default] задайте диапазон IP-адресов для клиентов, локальный IP сервера и параметры аутентификации:

[global]
port = 1701
auth file = /etc/ppp/chap-secrets
access control = no

[lns default]
 exclusive = no
 ip range = 10.10.0.10-10.10.0.20
 local ip = 192.168.20.104
 length bit = yes
 require chap = yes
 refuse pap = yes
 require authentication = yes
 name = srvl2tp
 pppoptfile = /etc/ppp/options.xl2tpd
 flow bit = yes

Затем создайте файл /etc/ppp/options.xl2tpd с параметрами PPP:

noccp
auth
mtu 1410
mru 1410
nodefaultroute
noproxyarp
silent
asyncmap 0
hide-password
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
logfile /var/log/xl2tpd/xl2tpd.log
debug

Учётные данные пользователей хранятся в /etc/ppp/chap-secrets. Формат: логин, имя сервера, пароль, IP-адрес (или * для любого). Например:

"vasya" srvl2tp "пароль" *

Перезапустите xl2tpd: sudo systemctl restart xl2tpd и включите автозапуск: sudo systemctl enable xl2tpd.

Настройка брандмауэра и маршрутизации для L2TP/IPsec

Для корректной работы L2TP/IPsec необходимо открыть порты в брандмауэре: UDP 500 (IKE), UDP 4500 (IPsec NAT-T) и UDP 1701 (L2TP). Также разрешите протоколы ESP (IP protocol 50) и AH (51), если они используются. Пример правил iptables:

iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p 50 -j ACCEPT
iptables -A INPUT -i eth0 -p 51 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT

Не забудьте разрешить входящие SSH (порт 22), чтобы не потерять доступ к серверу. Для доступа клиентов в интернет добавьте правило MASQUERADE для подсети VPN. Если сервер находится за NAT, необходимо пробросить порты 500, 4500 и 1701 на роутере.

Для автоматического применения правил после перезагрузки создайте скрипт и systemd-юнит, как описано в разделе подготовки. Будьте осторожны: ошибка в правилах может полностью закрыть доступ к серверу.

Настройка OpenVPN Access Server: установка и базовая конфигурация

OpenVPN Access Server — коммерческий продукт с бесплатной лицензией для двух одновременных подключений. Он предоставляет удобную веб-панель для управления пользователями и настройками. Установка на Ubuntu 22.04/20.04 выполняется из официального репозитория:

echo "deb [signed-by=/etc/apt/keyrings/openvpn-as.gpg.key] http://as-repository.openvpn.net/as/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/openvpn-as.list
wget --quiet -O - https://as-repository.openvpn.net/as-repo-public.gpg | sudo tee /etc/apt/keyrings/openvpn-as.gpg.key
sudo apt install apt-transport-https ca-certificates
sudo apt update
sudo apt install -y openvpn-as

После установки в терминале будут показаны URL-адреса панели администратора (https://ваш-ip:943/admin) и клиентского портала (https://ваш-ip:943), а также сгенерированные учётные данные администратора. Панель администратора использует самозаверяющий сертификат, поэтому браузер будет предупреждать о небезопасном соединении.

Сервер автоматически включает IP forwarding и настраивает маскарадинг. По умолчанию OpenVPN AS слушает TCP-порт 443 и UDP-порт 1194. В панели администратора можно создавать пользователей, задавать пароли и настраивать параметры маршрутизации и DNS.

Клиентские подключения: настройка на Ubuntu, Windows, macOS и мобильных устройствах

Для L2TP/IPsec на Ubuntu удобно использовать Network Manager. Установите пакет network-manager-l2tp-gnome, затем в настройках сети добавьте новое VPN-подключение типа L2TP. Укажите адрес сервера, имя пользователя, пароль и PSK-ключ. На вкладке IPsec введите предварительный общий ключ. После сохранения подключение появится в списке VPN.

Для OpenVPN на Ubuntu можно использовать клиент командной строки или Network Manager. Установите openvpn и network-manager-openvpn-gnome. Скачайте профиль .ovpn с клиентского портала OpenVPN AS, поместите его в /etc/openvpn/ и запустите службу systemctl start openvpn@profile-3. Для автоматической аутентификации создайте файл auth.txt с логином и паролем и укажите его в профиле.

На Windows и macOS для OpenVPN AS можно скачать клиент OpenVPN Connect с портала. Для L2TP/IPsec встроенные клиенты есть в Windows, macOS, iOS и Android — достаточно указать адрес сервера, имя пользователя, пароль и PSK.

Безопасность и устранение неполадок

При настройке VPN-сервера важно уделить внимание безопасности. Используйте надёжные пароли и PSK-ключи. Для OpenVPN рекомендуется установить сертификат Let's Encrypt, чтобы избежать предупреждений браузера и повысить доверие. Регулярно обновляйте систему и пакеты.

Типичные проблемы при настройке L2TP/IPsec:

  • Неудачная аутентификация — проверьте правильность логина, пароля и PSK.
  • Нет соединения — убедитесь, что порты открыты и сервер доступен.
  • Потеря соединения — возможно, несовместимы параметры шифрования. Попробуйте изменить настройки IPsec (например, отключить PFS).
  • Нет доступа в интернет — проверьте правило MASQUERADE и IP forwarding.

Для OpenVPN AS распространённая проблема — отсутствие DNS у клиентов. В панели администратора в разделе «VPN Settings» укажите DNS-серверы, например 8.8.8.8 и 1.1.1.1. Также проверьте, что в разделе «Routing» указана подсеть VPN (обычно 172.27.240.0/20).

Если возникают ошибки, читайте логи: для L2TP — /var/log/xl2tpd/xl2tpd.log, для StrongSwan — journalctl -u strongswan-starter, для OpenVPN — journalctl -u openvpnas.

Дополнительные возможности: Stunnel, 2FA и интеграция с LDAP

OpenVPN Access Server поддерживает двухфакторную аутентификацию (2FA), интеграцию с Active Directory/LDAP и RADIUS. Эти функции настраиваются через веб-панель и позволяют повысить безопасность доступа.

Для обхода строгих сетевых фильтров (например, в Китае или Иране) можно использовать Stunnel — прокси, который оборачивает трафик OpenVPN в TLS. Это скрывает факт использования VPN и позволяет подключаться через порт 443. Настройка Stunnel на сервере включает установку пакета stunnel4, создание конфигурационного файла и указание сертификата Let's Encrypt.

Также OpenVPN AS поддерживает виртуальный хостинг (несколько доменов) и масштабирование на сотни и тысячи пользователей. Это делает его подходящим решением для небольших организаций и провайдеров услуг VPN.

Вопросы и ответы

Какой протокол VPN выбрать для Ubuntu: L2TP/IPsec или OpenVPN?

Выбор зависит от ваших задач. L2TP/IPsec проще в настройке клиентов, так как поддерживается всеми операционными системами без дополнительного ПО. Однако он использует фиксированные порты (UDP 500, 4500, 1701), которые могут блокироваться в некоторых сетях. OpenVPN более гибкий, может работать через TCP 443 (обычно не блокируется), поддерживает сертификаты и дополнительные функции (2FA, LDAP). Если нужна максимальная совместимость — выбирайте L2TP/IPsec, если устойчивость к блокировкам и продвинутые функции — OpenVPN.

Какие порты нужно открыть для L2TP/IPsec VPN?

Для L2TP/IPsec необходимо открыть в брандмауэре UDP-порт 500 (IKE), UDP-порт 4500 (IPsec NAT-T) и UDP-порт 1701 (L2TP). Также могут потребоваться протоколы ESP (IP protocol 50) и AH (51). Если сервер находится за NAT, эти порты нужно пробросить на роутере.

Как добавить пользователя на L2TP/IPsec VPN сервер?

Учётные данные пользователей хранятся в файле /etc/ppp/chap-secrets. Формат строки: логин, имя сервера (указывается в конфигурации xl2tpd), пароль и IP-адрес (или * для любого). Например: "vasya" srvl2tp "пароль" *. После добавления пользователя перезапустите xl2tpd: sudo systemctl restart xl2tpd.

Почему VPN подключается, но нет доступа в интернет?

Наиболее частые причины: не включён IP forwarding (net.ipv4.ip_forward=1 в /etc/sysctl.conf), отсутствует правило MASQUERADE в iptables для подсети VPN, или неправильно настроена маршрутизация. Проверьте, что правило iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE добавлено и интерфейс указан верно. Также убедитесь, что в конфигурации PPP указаны DNS-серверы.

Как настроить клиент L2TP/IPsec на Ubuntu через Network Manager?

Установите пакет network-manager-l2tp-gnome. Затем откройте «Настройки системы» → «Сеть» → «VPN» → «Добавить». Выберите тип L2TP, укажите имя подключения, адрес сервера, имя пользователя и пароль. На вкладке IPsec введите предварительный общий ключ (PSK). Сохраните настройки и активируйте подключение.

Как установить сертификат Let's Encrypt для OpenVPN Access Server?

Установите Certbot: sudo apt install certbot. Откройте порты 80 и 443, затем получите сертификат: sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email ваш-email -d openvpn.example.com. После этого установите сертификат с помощью скрипта sacli, указав пути к файлам privkey.pem, cert.pem и chain.pem. Перезапустите службу openvpnas.

Что делать, если L2TP/IPsec VPN не подключается с ошибкой «no proposal found»?

Эта ошибка означает, что параметры шифрования на сервере и клиенте не совпадают. Проверьте настройки IPsec в /etc/ipsec.conf: алгоритмы шифрования (например, aes256-sha1-modp2048), тип соединения (transport) и отключение PFS (pfs=no). Убедитесь, что клиент использует совместимые параметры. Также проверьте, что PSK-ключ в /etc/ipsec.secrets совпадает с ключом на клиенте.