VPN сервер на Ubuntu для нативного подключения

Какой VPN сервер выбрать для Ubuntu. Пошаговая настройка

VPN сервер на Ubuntu: выбираем и настраиваем WireGuard, OpenVPN, StrongSwan

Быстрый ответ
Для ubuntu сервера бери WireGuard. Встроен в ядро, настраивается за 15 минут, обгоняет OpenVPN по скорости в 3-4 раза. Если нужна совместимость со старыми системами — OpenVPN. Если нужна нативность без клиентов на телефонах — StrongSwan с IPsec. Настройка WireGuard: установи пакет, сгенерируй ключи, пропиши peer, запусти systemd. Клиент подключается в два тапа.

1. Диагноз

Нужен vpn сервер ubuntu. Смотришь на десяток протоколов и не понимаешь, за что браться. Знакомо?

Начальник сказал «настрой VPN для удаленки». Ты открыл Google и утонул в сравнениях. WireGuard хвалят за скорость. OpenVPN называют стандартом. StrongSwan обещает нативность без приложений. Каждый форумный гуру толкает свой вариант как единственно правильный. А ты просто хочешь, чтобы бухгалтер из дома подключилась к 1С и не звонила тебе в 8 вечера.

В этой статье разберем три рабочих варианта. Настроим каждый пошагово. Получишь конфиг, который работает с первого раза. Время настройки — от 15 минут до часа. Нужен сервер Ubuntu с публичным IP и доступом по SSH.

Вот что будет внутри:

Если базовая настройка Ubuntu еще не сделана, начни с нее. А для сегментации сети смотри статью про DMZ.

2. Причины

Почему выбор VPN превращается в головную боль? Разберем по факту.

Каждый протокол хвалит своя тусовка

Фанаты WireGuard кричат, что OpenVPN — тормозной динозавр. Адепты OpenVPN пишут, что WireGuard не прошел аудит временем. Продавцы Cisco впаривают AnyConnect. Ты сидишь посередине и понимаешь, что все правы. И все неправы. Выбор зависит от задачи, а не от моды.

Удаленка без VPN — это публичная сеть

Сотрудник подключается к 1С из домашнего WiFi. Пароль на роутере — admin123. Сосед сканирует эфир и видит трафик к твоему серверу в plaintext. Без VPN ты отправляешь корпоративные данные через чужие руки. Это не паранойя. Это статистика.

Провайдерские решения не дают контроля

Купил VPN у хостера. Работает, пока работает. Потом хостер меняет политику, повышает цену или закрывается. Ты остаешься без связи и без ключей. Свой сервер — свои правила. Свои логи. Своя ответственность.

Скорость туннеля критична для видеозвонков

OpenVPN на TCP 443 проходит через любой файрвол. Но TCP для туннелей — это зло. Потеря пакета вызывает ретрансмит, и весь туннель тормозит. WireGuard работает на UDP и не боится потерь. Разница на плохом канале — в 5-10 раз.

Мобильные устройства требуют нативности

iPhone не умеет WireGuard из коробки. Нужно ставить приложение. Android тоже. А IPsec встроен в обе системы на уровне ОС. Для сотни мобильных сотрудников это экономит часы поддержки. Каждый лишний клик в настройке VPN — это звонок в техподдержку.

Legacy системы не знают про новые протоколы

Старый Windows 7 в бухгалтерии не подключится к WireGuard. Старый принтер с VPN-клиентом знает только PPTP и L2TP. OpenVPN работает везде, начиная с XP. StrongSwan поддерживает стандартные профили, которые ест даже встроенный клиент Windows.

3. Рецепт

Подготовка

Перед настройкой проверь окружение. Потеряешь SSH-соединение во время настройки firewall — будешь лезть в консоль хостера.

Параметр Требование
ОС Ubuntu Server 22.04 LTS или 24.04 LTS (на момент публикации актуальна 24.04. Перед установкой проверь свежие релизы на ubuntu.com)
Процессор 1 vCPU для WireGuard, 2 vCPU для OpenVPN с множеством клиентов
Память 512 МБ минимум, 1 ГБ комфортно
Диск 10 ГБ, SSD желательно
Сеть Публичный IP, открытый UDP порт для WireGuard
Доступ SSH с ключом, root или sudo

Таблица портов:

Порт Протокол Назначение Доступен снаружи
22 TCP SSH — управление сервером Только с белого списка IP
51820 UDP WireGuard Да
1194 UDP OpenVPN Да
1194 TCP OpenVPN fallback Да
500 UDP IPsec IKE Да
4500 UDP IPsec NAT-T Да

Архитектура:

Клиент Windows/macOS/iOS

Интернет

Клиент Linux/Android

Ubuntu Server

WireGuard 51820/UDP

OpenVPN 1194/UDP

StrongSwan 500+4500/UDP

LAN 10.200.200.0/24

Шаг 1. Подготовка сервера

Обнови систему. Старые пакеты — дыры в безопасности.


apt update && apt upgrade -y

Включи forwarding. Без него пакеты из туннеля не выйдут в интернет.


sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Результат: сервер может маршрутизировать пакеты между интерфейсами.

Шаг 2. Настройка firewall

Закроем все, кроме нужного. UFW проще iptables, но работает поверх него.


apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 51820/udp
ufw allow 1194/udp
ufw allow 500/udp
ufw allow 4500/udp
ufw enable

Результат: сервер отвечает только на SSH и VPN-порты. Все остальное дропается.

Шаг 3. Настройка WireGuard — основной вариант

WireGuard выбран не потому, что он модный. Он встроен в ядро Linux начиная с 5.6. Ubuntu 22.04 и 24.04 его уже содержат. Конфиг читается за 30 секунд. Скорость выше OpenVPN из-за минимальных накладных расходов.

Установи пакет.


apt install wireguard -y

Создай директорию и сгенерируй ключи сервера.


mkdir -p /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
chmod 600 privatekey

Создай конфиг сервера. Назови его wg0.conf.


[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = 
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Бухгалтер Ольга
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# Разработчик Дима
PublicKey = 
AllowedIPs = 10.200.200.3/32

Вставь содержимое privatekey в поле SERVER_PRIVATE_KEY. Узнать его можно так.


cat /etc/wireguard/privatekey

Запусти интерфейс и добавь в автозагрузку.


wg-quick up wg0
systemctl enable wg-quick@wg0

Результат: сервер слушает UDP 51820. Клиенты с правильными ключами получат доступ.

Создание конфига клиента

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


wg genkey | tee client-privatekey | wg pubkey > client-publickey

Создай файл client1.conf.


[Interface]
Address = 10.200.200.2/32
PrivateKey = 
DNS = 8.8.8.8

[Peer]
PublicKey = 
Endpoint = :51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

SERVER_PUBLIC_KEY — это содержимое /etc/wireguard/publickey на сервере. SERVER_IP — публичный адрес твоего Ubuntu.

Добавь публичный ключ клиента на сервер в wg0.conf. Перезапусти.


wg-quick down wg0
wg-quick up wg0

Результат: клиент подключается. Трафик заворачивается в туннель.

Шаг 4. Настройка OpenVPN — когда нужна совместимость

OpenVPN старше многих админов. Работает на Windows XP, на Android 4, на маршрутизаторах Cisco. Если у тебя зоопарк из старых систем, бери его.

Установи пакеты.


apt install openvpn easy-rsa -y

Скопируй шаблоны Easy-RSA.


make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa

Отредактируй vars. Укажи свои данные или оставь defaults.


./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret /etc/openvpn/ta.key

Создай конфиг сервера /etc/openvpn/server.conf.


port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/ta.key 0
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-GCM
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3

Включи forwarding и NAT, если еще не сделал.


systemctl enable openvpn@server
systemctl start openvpn@server

Результат: OpenVPN слушает UDP 1194. Генерация клиентских сертификатов происходит через Easy-RSA.

Шаг 5. Настройка StrongSwan — для нативных подключений

StrongSwan реализует IPsec. iPhone и Android подключаются без приложений. Windows тоже. Это экономит часы на объяснении пользователям, как установить софт.

Установи.


apt install strongswan strongswan-pki -y

Сгенерируй сертификаты.


mkdir -p /etc/ipsec.d/{private,cacerts,certs}
ipsec pki --gen --type rsa --size 4096 --outform pem > /etc/ipsec.d/private/ca-key.pem
ipsec pki --self --ca --lifetime 3650 --in /etc/ipsec.d/private/ca-key.pem --type rsa --dn "C=RU, O=MyOrg, CN=My CA" --outform pem > /etc/ipsec.d/cacerts/ca-cert.pem
ipsec pki --gen --type rsa --size 2048 --outform pem > /etc/ipsec.d/private/server-key.pem
ipsec pki --pub --in /etc/ipsec.d/private/server-key.pem --type rsa | ipsec pki --issue --lifetime 1825 --cacert /etc/ipsec.d/cacerts/ca-cert.pem --cakey /etc/ipsec.d/private/ca-key.pem --dn "C=RU, O=MyOrg, CN=" --san  --flag serverAuth --flag ikeIntermediate --outform pem > /etc/ipsec.d/certs/server-cert.pem

Настрой /etc/ipsec.conf.


config setup
    charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2"

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,1.1.1.1
    rightsendcert=never
    eap_identity=%identity

Настрой учетные записи в /etc/ipsec.secrets.


: RSA server-key.pem
username : EAP "password"

Перезапусти.


systemctl restart strongswan
systemctl enable strongswan

Результат: нативный VPN. Клиенты подключаются через встроенные средства ОС.

Шаг 6. Отдельный пользователь для управления

Не сиди под root. Создай пользователя для администрирования VPN.


adduser vpnadmin
usermod -aG sudo vpnadmin

Запрети вход root по SSH.


sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

Результат: root отключен. Управление через отдельного пользователя с sudo.

4. Проверка

Настроил? Проверь, прежде чем звонить бухгалтерии.

Проверка WireGuard


wg show

Увидишь интерфейс wg0, публичный ключ сервера, список peers. Если peer подключен, в поле latest handshake будет время последнего рукопожатия.

Проверь пинг с клиента.


ping 10.200.200.1

Должен проходить. Проверь выход в интернет через туннель.


curl ifconfig.me

Должен показать IP твоего Ubuntu сервера, а не IP провайдера клиента.

Проверка OpenVPN


systemctl status openvpn@server

Статус должен быть active. Проверь лог.


tail -f /var/log/openvpn/openvpn-status.log

Подключи клиента. В логе появится запись о новом соединении.

Проверка StrongSwan


ipsec statusall

Увидишь активные SA. Подключи iPhone через Настройки — VPN. Статус должен смениться на Connected.

Проверка скорости


iperf3 -s

На клиенте.


iperf3 -c 

Сравни результаты для WireGuard и OpenVPN. WireGuard должен быть быстрее на 30-50%.

5. Осложнения

Ошибка: WireGuard handshake не проходит

Причина: firewall блокирует UDP 51820. Или клиент указывает неправильный публичный ключ сервера. Или сервер за NAT без проброса порта.

Решение: проверь UFW.


ufw status verbose

Проверь ключи.


wg show

Убедись, что публичный ключ клиента добавлен в конфиг сервера. Один лишний символ — и handshake не состоится.

Ошибка: Клиент подключается, но нет интернета

Причина: NAT не настроен. Или forwarding отключен. Или DNS не резолвится.

Решение: проверь iptables.


iptables -t nat -L -n -v | grep MASQUERADE
sysctl net.ipv4.ip_forward

Если MASQUERADE отсутствует, добавь вручную.


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

Ошибка: OpenVPN TLS handshake failed

Причина: сертификаты сгенерированы неправильно. Или клиент и сервер используют разные версии TLS. Или часы на клиенте и сервере различаются больше чем на 5 минут.

Решение: проверь дату.


timedatectl status

Проверь сертификаты.


openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/server.crt -text -noout | grep "Not After"

Ошибка: StrongSwan no proposal chosen

Причина: клиент и сервер не согласовали шифронаборы. iPhone по умолчанию использует AES-256-GCM. Если сервер настроен на AES-CBC, соединение не установится.

Решение: проверь шифронаборы в /etc/ipsec.conf. Убедись, что esp и ike содержат совместимые алгоритмы.


esp=aes256gcm16-sha256-modp2048!
ike=aes256gcm16-sha256-modp2048!

Ошибка: Соединение есть, но скорость низкая

Причина: MTU в туннеле больше, чем пропускает канал. Пакеты фрагментируются или дропаются.

Решение: уменьши MTU в конфиге клиента.


MTU = 1280

Для WireGuard добавь в Interface.


MTU = 1280

Ошибка: Приватный ключ утерян

Причина: ключ лежал в /tmp и был удален при перезагрузке. Или админ перезаписал файл случайно.

Решение: генерируй новую пару ключей. Добавь новый публичный ключ на сервер. Удали старый. WireGuard не умеет восстанавливать ключи. Одна строка в crontab без комментария — весь отдел. Одна потерянная приватная ключ — вся сеть перенастраивается.

6. Альтернативы

OpenVPN

Бери, когда нужна совместимость со старыми системами. Windows 7, Android 4, роутеры MikroTik — все знают OpenVPN. Конфиги многословны, но гуглится все. Для корпоративной сети с разнородными клиентами — рабочая лошадка.

StrongSwan

Бери, когда важна нативность. Сотрудники с iPhone не хотят ставить приложения. Настройка сложнее, но экономит время поддержки. Для сотни мобильных пользователей окупается за неделю.

Outline

Outline от Google Jigsaw — обертка над Shadowsocks. Хорош для обхода блокировок, плох для корпоративной безопасности. Нет контроля доступа по IP, нет интеграции с Active Directory. Для личного использования — ок. Для офиса — нет.

ZeroTier

Mesh-сеть поверх интернета. Не требует публичного IP. Но трафик идет через чужие серверы, если прямое соединение не устанавливается. Для критичной инфраструктуры — риск. Для домашней лаборатории — удобно.

SoftEther

Японский мультпротокольный сервер. Умеет и OpenVPN, и IPsec, и свой протокол. Но проект развивается медленно. Документация на японском и английском. Для русскоязычного админа — лишняя головная боль.

7. Профилактика

Мониторинг туннеля

Повесь простой скрипт на cron. Проверяй, что WireGuard интерфейс поднят.


*/5 * * * * root /usr/bin/wg show | /usr/bin/grep -q "wg0" || /usr/bin/systemctl restart wg-quick@wg0

Для OpenVPN аналогично.


*/5 * * * * root /bin/systemctl is-active openvpn@server || /bin/systemctl restart openvpn@server

Бэкап ключей

Ключи WireGuard лежат в /etc/wireguard. Это твоя корона. Потеряешь — перенастраиваешь всех клиентов.


tar czf /backup/wireguard-keys-$(date +%Y%m%d).tar.gz /etc/wireguard/
scp /backup/wireguard-keys-*.tar.gz backup@backup.server:/vpn-keys/

Что бэкапить: /etc/wireguard, /etc/openvpn/easy-rsa, /etc/ipsec.d. Как часто: после каждого добавления клиента и раз в неделю автоматом. Где хранить: внешний сервер и локальное зашифрованное хранилище. Как восстановить: распакуй архив, перезапусти сервис.

Автозапуск

Убедись, что сервисы в systemd enabled.


systemctl is-enabled wg-quick@wg0
systemctl is-enabled openvpn@server
systemctl is-enabled strongswan

Если нет — включи.

Ротация ключей

Меняй ключи каждые 12 месяцев. Или при увольнении сотрудника. В WireGuard удали peer из конфига и перезапусти.


wg-quick down wg0
wg-quick up wg0

Сгенерируй новые ключи клиенту. Отправь конфиг через защищенный канал. Не кидай в мессенджеры.

Обновление пакетов

Проверяй обновления раз в неделю. Уязвимости в VPN-пакетах появляются регулярно.


apt update
apt list --upgradable | grep -E "wireguard|openvpn|strongswan"

Обновляй сначала на тестовом сервере. Потом на продакшене. Как откатиться: apt install wireguard= или восстанови из бэкапа конфиг.

Ограничение доступа по IP

Если удаленные сотрудники работают из дома с белыми IP, ограничь подключение.


ufw allow from 203.0.113.0/24 to any port 51820 proto udp

Результат: WireGuard отвечает только с доверенных подсетей. Брутфорс исключен.

8. FAQ

Почему VPN не работает после настройки?

Проверь три вещи. Первое — firewall пропускает порт. Второе — forwarding включен в sysctl. Третье — NAT настроен на выходном интерфейсе. Если хотя бы одно из этого не сделано, пакеты уйдут в никуда. Проверь командой tcpdump.


tcpdump -i any port 51820

Как проверить что VPN работает правильно?

Подключи клиента. Открой сайт 2ip.ru или ifconfig.me. Должен показаться IP твоего сервера. Проверь traceroute до внутреннего ресурса. Первый хоп должен быть адрес туннельного интерфейса. Если первый хоп — роутер провайдера, трафик не идет через VPN.

Что делать если нет интернета через VPN?

Проверь DNS. Клиент может получить IP туннеля, но не резолвить имена. Убедись, что в конфиге клиента указан DNS. Проверь NAT на сервере. Убедись, что forwarding включен. Проверь MTU — уменьши до 1280.

Чем WireGuard отличается от OpenVPN?

WireGuard проще, быстрее и современнее. Работает на UDP, использует криптографию нового поколения. OpenVPN старше, проверен временем, работает через TCP 443 там, где UDP заблокирован. Для новых проектов бери WireGuard. Для legacy — OpenVPN.

Можно ли использовать один сервер для всех трех протоколов?

Можно, но не нужно. Три VPN-сервиса на одной машине повышают площадь атаки. Если сервер скомпрометирован, взломщик получает доступ ко всем туннелям. Лучше подними отдельный инстанс для каждого протокола. Или выбери один и масштабируй его.

Какой VPN лучше для пятидесяти сотрудников?

WireGuard. Один сервер с 2 vCPU и 2 ГБ RAM потянет 50 клиентов без напряга. OpenVPN на том же железе начнет тормозить при 30 подключениях. StrongSwan тянет много клиентов, но настройка займет в три раза дольше. Время админа тоже деньги.

9. Прогноз

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

Firewall закрыт. Ключи забэкаплены. Мониторинг следит за туннелем. Ты спишь ночью, а не читаешь логи в терминале.

Если не заработало — пиши в комментарии, разберемся. Прикладывай вывод wg show или ipsec statusall. Без этого диагностика превращается в гадание на кофейной гуще.

А если нужно изолировать VPN-сервер от остальной сети, смотри статью про DMZ. Паранойя в наше время — не порок, а профессиональная черта.

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх