Перейти к содержанию

Настройка VPN-сервера OpenConnect (ocserv) на Ubuntu 24.04

Пошаговая настройка VPN-сервера OpenConnect (ocserv) на Ubuntu 24.04: установка из пакета, сертификат Let's Encrypt, NAT, пользователи и типовые ошибки…

Настройка VPN-сервера OpenConnect (ocserv) на Ubuntu 24.04

Обновлено 30 сентября 2026 года: инструкция переписана под Ubuntu 24.04 и заново проверена на чистой системе.

OpenConnect VPN Server, или ocserv, это VPN-сервер с открытым кодом, совместимый с клиентами Cisco Secure Client (бывший AnyConnect). Он работает поверх обычного TLS на порту 443 и подходит, когда нужен защищённый доступ к своим серверам и рабочей сети: зайти в админку трекера с одного доверенного IP, подключиться к внутренним сервисам из кафе или отеля. Ниже пошаговая настройка ocserv на Ubuntu 24.04 с сертификатом Let’s Encrypt, NAT и проверкой результата.

Подойдёт любой VPS с Ubuntu 24.04. Мы берём серверы у adminvps, по промокоду BoostClicks там дают скидку 60%.

Содержание
  1. Что изменилось по сравнению со старой версией
  2. Как это работает
  3. Что понадобится
  4. Шаг 1. Обновление системы
  5. Шаг 2. Установка ocserv и Certbot
  6. Шаг 3. Сертификат Let’s Encrypt
  7. Шаг 4. Настройка ocserv
  8. Шаг 5. Пользователи
  9. Шаг 6. Пересылка пакетов, NAT и брандмауэр
  10. Шаг 7. Запуск и проверка сервера
  11. Шаг 8. Подключение клиентов
  12. Шаг 9. Автообновление сертификата
  13. Если что-то не работает
  14. Служба не запускается сразу после установки
  15. VPN подключается, но сайты не открываются
  16. Сайты открываются по IP, но не по имени
  17. Порт 443 занят
  18. В списке клиентов стоит no-dtls
  19. После нескольких неверных паролей клиента не пускает
  20. Шпаргалка по управлению
  21. Что в итоге
  22. Частые вопросы
  23. Нужно ли собирать ocserv из исходников?
  24. Можно ли настроить ocserv без домена?
  25. Какие клиенты подходят для ocserv?
  26. Почему VPN подключается, но интернета нет?
  27. Сколько клиентов выдержит сервер?
  28. Нужно ли перезапускать ocserv после обновления сертификата?

Что изменилось по сравнению со старой версией

  • ocserv больше не нужно собирать из исходников: в Ubuntu 24.04 он ставится готовым пакетом версии 1.2.4.
  • Добавлены пересылка пакетов и NAT. Без них клиент подключается, но сайты не открываются.
  • Сертификат обновляется без обрыва соединений, сервер не перезапускается каждую ночь.
  • Появились проверка результата и разбор типовых ошибок с настоящими сообщениями из журнала.

Как это работает

Клиент поднимает шифрованный туннель до сервера по TCP 443 и, если получится, второй канал DTLS по UDP 443: он быстрее на нестабильной связи. Сервер выдаёт клиенту адрес из своей сети, принимает его трафик и выпускает наружу от своего имени. Для этого на сервере должны быть включены пересылка пакетов и NAT.

Схема: клиент подключается к серверу ocserv по TLS и DTLS на порту 443, сервер выпускает трафик наружу через ip_forward и NAT
Схема boostclicks.tech.

Что понадобится

  • Сервер с Ubuntu 24.04, лучше чистая установка.
  • Права root или пользователь с sudo.
  • Доменное имя с A-записью на IP сервера, например vpn.example.com. Оно нужно для сертификата.
  • Свободные порты 80/TCP, 443/TCP и 443/UDP. На 443 не должно быть веб-сервера.

Шаг 1. Обновление системы

Подключитесь к серверу по SSH и обновите пакеты.

sudo apt update
sudo apt upgrade -y

Шаг 2. Установка ocserv и Certbot

Все пакеты есть в стандартных репозиториях Ubuntu 24.04. Брандмауэр UFW на большинстве VPS уже установлен, команда просто убедится в этом.

sudo apt install -y ocserv certbot ufw
ocserv --version

Команда покажет OpenConnect VPN Server 1.2.4. Пакет сразу включает службу в автозапуск, но запуститься она пока не может: в конфиге по умолчанию не указан сертификат. Статус failed на этом шаге это нормально, мы исправим его на шаге 4.

Установка ocserv 1.2.4 из пакета на Ubuntu 24.04: служба не запускается без сертификата, в журнале ошибка про server-cert и server-key
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Шаг 3. Сертификат Let’s Encrypt

С настоящим сертификатом клиенты подключаются без предупреждений о безопасности. Certbot на время проверки сам поднимет веб-сервер на порту 80, поэтому порт должен быть свободен и открыт. Если брандмауэр уже включён, сначала откройте порт.

sudo ufw allow 80/tcp
sudo certbot certonly --standalone -d vpn.example.com

Замените vpn.example.com на свой домен. Certbot спросит почту и согласие с условиями, затем сохранит файлы в /etc/letsencrypt/live/vpn.example.com/. Нам нужны два: fullchain.pem и privkey.pem.

Оговорка про нашу проверку: тестовый стенд стоял за NAT, поэтому сертификат мы выпускали через DNS-проверку. Всё, что идёт дальше, выполнено с настоящим сертификатом Let’s Encrypt.

Шаг 4. Настройка ocserv

Конфиг лежит в /etc/ocserv/ocserv.conf. Сохраните исходный файл и внесите правки одной командой. В первой строке подставьте свой домен.

DOMAIN=vpn.example.com
sudo cp /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.orig
sudo sed -i \
  -e "s|^#server-cert = /etc/ocserv/server-cert.pem|server-cert = /etc/letsencrypt/live/$DOMAIN/fullchain.pem|" \
  -e "s|^#server-key = /etc/ocserv/server-key.pem|server-key = /etc/letsencrypt/live/$DOMAIN/privkey.pem|" \
  -e "s|^try-mtu-discovery = false|try-mtu-discovery = true|" \
  -e "s|^default-domain = example.com|default-domain = $DOMAIN|" \
  -e "s|^ipv4-network = 192.168.1.0|ipv4-network = 10.10.10.0|" \
  -e "s|^dns = 192.168.1.1|dns = 1.1.1.1\ndns = 8.8.8.8|" \
  -e "s|^#tunnel-all-dns = true|tunnel-all-dns = true|" \
  -e "s|^#route = default|route = default|" \
  -e "/^route = 10.0.0.0\/8/d" -e "/^route = 172.16.0.0\/12/d" -e "/^route = 192.168.0.0\/16/d" \
  /etc/ocserv/ocserv.conf

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

diff /etc/ocserv/ocserv.conf.orig /etc/ocserv/ocserv.conf
sudo ocserv --test-config --config /etc/ocserv/ocserv.conf

Что означают параметры, которые мы поменяли и которые стоит знать:

ПараметрЗначениеЗачем
server-cert, server-keyпути к файлам Let’s Encryptбез них служба не запускается
ipv4-network10.10.10.0сеть, из которой клиенты получают адреса
dns1.1.1.1 и 8.8.8.8DNS-серверы для клиентов
tunnel-all-dnstrueвсе DNS-запросы идут через туннель
routedefaultвесь трафик клиента идёт через VPN
try-mtu-discoverytrueсервер сам подбирает размер пакета
authplain, файл /etc/ocserv/passwdвход по логину и паролю, стоит по умолчанию
max-clients16сколько клиентов одновременно, стоит по умолчанию
max-same-clients2сколько устройств на один логин, стоит по умолчанию
Таблица прокручивается вбок

В конфиге по умолчанию маршруты заданы только для частных сетей. Если оставить их как есть, через VPN пойдёт только трафик к адресам 10.x, 172.16.x и 192.168.x. Мы заменили их на route = default, чтобы через сервер шёл весь трафик.

Сравнение исходного и изменённого ocserv.conf: сертификат Let's Encrypt, сеть 10.10.10.0, DNS, tunnel-all-dns и route = default
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Шаг 5. Пользователи

Учётные записи хранятся в файле /etc/ocserv/passwd. Утилита ocpasswd создаст его сама и дважды спросит пароль.

sudo ocpasswd -c /etc/ocserv/passwd user1

Той же утилитой пользователя блокируют, возвращают и удаляют.

sudo ocpasswd -c /etc/ocserv/passwd -l user1   # заблокировать
sudo ocpasswd -c /etc/ocserv/passwd -u user1   # разблокировать
sudo ocpasswd -c /etc/ocserv/passwd -d user1   # удалить

Шаг 6. Пересылка пакетов, NAT и брандмауэр

Это шаг, которого чаще всего не хватает в инструкциях. Без него клиент подключится, но в интернет не выйдет. Сначала включите пересылку пакетов.

echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/60-ocserv.conf
sudo sysctl -p /etc/sysctl.d/60-ocserv.conf

Узнайте имя внешнего сетевого интерфейса. Оно стоит после слова dev: обычно это eth0 или ens3.

ip route | grep default

Теперь добавьте в правила UFW разрешение на пересылку для сети VPN и правило NAT. Если интерфейс называется не eth0, замените его в предпоследней строке.

sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.orig
sudo sed -i '/^# allow dhcp client to work/i # ocserv: пересылка для сети VPN\n-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT\n-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT\n' /etc/ufw/before.rules
sudo tee -a /etc/ufw/before.rules > /dev/null <<'EOF'

# ocserv: NAT для клиентов VPN
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT
EOF

Откройте порты и включите брандмауэр. Порт SSH открывайте первым, иначе потеряете доступ к серверу.

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
sudo ufw status verbose

В выводе должны быть открыты порты 22, 80 и 443, а входящие соединения по умолчанию должны быть запрещены.

Вывод ufw status verbose с открытыми портами 22, 80 и 443 и правило MASQUERADE для сети 10.10.10.0/24
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Шаг 7. Запуск и проверка сервера

Перезапустите службу и проверьте три вещи: статус, порты и сертификат.

sudo systemctl restart ocserv
systemctl status ocserv --no-pager
sudo ss -tulpn | grep ':443'
sudo occtl show status

В статусе должно быть active (running), а порт 443 должен слушаться и по TCP, и по UDP. В автозапуск служба уже добавлена пакетом, после перезагрузки сервера VPN поднимется сам.

systemctl status ocserv показывает active (running), порт 443 слушается по TCP и UDP, сертификат выдан Let's Encrypt
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Шаг 8. Подключение клиентов

На Linux установите клиент OpenConnect и подключитесь. Он спросит пароль пользователя из шага 5.

sudo apt install -y openconnect
sudo openconnect --user=user1 vpn.example.com

В выводе должны быть строки Established DTLS connection и Configured as 10.10.10.x. На остальных системах подойдут такие клиенты:

  • Windows и macOS: OpenConnect GUI или Cisco Secure Client.
  • Android и iOS: Cisco Secure Client из Google Play или App Store. Старого приложения OpenConnect в Google Play больше нет.

В любом клиенте укажите адрес сервера vpn.example.com, логин и пароль.

Вывод клиента openconnect: установлено соединение DTLS, выдан адрес 10.10.10.15, маршрут по умолчанию через tun0, пинг без потерь
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Дальше проверьте подключение с двух сторон. На сервере посмотрите список клиентов.

sudo occtl show users
sudo occtl show user user1

На устройстве клиента откройте наш чекер анонимности: он должен показать IP сервера, а не ваш домашний адрес.

Вывод occtl show users и occtl show user: клиент user1 подключён, шифры TLS и DTLS, маршрут по умолчанию
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Шаг 9. Автообновление сертификата

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

sudo tee /etc/letsencrypt/renewal-hooks/deploy/ocserv-reload.sh > /dev/null <<'EOF'
#!/bin/sh
systemctl reload ocserv
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/ocserv-reload.sh
sudo certbot renew --dry-run
systemctl list-timers certbot.timer --no-pager

Порт 80 должен оставаться открытым и свободным: через него Certbot продлевает сертификат.

После certbot renew служба ocserv перечитала сертификат командой reload, клиент остался подключён
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Если что-то не работает

Служба не запускается сразу после установки

В журнале будет строка the 'server-cert' and 'server-key' configuration options must be specified!. Это значит, что в конфиге не указан сертификат. Выполните шаги 3 и 4 и перезапустите службу. Журнал смотрите командой journalctl -u ocserv -n 30 --no-pager.

VPN подключается, но сайты не открываются

Самая частая проблема. Сервер показывает клиента в статусе connected, а пинг с клиента теряет 100% пакетов. Проверьте по порядку: sysctl net.ipv4.ip_forward должен вернуть 1, команда sudo iptables -t nat -S POSTROUTING должна показать правило MASQUERADE, а имя интерфейса в этом правиле должно совпадать с выводом ip route | grep default.

Без правила NAT клиент числится подключённым, но пинг теряет 100% пакетов, после возврата правила потерь нет
Вывод команд на тестовой Ubuntu 24.04.5, 30.09.2026.

Сайты открываются по IP, но не по имени

Клиенту не выдан DNS. Проверьте в конфиге строки dns и tunnel-all-dns = true, затем выполните sudo systemctl restart ocserv и переподключите клиента.

Порт 443 занят

Если на сервере уже работает nginx или Apache, в журнале появится bind() failed: Address already in use. При этом служба может числиться активной, но клиенты не подключатся. Проверьте, кто слушает порт: sudo ss -tlnp | grep ':443'. Освободите порт или перенесите ocserv на другой, изменив tcp-port и udp-port.

В списке клиентов стоит no-dtls

Закрыт UDP 443. Соединение работает через TCP, но медленнее на плохой связи. Откройте порт командой sudo ufw allow 443/udp и проверьте, что UDP не режет панель хостинга.

После нескольких неверных паролей клиента не пускает

Сервер начисляет очки за ошибки и временно блокирует адрес. Посмотреть очки можно командой sudo occtl show ip ban points. Блокировка снимается сама через 20 минут, это параметр ban-reset-time.

Шпаргалка по управлению

ЗадачаКоманда
Кто подключёнsudo occtl show users
Отключить клиентаsudo occtl disconnect user user1
Состояние сервераsudo occtl show status
Применить правки конфига без обрываsudo systemctl reload ocserv
Журнал в реальном времениjournalctl -u ocserv -f
Добавить пользователяsudo ocpasswd -c /etc/ocserv/passwd имя
Таблица прокручивается вбок

Что в итоге

У вас работает VPN-сервер OpenConnect на Ubuntu 24.04: с сертификатом Let’s Encrypt, автозапуском, NAT и обновлением сертификата без обрывов. Адрес сервера можно добавить в список разрешённых IP для админок и трекера, тогда вход в них будет открыт только через VPN. Если настраиваете трекер, посмотрите наше сравнение трекеров для арбитража. Вопросы задавайте в нашем Telegram-канале.

Частые вопросы

Нужно ли собирать ocserv из исходников?

Нет. В Ubuntu 24.04 ocserv версии 1.2.4 ставится из стандартного репозитория командой apt install ocserv. Собирать из исходников имеет смысл только ради самой новой версии.

Можно ли настроить ocserv без домена?

Сервер запустится и с самоподписанным сертификатом, но клиенты будут показывать предупреждение, а Cisco Secure Client по умолчанию не подключается к недоверенным серверам. Для сертификата Let’s Encrypt нужен домен с A-записью на IP сервера.

Какие клиенты подходят для ocserv?

OpenConnect на Linux, OpenConnect GUI на Windows и macOS, Cisco Secure Client на Windows, macOS, Android и iOS.

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

На сервере не включена пересылка пакетов или нет правила NAT. Проверьте, что net.ipv4.ip_forward равен 1 и что в таблице nat есть правило MASQUERADE для сети клиентов.

Сколько клиентов выдержит сервер?

Лимит задаёт параметр max-clients, по умолчанию 16 одновременных подключений и 2 устройства на один логин. Значения меняются в ocserv.conf.

Нужно ли перезапускать ocserv после обновления сертификата?

Нет, достаточно команды systemctl reload ocserv. Сервер перечитает сертификат, а подключённые клиенты останутся на связи.

Редакция BoostClicks

Материалы о настройке рекламы, трекинге и автоматизации: инструкции, примеры кода и расчёты с указанием условий проверки.