Зачем нужен собственный 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 совпадает с ключом на клиенте.