В данном руководстве описывается процесс создания собственного VPN-сервера с помощью установки OpenConnect VPN на Ubuntu 20.04. OpenConnect VPN, или ocserv, представляет собой открытое решение для реализации протокола Cisco AnyConnect, который часто применяется в корпоративной и университетской среде. Протокол AnyConnect основан на SSL и предоставляет пользователям возможность подключаться к удалённым сетям.
Обратите внимание: данное руководство также применимо к версиям Ubuntu 20.10 и 21.04.
Содержание статьи
- 1 Почему стоит создать свой собственный VPN-сервер?
- 2 Характеристики сервера OpenConnect VPN
- 3 Требования
- 4 Установка сервера OpenConnect VPN на Ubuntu 20.04
- 5 Установка клиента Let’s Encrypt (Certbot) на сервере с Ubuntu 20.04
- 6 Получение надежного TLS-сертификата от Let’s Encrypt.
- 7 Корректировка конфигурационного файла для сервера OpenConnect VPN
- 8 Регистрация учетных записей для VPN
- 9 Активизация маршрутизации по IP
- 10 Конфигурация маскировки IP-адресов в брандмауэре
- 11 Разрешить доступ к порту 443 в настройках брандмауэра.
- 12 Инструкция по установке и использованию клиента OpenConnect VPN на настольной версии Ubuntu 20.04.
- 13 Автоматическое подключение при запуске операционной системы.
- 14 Как настроить автоматический перезапуск клиента OpenConnect после выхода из режима сна.
- 15 Автоматический запуск при разрыве VPN-соединения.
- 16 Клиент OpenConnect с графическим интерфейсом для Windows и macOS.
- 17 Скорость
- 18 Ускорение производительности
- 19 Автоматическое обновление сертификата Let’s Encrypt.
- 20 Рекомендации по диагностике и исправлению проблем.
- 21 Установка самой свежей версии ocserv.
- 22 Конфигурация OpenConnect VPN-сервера и веб-сервера для совместного использования порта 443.
- 23 Практические рекомендации
- 24 Заключение
Почему стоит создать свой собственный VPN-сервер?
- Возможно, вы предоставляете услуги VPN или являетесь системным администратором, что требует от вас настройки собственного VPN-сервера.
- Вы сомневаетесь в надежности политики отсутствия логирования у провайдеров VPN, поэтому решаете самостоятельно организовать хостинг.
- Для обеспечения сетевой безопасности можно применять VPN. К примеру, если у вас есть собственный почтовый сервер, вы можете установить требование для пользователей входить только с IP-адреса VPN-сервера, добавив его в белый список IP-адресов вашего брандмауэра. Это поможет защитить почтовый сервер от попыток взлома.
- Возможно, вам любопытно разобраться в принципах работы VPN-сервера.

Характеристики сервера 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
Для Fedora, RHEL, CentOS, Arch Linux и OpenSUSE доступен клиент OpenConnect VPN. Его установка не вызовет трудностей и возможна через ваш менеджер пакетов.
sudo dnf install openconnect sudo yum install openconnect sudo pacman - S openconnect
Требования
Для выполнения этого руководства вам потребуется VPS (Виртуальный Приватный Сервер), способный без ограничений получать доступ к заблокированным ресурсам (независимо от вашей страны или системы интернет-фильтрации). Я советую рассмотреть VPS от Kamatera, который предлагает:
- Бесплатный пробный период на протяжении 30 дней.
- Стоимость начинается от 4 долларов в месяц за 1 ГБ оперативной памяти.
- Качественный VPS на платформе KVM с высокой производительностью.
- Девять центров обработки данных расположены по всему миру, включая США, Канаду, Великобританию, Германию, Нидерланды, Гонконг и Израиль.
Перейдите по приведенной ниже ссылке, чтобы развернуть свой сервер Linux VPS на платформе Kamatera.
- Создание VPS-сервера на платформе Kamatera с использованием Linux.
После того как вы получите VPS с Ubuntu 20.04, выполните следующие шаги.
Также необходимо зарегистрировать доменное имя для активации HTTPS для OpenConnect VPN. Я выбрал NameCheap для регистрации своего домена из-за низкой стоимости, а также из-за того, что они предлагают бесплатную защиту конфиденциальности whois на протяжении всей жизни.
Установка сервера OpenConnect VPN на Ubuntu 20.04
Залогиньтесь на свой сервер с Ubuntu 20.04. После этого примените apt для установки пакета ocserv из основного репозитория Ubuntu.
sudo apt update sudo apt install ocserv
После установки сервер OpenConnect VPN начнет работать автоматически. Вы можете проверить его статус с помощью:
systemctl status ocserv
●ocserv.service - Сервер OpenConnect SSL VPN Успешно загружен: активен (/lib/systemd/system/ocserv.service; включен; предустановлено производителем: активно) Статус:действует (функционирует) с Вс 2020-04-12 19:57:08 HKT; 12 секунд назад Документы: man:ocserv(8) Основной PID: 216409 (ocserv-main) Задачи: 2 (лимит: 9451) Память: 1.6M 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 20.04
Пакет gnutls-bin, который устанавливается вместе с ocserv, включает в себя инструменты для создания собственного центра сертификации и серверного сертификата, однако мы будем получать и устанавливать сертификат от Let’s Encrypt. Основное преимущество использования Let’s Encrypt заключается в том, что он бесплатен, легче в настройке и признается клиентским VPN-программным обеспечением.
Для установки клиента Let’s Encrypt (certbot) из стандартного репозитория Ubuntu выполните следующие команды.
sudo apt install certbot
Для проверки версии выполните
certbot --version
certbot 0.40.0
Получение надежного TLS-сертификата от Let’s Encrypt.
Рекомендую применять плагины standalone или webroot для получения TLS-сертификата для ocserv.
Плагин в отдельном режиме.
Если на вашем сервере с Ubuntu 20.04 не установлен веб-сервер и вы хотите, чтобы OpenConnect использовал порт 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.
- Адрес электронной почты служит для создания аккаунта и восстановления доступа к нему.
- Укажите название вашего домена.
На следующем скриншоте можно увидеть, что я получил сертификат.

Применение плагина Webroot.
Если на вашем сервере Ubuntu 20.04 развернут веб-сервер, который работает на портах 80 и 443, то целесообразно воспользоваться плагином webroot для получения сертификата. Этот плагин совместим практически с любым веб-сервером и не требует его настройки для установки сертификата.
Сначала необходимо настроить виртуальный хост для vpn. example.com.
Apache
Если вы применяете Apache, то
sudo nano /etc/apache2/sites-available/vpn. example.com.conf
Добавьте указанные строки в файл.
Сохраните файл и закройте его. После этого создайте корневую папку для веб-сайта.
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
Для начала необходимо настроить аутентификацию с использованием пароля. По умолчанию в системе Ubuntu включена аутентификация через PAM (Pluggable Authentication Modules), что дает возможность использовать системные учетные записи для входа через 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 BBR для повышения скорости TCP.)
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 серверный ключ = /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, что может улучшить производительность VPN.
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-адресов (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 является IP-адресом сервера 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-сервер смог перенаправлять пакеты между 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-клиентов. В этом процессе я воспользуюсь UFW, который служит интерфейсом для iptables. Чтобы установить UFW на Ubuntu, используйте следующую команду:
sudo apt install ufw
Сначала следует открыть доступ для SSH-трафика.
sudo ufw allow 22/tcp
Затем определите название главного сетевого интерфейса вашего сервера.
ip addr
На моем сервере Ubuntu он обозначен как ens3.

Для настройки маскировки 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.

Указанные строки добавят правило (-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 с помощью команды (sudo systemctl restart ufw).
Разрешить доступ к порту 443 в настройках брандмауэра.
Введите следующую команду, чтобы активировать TCP и UDP порт 443. Если для ocserv был установлен другой порт, замените 443 на ваш выбранный порт.
sudo ufw allow 443/tcp sudo ufw allow 443/udp
Сервер OpenConnect VPN теперь готов к принятию подключений от клиентов.
Если вы применяете локальный DNS-резолвер
Если вы применяете локальный DNS-резолвер и установили 10.10.10.1 в качестве DNS-сервера для клиентов VPN, вам нужно разрешить клиентам 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
Инструкция по установке и использованию клиента OpenConnect VPN на настольной версии Ubuntu 20.04.
Чтобы установить клиент OpenConnect VPN на рабочем столе Ubuntu, выполните следующую команду.
sudo apt install openconnect
Подключение к VPN через командную строку возможно, как указано ниже. Использование флага — b позволит запустить его в фоновом режиме после того, как соединение будет установлено.
sudo openconnect - b vpn. example.com:port-number
Вам потребуется ввести логин и пароль для доступа к VPN. Если подключение пройдет успешно, на экране появится соответствующее уведомление.
Получен ответ CONNECT: HTTP/1.1 200 CONNECTED CSTP connected. DPD 90, Keepalive 32400 Подключен tun0 как 192.168.1.139, используя SSL Установлено DTLS-соединение (используя 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-переадресацией или маскарадной 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
Разъяснение содержания документа:
- После того как service systemd-resolved.service и Wants=network-online. target обеспечивают запуск этой службы, когда сеть становится доступной, необходимо, чтобы openconnect.service запускался после systemd-resolved.service. Это необходимо для того, чтобы адрес DNS, установленный OpenConnect, не был перезаписан service systemd-resolved.service.
- Эта служба может продолжать запускаться даже при отсутствии доступа к сети. Мы устанавливаем параметры Restart=always и RestartSec=2, чтобы обеспечить автоматический перезапуск службы через 2 секунды в случае её аварийного завершения.
- Systemd не поддерживает перенаправление каналов, поэтому в директиве ExecStart мы заключаем команду в одинарные кавычки и выполняем её через оболочку Bash.
- Поскольку клиент OpenConnect VPN функционирует в качестве службы systemd и работает в фоновом режиме, добавление флага — b к команде openconnect не требуется.
- Директива KillSignal instructs 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 может разрываться по различным причинам. Попробуйте выполнить следующую команду, чтобы выяснить, способен ли VPN-клиент отправить пинг на частный IP-адрес VPN-сервера (10.10.10.1). Если пинг не прошел, команда справа выполнится для перезапуска VPN-клиента. Оператор || в Bash выполняет команду справа только в том случае, если команда слева завершилась ошибкой.
ping - c9 10.10.10.1 || systemctl restart openconnect
Команда ping будет запущена 9 раз, что займет 9 секунд. Вы можете воспользоваться бесконечным циклом в оболочке Bash для непрерывного выполнения этой команды. Чтобы прервать её, нажмите Ctrl+C.
for ((; ; )) do (ping - c9 10.10.10.1 || systemctl restart openconnect) done
Теперь мы способны разработать сервис systemd для данной задачи.
sudo nano /etc/systemd/system/openconnect-check.service
Включите указанные строки в данный файл. Мы устанавливаем, что этот сервис должен стартовать после openconnect.service.
[Unit] Description=OpenConnect VPN Connectivity Checker After=openconnect.service [Service] Type=simple ExecStart=/bin/bash - c 'for ((; ; )) do (ping - c9 10.10.10.1 || systemctl restart openconnect) done' [Install] WantedBy=multi-user. target
Сохраните файл и закройте его. После этого запустите данный сервис.
sudo systemctl start openconnect-check
Активируйте автозапуск при старте системы.
sudo systemctl enable openconnect-check
После активации данного сервиса команда пинга будет работать непрерывно. В случае разрыва соединения с VPN сервис openconnect.service будет автоматически перезапущен.
Клиент OpenConnect с графическим интерфейсом для Windows и macOS.
Скорость
OpenConnect VPN отличается высокой скоростью. Я без проблем смотрю 4K видео на YouTube. Моя скорость подключения составляет 63356 Кбит/с, что эквивалентно 61 Мбит/с.

Вот итоги теста на speedtest.net.

Ускорение производительности
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, пожалуйста, следуйте данному руководству. Учтите, что необходимо отключить DTLS в ocserv, иначе TCP BBR не сможет функционировать.
- Как просто увеличить производительность сети в Ubuntu, активировав TCP BBR.
В моем испытании обычный TLS с активированным TCP BBR показал скорость в два раза выше по сравнению с DTLS.
Качество соединения между вашим локальным устройством и VPN-сервером — ещё один ключевой аспект, который влияет на скорость. Например, если вы находитесь на Ближнем Востоке, а сервер расположен в США, это может существенно снизить скорость. Рекомендуется выбирать дата-центр, расположенный ближе к вашему региону.
Проверьте, пожалуйста, среднюю загрузку центрального процессора. Для установки htop используйте команду sudo apt install htop.
htop
Проверьте, чтобы средняя загрузка ЦП не превышала единицы. Однажды у меня была средняя нагрузка 3, что привело к значительной задержке между VPN-клиентом и сервером.
Автоматическое обновление сертификата Let’s Encrypt.
Измените файл crontab для пользователя root.
sudo crontab - e
Вставьте указанную строку в конец документа. Для того чтобы сервер VPN начал распознавать новый сертификат и файл ключа, требуется перезапустить службу ocserv.
@daily certbot renew --quiet && systemctl reload ocserv
Рекомендации по диагностике и исправлению проблем.
OpenVZ
Учтите, что при использовании VPS на платформе OpenVZ необходимо активировать виртуальное сетевое устройство TUN в панели управления. (Если вы пользуетесь Kamtera VPS, ваша виртуальная машина работает на KVM, поэтому беспокоиться не о чем.)
Запись в журнале
Если у вас появились какие-либо трудности, обратитесь к журналу сервера OpenConnect VPN.
sudo journalctl - eu ocserv.service
Я заметил, что при смене порта 443 на другой, мощный файрвол Китая блокирует данное VPN-соединение.
Режим тестирования
Если ocserv выдает сообщение о невозможности загрузить файл /etc/ocserv/ocserv.conf, вам следует остановить ocserv.
sudo systemctl stop ocserv
После этого запустите его в фоновом режиме, активировав режим отладки.
sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv. pid --config /etc/ocserv/ocserv.conf --debug=10
Вывод может предложить вам некоторые идеи о том, почему ocserv не функционирует.
Не получается получить доступ к Интернету.
Если вы подключены к серверу VPN, но не можете получить доступ к Интернету, причина может заключаться в том, что переадресация IP или маскировка IP не функционируют должным образом. Я вспоминаю, как мой провайдер VPS в свое время обновил платформу, и в результате название основного сетевого интерфейса изменилось с ens3 на enp3s0. Это заставило меня обновить имя в конфигурационном файле UFW (/etc/ufw/before. rules).
Ошибка в синтаксисе.
При возникновении следующей ошибки при попытке установить VPN-соединение, это, скорее всего, связано с синтаксической ошибкой в конфигурационном файле ocserv. Рекомендуется проверить журнал (sudo journalctl — eu ocserv) для получения дополнительной информации.
Got inappropriate HTTP CONNECT response: HTTP/1.1 401 Cookie is not acceptable
Перезапустите ваш компьютер.
При возникновении следующей ошибки при попытке установить VPN-соединение, скорее всего, дело в вашем локальном компьютере. Попробуйте перезагрузить устройство.
Server 'vpn. your-domain.com' requested Basic authentication which is disabled by default
Соединение TLS было завершено неправильно.
Если на клиенте возникает следующая ошибка во время попытки установить VPN-соединение,
Ошибка соединения SSL: соединение TLS было некорректно завершено.
Вероятно, вам стоит перезапустить службу ocserv на вашем VPN-сервере.
sudo systemctl restart ocserv
Можно настроить задачу cron для автоматического перезапуска ocserv каждый день в 4 часа утра.
sudo crontab - e
Включите эту строку.
0 4 * * * systemctl restart ocserv
Закройте файл и сохраните изменения.
Локальная сеть может оказаться ненадежной.
При использовании клиента Cisco AnyConnect VPN на iOS вы можете столкнуться с ошибкой, что может указывать на то, что ваш TLS сертификат больше не действителен.
Если срок действия TLS-сертификата истек, вы получите соответствующую ошибку при попытке установить VPN-соединение на настольном компьютере с Linux.
Проверка сертификата сервера не удалась: сертификат истек. Сертификат от 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 для Windows, если в журналах (Просмотр – Окно журнала) появилась ошибка «Нет адаптера Tap-Windows, установленного на этой системе», это может быть связано с тем, что вы установили другие VPN-клиенты, например OpenVPN, после установки OpenConnect.
Для устранения данной проблемы необходимо удалить графический клиент OpenConnect и выполнить его повторную установку. В процессе установки у вас появится возможность установить драйвер TAP.

Установка самой свежей версии ocserv.
Убедитесь, что у вас установлена актуальная версия ocserv.
ocserv - v
Иногда обновление до последней версии ocserv может устранить возникшие проблемы. Кроме того, возможно, вам будет интересно воспользоваться новыми возможностями, которые доступны только в свежем релизе. Ознакомьтесь с приведенными ниже рекомендациями для установки актуальной версии 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
Конфигурация OpenConnect VPN-сервера и веб-сервера для совместного использования порта 443.
Пожалуйста, ознакомьтесь со следующим материалом:
- Развертывание OpenConnect VPN и веб-серверов Apache/Nginx на едином сервере с использованием HAProxy.
Практические рекомендации
- Ocserv Pro (Смешанный туннелирование, поддержка IPv6, фиксированный IP, индивидуальные настройки для каждого пользователя, виртуальный хостинг).
Заключение
На этом все! Надеюсь, данный гид оказался полезным для вас в процессе установки и настройки OpenConnect VPN на Ubuntu 20.04. Как обычно, если вы нашли эту статью ценной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше полезных советов и рекомендаций.

