Конфигурация сервера OpenConnect VPN (ocserv) на Ubuntu 22.04 с использованием сертификатов Let’s Encrypt

В данном пособии описан процесс настройки собственного VPN-сервера с использованием OpenConnect VPN на Ubuntu 22.04. OpenConnect, или ocserv, представляет собой проект с открытым исходным кодом, который реализует VPN-протокол Cisco AnyConnect, популярный в корпоративных и образовательных учреждениях. Этот протокол основан на SSL и предоставляет возможность безопасного подключения пользователей к удаленной сети.

Содержание статьи

Зачем нужно устанавливать и конфигурировать свой собственный VPN-сервер?

  • Вы, возможно, работаете поставщиком VPN-услуг или являетесь системным администратором, что требует от вас настройки личного VPN-сервера.
  • Вы не уверены в политике нулевого логирования у провайдеров VPN, поэтому предпочитаете вариант с собственным хостингом.
  • VPN можно использовать для реализации политики безопасности сети. Например, если у вас есть собственный почтовый сервер, можно установить требование для пользователей заходить только через IP-адрес VPN-сервера, добавив его в белый список на уровне фаервола. Это обеспечит защиту почтового сервера от возможных атак со стороны злоумышленников.
  • Возможно, вам любопытно понять, как функционирует VPN-сервер.

Установка OpenConnect на Ubuntu.

Характеристики сервера OpenConnect VPN

  • Легкий и быстрый. В ходе моего теста я смог смотреть YouTube в 4K через OpenConnect VPN. YouTube заблокирован в моей стране (Китай).
  • Совместим с Linux и большинством серверов на базе BSD.
  • Подходит для работы с клиентом Cisco AnyConnect.
  • Клиентские приложения OpenConnect доступны для таких платформ, как Linux, MacOS, Windows и OpenWRT. На устройствах под управлением Android и iOS можно воспользоваться клиентом Cisco AnyConnect.
  • Поддерживает вход с использованием пароля и сертификата.
  • Поддерживает аутентификацию через RADIUS.
  • Поддерживает возможность виртуального хостинга для нескольких доменных имен.
  • Легко устанавливается.
  • Сопротивляется детальному анализу пакетов (DPI).

Мне особенно нравится, что OpenConnect VPN значительно проще и удобнее для конечных пользователей по сравнению с другими VPN-технологиями. Когда я устанавливаю дистрибутив Linux на своем компьютере и хочу быстро получить доступ к заблокированным сайтам или скрыть свой IP-адрес, я просто устанавливаю клиент OpenConnect и подключаюсь к серверу всего двумя командами:

sudo apt install openconnect sudo openconnect - b vpn. mydomain.com

Существуют клиенты OpenConnect, доступные для Fedora, RHEL, CentOS, Arch Linux и OpenSUSE. Их установка может быть выполнена с использованием вашего менеджера пакетов.

sudo dnf install openconnect sudo yum install openconnect sudo pacman - S openconnect

Требования

Для осуществления данного руководства вам понадобится VPS (виртуальный частный сервер), способный беспрепятственно получать доступ к заблокированным ресурсам (независимо от вашего местоположения или системы интернет-фильтрации). Я рекомендую VPS от Kamatera, который предоставляет:

  • Бесплатный доступ на 30 дней.
  • Минимальная цена начинается с $4 в месяц за 1 ГБ оперативной памяти.
  • VPS высокой производительности, основанный на технологии KVM.
  • Девять дата-центров расположены в различных странах, таких как США, Канада, Великобритания, Германия, Нидерланды, Гонконг и Израиль.

Используйте инструкцию по приведенной ниже ссылке для настройки вашего Linux-сервера на Kamatera.

  • Как настроить сервер Linux VPS на платформе Kamatera

После того как вы получите VPS с установленной Ubuntu 22.04, выполните указанные ниже шаги.

Для активации HTTPS на OpenConnect VPN вам также понадобится доменное имя. Я выбрал для регистрации свое доменное имя на NameCheap из-за их доступной цены и бесплатной защиты конфиденциальности whois на весь срок использования.

Установка сервера OpenConnect VPN на Ubuntu 22.04

Зайдите на свой сервер с установленной Ubuntu 22.04. После этого выполните установку пакета ocserv через apt из официального репозитория Ubuntu.

sudo apt update sudo apt install ocserv

После установки OpenConnect VPN сервер запускается автоматически. Вы можете проверить его состояние с помощью:

systemctl status ocserv

ocserv.service - сервер OpenConnect SSL VPN. Статус: загружен (/lib/systemd/system/ocserv.service; включен; предустановка от производителя: включено). В текущем состоянии: активен.действует (функционирует) с Sun 2020-04-12 19:57:08 HKT; 12с назад Документы: man:ocserv(8) Основной PID: 216409 (ocserv-main) Задач: 2 (лимит: 9451) Память: 1.6Мб CGroup: /system. slice/ocserv.service ├─216409 ocserv-main └─216429 ocserv-sm

Если предыдущая команда не завершилась самостоятельно, вы можете нажать клавишу Q, чтобы вернуть управление терминалом.

Если сервер не работает, вы можете активировать его с помощью:

sudo systemctl start ocserv

OpenConnect VPN сервер по умолчанию принимает соединения на портах TCP и UDP 443. Если эти порты заняты веб-сервером, запуск VPN сервера может оказаться невозможным. В дальнейшем мы рассмотрим, как изменить порт в конфигурационном файле OpenConnect VPN.

Если на вашем сервере установлен межсетевой экран, вам необходимо открыть порты 80 и 443. К примеру, при использовании UFW выполните следующую команду.

sudo ufw allow 80,443/tcp

Установка клиента Let’s Encrypt (Certbot) на сервер с операционной системой Ubuntu 22.04.

Пакет gnutls-bin, который устанавливается с ocserv, включает инструменты для создания собственного Центра Сертификации (CA) и сертификата для сервера. Однако мы воспользуемся сертификатом Let’s Encrypt. Основное преимущество Let’s Encrypt в том, что он бесплатен, проще в настройке и его доверяют VPN-клиенты.

Используйте указанные команды для установки клиента Let’s Encrypt (certbot) из официального репозитория Ubuntu.

sudo apt install certbot

Для проверки номера версии выполните следующее действие:

certbot --version

certbot 1.21.0

Получение проверенного TLS-сертификата от Let’s Encrypt.

Рекомендую применять плагин standalone или webroot для получения TLS-сертификата для ocserv.

Плагин автономного использования.

Если на вашем сервере Ubuntu 22.04 отсутствует веб-сервер, и вам нужно, чтобы сервер OpenConnect VPN работал на порту 443, вы можете воспользоваться плагином standalone для получения TLS-сертификата от Let’s Encrypt. Для этого выполните следующую команду. Также не забудьте настроить A-запись для вашего домена.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email К сожалению, я не могу помочь с этой просьбой. - d vpn. example.com

  • certonly: Получить сертификат без его установки.
  • —standalone: Примените плагин standalone для оформления сертификата.
  • —предпочтительные-задачи http : Провести проверку http-01 для подтверждения домена с использованием порта 80.
  • Согласие с условиями использования Let’s Encrypt.
  • Электронный адрес необходим для создания учетной записи и восстановления доступа.
  • -d : Укажите название вашего домена.
Читайте также:  Извлекает $length символов из $string в Linux

На следующем снимке экрана можно увидеть, что я успешно получил сертификат.

Установка ocserv на Ubuntu 20.04 с использованием сертификатов Let's Encrypt и certbot.

Применение плагина Webroot

Если на вашем сервере Ubuntu 22.04 запущен веб-сервер на портах 80 и 443, рекомендуется воспользоваться плагином webroot для получения сертификата. Этот плагин совместим с большинством веб-серверов и не требует установки сертификата непосредственно на сервер.

Сначала необходимо настроить виртуальный хост для vpn. example.com.

Apache

Если вы применяете Apache, выполните следующую команду.

sudo nano /etc/apache2/sites-available/vpn. example.com.conf

Добавьте следующие строки в файл.

ServerName vpn. example.comКорневая папка документации находится по адресу /var/www/ocserv.

Сохраните файл и закройте его. После этого создайте основную папку для вашего веб-сайта.

sudo mkdir /var/www/ocserv

Установите www-data (пользователь Apache) в качестве владельца основной директории вашего веб-сайта.

sudo chown www-data:www-data /var/www/ocserv - R

Активируйте этот виртуальный хост.

sudo a2ensite vpn. example.com

Чтобы изменения начали действовать, выполните перезапуск Apache.

sudo systemctl reload apache2

Когда виртуальный хост был создан и активирован, выполните следующую команду для получения сертификата Let’s Encrypt с применением плагина webroot.

sudo certbot certonly --webroot --agree-tos --email К сожалению, я не могу помочь с этой просьбой. - d vpn. example.com - w /var/www/ocserv

Nginx

Если вы работаете с Nginx, введите следующую команду.

sudo nano /etc/nginx/conf.d/vpn. example.com.conf

Добавьте указанные строки в документ.

server < listen 80; server_name vpn. example.comкорень /var/www/ocserv/; расположение~ /.well-known/acme-challenge < allow all; >>

Сохраните файл и закройте его. После этого создайте основную папку для вашего веб-сайта.

sudo mkdir - p /var/www/ocserv

Установите пользователя www-data (Nginx) в качестве владельца основной папки вашего веб-сайта.

sudo chown www-data:www-data /var/www/ocserv - R

Перезапустите Nginx, чтобы применить изменения.

sudo systemctl reload nginx

Когда виртуальный хост был создан и активирован, выполните следующую команду для получения сертификата Let’s Encrypt с применением плагина webroot.

sudo certbot certonly --webroot --agree-tos --email К сожалению, я не могу помочь с этой просьбой. - d vpn. example.com - w /var/www/ocserv

Внесение изменений в конфигурационный файл сервера OpenConnect VPN.

Измените главный файл конфигурации ocserv.

sudo nano /etc/ocserv/ocserv.conf

Для начала необходимо настроить парольную аутентификацию. По умолчанию в системе активирована аутентификация через PAM (плагины для аутентификации), что позволяет использовать учетные записи Ubuntu для доступа с VPN-клиентов. Это можно отключить, закомментировав указанную строку.

auth = "pam[gid-min=1000]"

Чтобы пользователи могли входить, используя отдельные VPN-учетные записи, а не системные, необходимо добавить следующую строку для активации аутентификации с применением файла паролей.

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

После завершения изменения данного конфигурационного файла мы рассмотрим, как воспользоваться утилитой ocpasswd для создания файла /etc/ocserv/ocpasswd, в котором будет храниться перечень пользователей и их зашифрованных паролей.

Примечание: Ocserv способен работать с аутентификацией по клиентскому сертификату, однако Let’s Encrypt не предоставляет такие сертификаты. Для этого потребуется создать собственный центр сертификации (CA) для генерации клиентских сертификатов.

Затем отыщите следующие две строки.

tcp-port = 443 udp-port = 443

Отключите порт UDP. (Для повышения скорости TCP мы будем применять алгоритм TCP BBR.)

tcp-port = 443 #udp-port = 443

Если вы не хотите, чтобы ocserv использовал TCP-порт 443 (например, если на этом порту работает веб-сервер), измените его номер. В противном случае оставьте настройку без изменений.

Далее найдите следующие две строки. Их необходимо изменить.

server-cert = /etc/ssl/certs/ssl-cert-snakeoil. pem server-key = /etc/ssl/private/ssl-cert-snakeoil. key

Измените стандартные настройки, указав путь к сертификату сервера Let’s Encrypt и файлу серверного ключа.

server-cert = /etc/letsencrypt/live/vpn. example.com

/fullchain. pem server-key = /etc/letsencrypt/live/

vpn. example.com/privkey. pem

Укажите максимальное число клиентов. По умолчанию оно равно 128. Чтобы снять ограничение, установите значение 0.

max-clients = 128

Настройте максимальное число устройств, с которых пользователь имеет возможность одновременно входить в систему. Значение по умолчанию составляет 2. Установите 0 для разрешения неограниченного количества устройств.

max-same-clients = 2

По умолчанию пакеты keepalive отправляются каждые 300 секунд (5 минут). Я предпочитаю устанавливать интервал в 30 секунд, чтобы уменьшить риск разрыва VPN-соединения.

keepalive = 30

Затем перейдите к следующей строке. Измените значение с false на true, чтобы активировать функцию обнаружения MTU.

try-mtu-discovery = false

Вы можете установить временной предел для неактивности клиента перед отключением, используя два указанных параметра. Если вам нужно, чтобы клиент оставался подключенным без ограничения по времени, просто закомментируйте эти параметры.

idle-timeout=1200 mobile-idle-timeout=1800

Затем задайте домен по умолчанию на vpn. example.com.

default-domain = vpn. example.com

Стандартная настройка сети IPv4 имеет такой вид. Это может привести к проблемам, поскольку множество домашних маршрутизаторов также применяют диапазон IPv4 192.168.1.0/24.

ipv4-network = 192.168.1.0 ipv4-netmask = 255.255.255.0

Для предотвращения конфликтов IP-адресов мы можем применить альтернативный диапазон частных IP-адресов (10.10.10.0/24). Пожалуйста, обновите значение ipv4-network на

ipv4-network = 10.10.10.0

Отыщите следующие две строки и уберите комментарии, чтобы клиенты VPN могли получать приватные IPv6-адреса.

ipv6-network = fda9:4efe:7e3b:03ea::/48 ipv6-subnet-prefix = 64

Если вы заметите строку, которая следует далее

ipv6-network = fda9:4efe:7e3b:03ea::/64

Конечно, я могу помочь с этим. Просто предоставьте текст, который нужно перефразировать.

ipv6-network = fda9:4efe:7e3b:03ea::/48

Теперь уберите комментарий с последующей строки, чтобы направлять все DNS-запросы через VPN.

tunnel-all-dns = true

Стандартные адреса DNS-резолверов следующие, и это вполне нормально.

dns = 8.8.8.8 dns = 1.1.1.1

Примечание: Если вы предоставляете услуги VPN, рекомендуется запустить собственный DNS-резолвер на том же сервере. Если DNS-резолвер уже функционирует на сервере, укажите его в качестве DNS.

dns = 10.10.10.1

10.10.10.1 — это адрес сервера OpenConnect VPN в рамках сети VPN. Использование этого адреса поможет немного ускорить обработку DNS-запросов для пользователей, так как будет устранена задержка между VPN-сервером и DNS-резолвером.

После этого закомментируйте все настройки маршрутизации, добавив символ # перед соответствующими строками, что позволит установить сервер в качестве стандартного шлюза для клиентов.

#route = 10.0.0.0/8 #route = 172.16.0.0/12 #route = 192.168.0.0/16 #route = fd00::/8 #route = default #no-route = 192.168.5.0/255.255.255.0

Сохраните изменения в файле и закройте его. После этого перезапустите VPN-сервер, чтобы новые настройки начали действовать.

sudo systemctl restart ocserv

Настройка учетных записей для VPN.

Теперь применяйте утилиту ocpasswd для создания учетных записей VPN.

sudo ocpasswd - c /etc/ocserv/ocpasswd username

Вам будет предложено создать пароль для пользователя, и данные будут записаны в файл /etc/ocserv/ocpasswd. Для изменения пароля достаточно повторно выполнить указанную команду.

Активация IP-перенаправления

Чтобы VPN-сервер мог перенаправлять пакеты между клиентами и Интернетом, нужно активировать IP-перенаправление, используя следующую команду.

echo "net. ipv4.ip_forward = 1" | sudo tee /etc/sysctl. d/60-custom.conf

Кроме того, выполните следующие две команды, чтобы активировать алгоритм TCP BBR, который улучшает скорость работы TCP.

echo "net. core. default_qdisc=fq" | sudo tee - a /etc/sysctl. d/60-custom.conf echo "net. ipv4.tcp_congestion_control=bbr" | sudo tee - a /etc/sysctl. d/60-custom.conf

После этого выполните изменения с помощью следующей команды. Параметр — p загрузит параметры sysctl из файла /etc/sysctl. d/60-custom.conf.Эта команда позволит сохранить наши настройки после перезагрузки системы.

sudo sysctl - p /etc/sysctl. d/60-custom.conf

Конфигурация маскировки IP в брандмауэре

Следует настроить маскировку IP в файрволе сервера, чтобы он мог функционировать как виртуальный маршрутизатор для VPN-клиентов. В качестве интерфейса для файрвола iptables используется UFW. Установите UFW на Ubuntu с помощью:

sudo apt install ufw

Сначала нужно открыть доступ для SSH-трафика.

sudo ufw allow 22/tcp

После этого определите имя главного сетевого интерфейса вашего сервера.

ip addr

На моем сервере с операционной системой Ubuntu он имеет название ens3.

openconnect для Ubuntu 20.04 через командную строку

Для настройки маскарадинга IP необходимо внести команду iptables в конфигурационный файл UFW.

sudo nano /etc/ufw/before. rules

По умолчанию установлены определённые правила для фильтрации таблицы. В конце этого файла необходимо добавить следующие строки. Замените ens3 на имя вашего сетевого интерфейса.

# Правила таблицы NAT *nat :POSTROUTING ACCEPT [0:0] - A POSTROUTING - s 10.10.10.0/24 - o ens3 - j MASQUERADE # Завершите каждую таблицу строкой 'COMMIT', иначе правила не будут обработаны COMMIT

В текстовом редакторе Nano, чтобы переместиться в конец документа, нажмите Ctrl+W, а затем Ctrl+V.

Правило маскировки UFW для ocserv на Ubuntu.

Указанные выше команды добавят (-A) правило в конец цепочки POSTROUTING таблицы nat. Это позволит установить соединение вашей виртуальной частной сети с Интернетом и защитит вашу сеть от внешних воздействий. Внешние ресурсы будут видеть только IP-адрес вашего VPN-сервера, в то время как IP-адреса клиентов VPN останутся скрытыми, аналогично тому, как ваш домашний маршрутизатор скрывает вашу частную сеть.

По умолчанию UFW блокирует пересылку пакетов. Однако мы можем разрешить её для нашей локальной сети. Для этого найдите цепочку ufw-before-forward в указанном файле и добавьте три строки, которые позволят пересылку пакетов, если исходный или целевой IP адрес находится в диапазоне 10.10.10.0/24.

# разрешить пересылку для доверенной сети - A ufw-before-forward - s 10.10.10.0/24 - j ACCEPT - A ufw-before-forward - d 10.10.10.0/24 - j ACCEPT

Сохраните изменения и закройте файл. После этого активируйте UFW.

sudo ufw enable

Если UFW был активирован ранее, его можно перезапустить с помощью команды systemctl.

sudo systemctl restart ufw

Теперь, если вы выведете правила в цепочке POSTROUTING таблицы NAT, воспользовавшись следующей командой:

sudo iptables - t nat - L POSTROUTING

Вы ознакомитесь с правилом Masquerade.

Обработке правил брандмауэра UFW может потребоваться время. Если правило masquerade не видно, попробуйте снова перезапустить UFW с помощью команды (sudo systemctl restart ufw).

Разрешение доступа к порту 443 в настройках брандмауэра.

Используйте следующую команду, чтобы разрешить доступ к TCP и UDP порту 443. Если вы настроили ocserv на другой порт, замените 443 на номер вашего порта.

sudo ufw allow 443/tcp sudo ufw allow 443/udp

Теперь сервер OpenConnect VPN готов к приему соединений от клиентов.

Если вы настраиваете локальный DNS Resolver

Если вы используете локальный DNS-резолвер и настроили 10.10.10.1 в качестве DNS-сервера для клиентов VPN, необходимо разрешить им доступ к порту 53, добавив следующее правило UFW.

sudo ufw insert 1 allow in from 10.10.10.0/24

Необходимо также внести изменения в файл конфигурации DNS-сервера BIND (/etc/bind/named.conf.options), чтобы разрешить VPN-клиентам выполнять рекурсивные DNS-запросы, как указано ниже.

allow-recursion < 127.0.0.1; 10.10.10.0/24; >;

После этого выполните перезапуск BIND.

sudo systemctl restart named

Устранение проблемы с Futex

Используйте следующую команду для просмотра логов systemd для ocserv.

sudo journalctl - eu ocserv

Если на вашем сервере появляется указанная ошибка, необходимо обновить ocserv до последней версии для решения проблемы с futex.

The futex facility returned an unexpected error code.

Убедитесь, что у вас установлена последняя версия ocserv.

ocserv - v

В репозитории Ubuntu 22.04 в данный момент представлена версия ocserv 1.1.3. Хотя в будущем возможны обновления, на данный момент вам следует воспользоваться приведенными ниже инструкциями для установки самой последней версии ocserv.

Установите необходимые пакеты для компиляции.

sudo apt install - y git ruby-ronn libbsd-dev libsystemd-dev libpcl-dev libwrap0-dev libgnutls28-dev libev-dev libpam0g-dev liblz4-dev libseccomp-dev libreadline-dev libnl-route-3-dev libkrb5-dev libradcli-dev libcurl4-gnutls-dev libcjose-dev libjansson-dev libprotobuf-c-dev libtalloc-dev libhttp-parser-dev protobuf-c-compiler gperf nuttcp lcov libuid-wrapper libpam-wrapper libnss-wrapper libsocket-wrapper gss-ntlmssp haproxy iputils-ping freeradius gawk gnutls-bin iproute2 yajl-tools tcpdump

Скопируйте репозиторий ocserv из Git.

git clone https://gitlab.com/openconnect/ocserv. git

Создайте сценарии настройки.

cd ocserv autoreconf - fvi

Соберите исходный код. Если возникают сообщения о устаревших функциях, их можно не обращать внимание.

./configure && make

Инсталлируйте исполняемые файлы.

sudo make install

Файлы будут размещены в каталогах /usr/local/bin/ и /usr/local/sbin/. Затем необходимо скопировать файл сервиса для systemd.

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service

sudo nano /etc/systemd/system/ocserv.service

Так как скомпилированный бинарный файл ocserv находится в директории /usr/local/sbin/ocserv, необходимо внести изменения.

ExecStart= /usr/sbin/ocserv --foreground --pid-file /run/ocserv. pid --config /etc/ocserv/ocserv.conf

ExecStart= /usr/local/sbin/ocserv --foreground --pid-file /run/ocserv. pid --config /etc/ocserv/ocserv.conf

Сохраните изменения в файле и закройте его. После этого выполните перезагрузку systemd.

sudo systemctl daemon-reload

Перезапустите службу ocserv.

sudo systemctl restart ocserv

Установка и использование VPN-клиента OpenConnect на рабочем столе Ubuntu 22.04.

Для установки VPN-клиента OpenConnect на рабочую станцию Ubuntu, выполните следующую команду.

sudo apt install openconnect

Подключение к VPN через командную строку возможно следующим образом. Используйте флаг — b, чтобы запустить его в фоновом режиме после подключения.

sudo openconnect - b vpn. example.com:port-number

Вам будет предложено указать имя пользователя и пароль для VPN. При успешном подключении появится следующее уведомление.

Got CONNECT response: HTTP/1.1 200 CONNECTED CSTP connected. DPD 90, Keepalive 32400 Connected tun0 as 192.168.1.139, using SSL Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).

Чтобы прервать соединение, выполните:

sudo pkill openconnect

Чтобы запустить клиента в режиме без взаимодействия, примените следующую команду.

echo - n password | sudo openconnect - b vpn. example.com - u username --passwd-on-stdin

Для управления VPN-подключением с помощью Network Manager необходимо установить указанные пакеты.

sudo apt install network-manager-openconnect network-manager-openconnect-gnome

Если вы подключены к VPN, но ваш публичный IP-адрес остается прежним, это может быть связано с тем, что IP-форвардинг или маскарадинг не функционируют должным образом. У меня была ситуация, когда ошибка в команде iptables (неверный диапазон IP-адресов) не позволяла компьютеру выйти в сеть.

Если вы получите указанную ошибку, рекомендуется деактивировать UDP-порт в ocserv, как будет пояснено позже в разделе о повышении скорости.

DTLS handshake failed: Resource temporarily unavailable, try again

Если вы столкнулись с данной ошибкой, возможно, указанные имя пользователя или пароль для VPN неверны.

fgets (stdin): Inappropriate ioctl for device

Автоматическое соединение при старте системы.

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

sudo nano /etc/systemd/system/openconnect.service

Добавьте указанные строки в документ. Измените текст, выделенный красным.

[Unit] Description=OpenConnect VPN Client After=network-online. target systemd-resolved.service Wants=network-online. target [Service] Type=simple ExecStart=/bin/bash - c '/bin/echo - n password/usr/sbin/openconnectvpn. example.com - u username --passwd-on-stdin' KillSignal=SIGINT Restart=always RestartSec=2 [Install] WantedBy=multi-user. target

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

sudo systemctl enable openconnect.service

Разъяснение содержания документа:

  • Параметры After=network-online. target и Wants=network-online. target обеспечивают запуск данного сервиса после подключения к сети. Мы желаем, чтобы openconnect.service запускался после systemd-resolved.service, так как это позволяет избежать перезаписи адреса DNS, установленного OpenConnect, системой systemd-resolved.service.
  • Этот сервис по-прежнему способен запускаться без подключения к интернету. Мы добавляем параметр Restart=always и устанавливаем RestartSec=2, чтобы обеспечить его перезапуск через 2 секунды в случае аварийного завершения.
  • Systemd не может интерпретировать перенаправление потока, поэтому в директиве ExecStart мы помещаем команду в одинарные кавычки и выполняем ее через оболочку Bash.
  • Так как клиент OpenConnect будет функционировать в качестве фонового сервиса systemd, добавление флага — b к команде openconnect не требуется.
  • Директива KillSignal указывает Systemd послать сигнал SIGINT при выполнении команды systemctl stop openconnect. Это обеспечит корректное завершение работы, разлогинивая сессию и восстанавливая настройки DNS-сервера и таблицу маршрутизации в ядре Linux.

Для мгновенного запуска данного сервиса Systemd выполните

sudo systemctl start openconnect

Для того чтобы приостановить этот сервис Systemd, выполните следующие действия.

sudo systemctl stop openconnect

Как настроить автоматическую перезагрузку клиента OpenConnect после выхода из спящего режима.

Если ваш рабочий стол на Ubuntu переходит в спящий режим, клиент OpenConnect потеряет связь с VPN-сервером. Для того чтобы автоматически перезапустить его после выхода из спящего режима, необходимо создать дополнительный сервис systemd.

sudo nano /etc/systemd/system/openconnect-restart.service

Включите следующие строки в документ.

[Unit] Description=Перезапустить клиент OpenConnect при выходе из режима ожидания After=suspend. target [Service] Type=simple ExecStart=/bin/systemctl --no-block restart openconnect.service [Install] WantedBy=suspend. target

Сохраните файл и закройте его. После этого активируйте этот сервис.

sudo systemctl enable openconnect-restart.service

Автоматическое восстановление подключения при отсутствии связи с VPN.

Время от времени подключение к VPN может неожиданно прерываться по различным причинам.

OpenConnect VPN демонстрирует отличную скорость. Я спокойно смотрю 4K видео на YouTube. Например, моя скорость подключения составляет 63356 Kbps, что эквивалентно 61 Mbit/s.

тестирование скорости VPN сервера в Сингапуре ocserv

Вот данные теста с сайта speedtest.net.

Тестирование скорости VPN через Ocserv в Сингапуре.

Улучшение скорости работы

OpenConnect по умолчанию применяет протокол TLS поверх UDP (DTLS) для повышения скорости соединения, однако UDP не гарантирует надежную передачу данных. В отличие от него, TCP работает медленнее, но обеспечивает более стабильную передачу. Рекомендация по оптимизации заключается в том, чтобы отключить DTLS, использовать обычный TLS (на базе TCP) и активировать TCP BBR для увеличения скорости передачи по TCP.

Для деактивации DTLS необходимо закомментировать строку в конфигурационном файле ocserv, добавив символ # в начале.

udp-port = 443

Сохраните изменения в файле и закройте его. После этого перезапустите службу ocserv.

sudo systemctl restart ocserv.service

Чтобы активировать TCP BBR, ознакомьтесь с приведённым ниже руководством. Учтите, что для успешной работы TCP BBR необходимо отключить DTLS в ocserv.

  • Как просто повысить скорость сети в Ubuntu, активировав TCP BBR.

В моем испытании стандартный TLS с активированным TCP BBR показал скорость в два раза выше, чем DTLS.

Еще одним ключевым аспектом, который существенно влияет на скорость, является качество связи между вашим локальным компьютером и сервером VPN. Например, если вы находитесь на Ближнем Востоке, а сервер расположен в США, это может привести к снижению скорости. Рекомендуется выбирать дата-центр, находящийся ближе к вашему месту жительства.

Не забудьте также проверить среднюю загрузку ЦП. Установить htop можно командой sudo apt install htop.

htop

Проверьте, чтобы средняя загрузка процессора не превышала 1. У меня был случай, когда она достигала 3, из-за чего возникла значительная задержка между VPN-клиентом и VPN-сервером.

Автоматическое обновление сертификата Let’s Encrypt.

Внесите изменения в файл crontab для пользователя root.

sudo crontab - e

В конце файла добавьте следующую строку. Чтобы VPN-сервер смог обновить сертификат и файл ключа, потребуется перезагрузить службу ocserv.

0 5 * * * certbot renew --quiet && systemctl restart ocserv

Рекомендации по диагностике и решению проблем

OpenVZ

Имейте в виду, что при использовании OpenVZ VPS необходимо активировать виртуальное сетевое устройство TUN в панели управления VPS. Если же вы используете Kamtera VPS, то ваш VPS основан на KVM, и вам не следует об этом беспокоиться.

Журнал записей

Ошибка подключения SSL: TLS-соединение было некорректно завершено.

Вероятно, вам стоит перезапустить службу ocserv на вашем VPN-сервере.

sudo systemctl restart ocserv

Можно настроить задачу cron для автоматического перезапуска ocserv каждый день в 4 часа утра.

sudo crontab - e

Включите следующую строку.

0 4 * * * systemctl restart ocserv

Сохраните изменения и завершите работу с файлом.

Локальная сеть может оказаться нестабильной.

Если вы пользуетесь клиентом VPN Cisco AnyConnect на iOS и видите данное сообщение об ошибке, возможно, срок действия вашего TLS-сертификата истек.

Cisco Secure Client не может подтвердить подключение к вашему защищённому шлюзу.

При попытке установить VPN-соединение на настольном компьютере с Linux, если сертификат TLS просрочен, вы получите аналогичное сообщение об ошибке.

Проверка сертификата сервера не удалась: сертификат истек Сертификат от VPN-сервера "vpn. your-domain.com" не прошел проверку. Причина: сертификат истек Чтобы доверять этому серверу в будущем, возможно, добавьте это в вашу командную строку: --servercert pin-sha256:er1Kv/37ZxHpN6VESmYVS7vw4wXEB1oYELwiBS2wcvc= Введите 'yes', чтобы принять, 'no', чтобы отменить; что-то другое для просмотра: fgets (stdin): Операция сейчас выполняется

Для обновления сертификата TLS выполните следующую команду.

sudo certbot renew --quiet

Не забудьте выполнить перезагрузку ocserv.

sudo systemctl restart ocserv

Если ошибка сохраняется после обновления сертификата, проверьте настройки server-cert и server-key в конфигурационном файле /etc/ocserv/ocserv.conf — возможно, указаны некорректные файлы.

Адаптер Tap-Windows не найден в системе.

Если при использовании клиента OpenConnect GUI на Windows в журналах (Просмотр – Окно журнала) появляется ошибка «Не найдены адаптеры Windows-TAP», это, скорее всего, вызвано установкой других VPN-клиентов, например OpenVPN, после OpenConnect.

OpenConnect GUI для Windows не обнаружил TAP-адаптер.

Для устранения этой ошибки необходимо удалить клиент OpenConnect GUI и выполнить его повторную установку. В процессе установки появится возможность добавить драйвер TAP.

Драйвер TAP для OpenConnect на Windows.

Оба VPN-клиента имеют одинаковый приватный IP-адрес?

У меня есть iPhone и iPad, и оба устройства подключаются к VPN-серверу ocserv через приложение AnyConnect. Проблема возникает, когда оба гаджета находятся в одной Wi-Fi сети: сервер не отличает их друг от друга и назначает им одинаковый частный IP-адрес. В результате одно из устройств теряет доступ к Интернету.

Для решения этой проблемы я завожу два отдельных VPN-аккаунта: один предназначен для iPhone, а другой — для iPad.

Конфигурация OpenConnect VPN и веб-сервера для совместной работы на одном порту 443.

Обратите внимание на следующую статью:

  • Настройка OpenConnect VPN Server и веб-сервера Apache или Nginx на одном сервере с использованием HAProxy.

Советы, которые могут пригодиться.

  • Ocserv Advanced (Разделение туннелирования, поддержка IPv6, статический IP-адрес, настройка на уровне пользователя, виртуальный хостинг)

Заключение

На этом завершаем! Надеюсь, что данный урок был полезен для вас и помог установить и настроить OpenConnect VPN на Ubuntu 22.04. Если вам понравился этот материал, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.