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

Обновлено 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. Установка ocserv и Certbot
- Шаг 3. Сертификат Let’s Encrypt
- Шаг 4. Настройка ocserv
- Шаг 5. Пользователи
- Шаг 6. Пересылка пакетов, NAT и брандмауэр
- Шаг 7. Запуск и проверка сервера
- Шаг 8. Подключение клиентов
- Шаг 9. Автообновление сертификата
- Если что-то не работает
- Служба не запускается сразу после установки
- VPN подключается, но сайты не открываются
- Сайты открываются по IP, но не по имени
- Порт 443 занят
- В списке клиентов стоит no-dtls
- После нескольких неверных паролей клиента не пускает
- Шпаргалка по управлению
- Что в итоге
- Частые вопросы
- Нужно ли собирать ocserv из исходников?
- Можно ли настроить ocserv без домена?
- Какие клиенты подходят для ocserv?
- Почему VPN подключается, но интернета нет?
- Сколько клиентов выдержит сервер?
- Нужно ли перезапускать ocserv после обновления сертификата?
Что изменилось по сравнению со старой версией
- ocserv больше не нужно собирать из исходников: в Ubuntu 24.04 он ставится готовым пакетом версии 1.2.4.
- Добавлены пересылка пакетов и NAT. Без них клиент подключается, но сайты не открываются.
- Сертификат обновляется без обрыва соединений, сервер не перезапускается каждую ночь.
- Появились проверка результата и разбор типовых ошибок с настоящими сообщениями из журнала.
Как это работает
Клиент поднимает шифрованный туннель до сервера по TCP 443 и, если получится, второй канал DTLS по UDP 443: он быстрее на нестабильной связи. Сервер выдаёт клиенту адрес из своей сети, принимает его трафик и выпускает наружу от своего имени. Для этого на сервере должны быть включены пересылка пакетов и NAT.

Что понадобится
- Сервер с 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.

Шаг 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-network | 10.10.10.0 | сеть, из которой клиенты получают адреса |
dns | 1.1.1.1 и 8.8.8.8 | DNS-серверы для клиентов |
tunnel-all-dns | true | все DNS-запросы идут через туннель |
route | default | весь трафик клиента идёт через VPN |
try-mtu-discovery | true | сервер сам подбирает размер пакета |
auth | plain, файл /etc/ocserv/passwd | вход по логину и паролю, стоит по умолчанию |
max-clients | 16 | сколько клиентов одновременно, стоит по умолчанию |
max-same-clients | 2 | сколько устройств на один логин, стоит по умолчанию |
В конфиге по умолчанию маршруты заданы только для частных сетей. Если оставить их как есть, через VPN пойдёт только трафик к адресам 10.x, 172.16.x и 192.168.x. Мы заменили их на route = default, чтобы через сервер шёл весь трафик.

Шаг 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, а входящие соединения по умолчанию должны быть запрещены.

Шаг 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 поднимется сам.

Шаг 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, логин и пароль.

Дальше проверьте подключение с двух сторон. На сервере посмотрите список клиентов.
sudo occtl show users
sudo occtl show user user1На устройстве клиента откройте наш чекер анонимности: он должен показать IP сервера, а не ваш домашний адрес.

Шаг 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 продлевает сертификат.

Если что-то не работает
Служба не запускается сразу после установки
В журнале будет строка 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.

Сайты открываются по 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. Сервер перечитает сертификат, а подключённые клиенты останутся на связи.



