MAATRIX / Блог / OpenVPN на Ubuntu Desktop: клиент через NetworkManager

OpenVPN на Ubuntu Desktop: клиент через NetworkManager

MAATRIX

На Ubuntu Desktop OpenVPN-клиент почти никогда не запускают отдельным демоном из терминала — для этого есть встроенный аплет NetworkManager в правом верхнем углу. Импортировали .ovpn, ввели логин, кликнули по значку сети — и всё, туннель поднят, а после перезагрузки подключение восстанавливается само. Но у этого удобства есть цена: часть директив из конфига NetworkManager просто не понимает и молча их отбрасывает, а стандартный apt-пакет плагина местами отстаёт от актуальной ветки OpenVPN. Разберём установку, импорт готового профиля с сервера и грабли, которые всплывают именно в графическом клиенте, а не в консольном.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Установка плагина network-manager-openvpn

Сам NetworkManager в Ubuntu Desktop стоит из коробки, но поддержку протокола OpenVPN он получает только через отдельный плагин — без него в списке типов VPN-соединения OpenVPN просто не появится.

sudo apt update
sudo apt install network-manager-openvpn network-manager-openvpn-gnome

Второй пакет — это конкретно GUI-часть для GNOME (диалоги импорта, вкладки настроек в панели «Сеть»). Без него плагин формально работает, но настраивать соединение придётся через nmcli, а не через привычные окна. На чистом GNOME-окружении (стандартный рабочий стол Ubuntu Desktop с 22.04 и позже) ставьте оба пакета сразу.

После установки NetworkManager нужно перезапустить, иначе новый плагин не подхватится до следующей перезагрузки:

sudo systemctl restart NetworkManager

Проверить, что плагин установился и виден системе, можно так:

nmcli connection import --help 2>&1 | grep -i openvpn
dpkg -l | grep network-manager-openvpn

Отдельный нюанс версий: пакет из стандартных репозиториев Ubuntu обычно отстаёт от последнего релиза OpenVPN на несколько минорных версий. Для большинства серверных конфигов разницы не заметно, но если сервер требует новые шифры, стоит свериться с версией: openvpn --version и apt-cache policy network-manager-openvpn.

Импорт .ovpn через графический интерфейс

Есть два пути добавить профиль — через системные настройки или через сам файл в файловом менеджере. Оба ведут в один и тот же диалог.

Через «Параметры»:

  1. Откройте Параметры системыСеть.
  2. Рядом с разделом VPN нажмите + (добавить соединение).
  3. В списке типов выберите Импортировать из файла....
  4. Укажите путь к .ovpn-файлу от вашего сервера.

Через файловый менеджер (Nautilus): если оба пакета плагина установлены, двойной клик по .ovpn-файлу в Nautilus сам предложит открыть его как VPN-соединение — это быстрее, чем идти через меню настроек, особенно если файл только что скачан из личного кабинета.

После импорта откроется окно с параметрами соединения — не закрывайте его сразу «как есть», часть значений стоит проверить руками:

  • Шлюз (Gateway) — адрес или домен сервера, подставляется автоматически из директивы remote в файле.
  • Тип аутентификации — если конфиг требует сертификаты (ca, cert, key) без пароля, выберите Сертификаты (TLS). Если сервер настроен на логин/пароль поверх сертификата CA (директива auth-user-pass), нужен пункт `Пароль с сертификатом TLS».
  • Вкладка «Дополнительно» — здесь стоит заглянуть в блок TLS-аутентификации: если в .ovpn есть секция <tls-auth> или <tls-crypt>, NetworkManager обычно подтягивает её сам при импорте единого файла, но при импорте конфига с внешними файлами сертификатов путь нужно указать вручную.

Если конфиг собран «единым файлом» — сертификаты, ключ и tls-auth/tls-crypt вставлены прямо блоками <ca>...</ca>, <cert>...</cert>, <key>...</key> внутри самого .ovpn — импорт проходит без дополнительных действий практически всегда. Если же файл ссылается на сертификаты по относительным путям (ca ca.crt, cert client.crt), а сами файлы лежат отдельно — перед импортом либо соберите единый конфиг, либо держите все файлы в одной папке с .ovpn и импортируйте через терминал (см. ниже), где относительные пути резолвятся предсказуемее, чем в GUI-диалоге.

Арендуйте сервер под свои задачи!

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Настройка через nmcli как альтернатива GUI

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

nmcli connection import type openvpn file /home/user/client.ovpn

Команда создаёт соединение с именем, взятым из имени файла. Проверить, что оно появилось и с какими параметрами:

nmcli connection show
nmcli connection show "client" | grep vpn

Если нужно подставить логин и пароль без ручного ввода в GUI при каждом подключении (например, для машины, которая должна поднимать VPN ещё до входа пользователя в систему):

nmcli connection modify "client" vpn.user-name "ваш_логин"
nmcli connection modify "client" vpn.data "connection-type=password-tls,...,password-flags=0"

Пароль в открытом виде через nmcli modify лучше не хранить в истории shell — используйте nmcli connection edit "client" в интерактивном режиме, там пароль вводится отдельным запросом и не попадает в ~/.bash_history.

Подключение и отключение из терминала:

nmcli connection up "client"
nmcli connection down "client"

Статус и лог NetworkManager при подключении смотрите через journalctl — это единственное место, где реально видно, на каком этапе застрял туннель, потому что GUI-аплет обычно показывает только «Подключение...» или сухую ошибку без деталей:

journalctl -u NetworkManager -f

Автоподключение при старте и восстановление после разрыва

По умолчанию NetworkManager не поднимает VPN-соединение автоматически при загрузке системы — только вручную через переключатель в меню сети. Включить автоподключение можно двумя способами.

Через GUI: в окне редактирования соединения (ПараметрыСеть → шестерёнка рядом с VPN-профилем) включите тумблер Подключаться автоматически. Там же можно ограничить автоподключение конкретным Wi-Fi (например, поднимать VPN только вне доверенной домашней сети).

Через терминал — то же самое, но воспроизводимо скриптом:

nmcli connection modify "client" connection.autoconnect yes

Отдельная тонкость: автоподключение VPN-профиля привязано к сетевому событию (появилось активное соединение — поднимается VPN поверх него), а не к загрузке системы напрямую. На десктопе с проводным подключением, которое поднимается медленнее графической сессии, VPN иногда пытается стартовать раньше основной сети и падает с таймаутом при первой попытке. NetworkManager обычно ретраит подключение сам — если нет, включите connection.autoconnect-retries явно:

nmcli connection modify "client" connection.autoconnect-retries 3

Автоматическое переподключение при разрыве (сон/пробуждение ноутбука, смена сети) NetworkManager делает сам, пока включён autoconnect — заново вводить пароль не потребуется, если он сохранён в связке ключей GNOME (Keyring) при первом подключении.

Директивы .ovpn, которые NetworkManager не понимает

Это главная причина, по которой рабочий на консольном клиенте конфиг иногда не запускается или ведёт себя иначе через GUI. Плагин NetworkManager реализует не весь набор директив OpenVPN — он ориентирован на типовые клиентские сценарии, а не на полную гибкость конфига.

Директивы, которые часто вызывают проблемы при импорте:

  • script-security и любые up/down-скрипты — NetworkManager их игнорирует полностью, выполнение произвольных скриптов из импортированного файла не предусмотрено из соображений безопасности. Если логика VPN завязана на кастомные скрипты — GUI-клиент не подойдёт, нужен классический openvpn из терминала как systemd-сервис.
  • Нестандартные / устаревшие директивы шифрования (cipher со значениями вне современного списка, ncp-disable в старых конфигах) — плагин может тихо подставить свою логику согласования шифра вместо буквального следования файлу.
  • Сложные маршруты через route с нестандартными метриками или несколькими route-up — базовые директивы импортируются нормально, специфичное лучше проверить во вкладке IPv4Маршруты вручную.
  • redirect-gateway с нетиповыми флагами — базовый redirect-gateway def1 работает как ожидается, но проверьте галочку Использовать это соединение только для ресурсов в его сети во вкладке IPv4 — если она случайно отмечена, весь остальной трафик пойдёт мимо VPN.

Практический вывод: для конфига без экзотики (сертификаты, обычный redirect-gateway, стандартные route) GUI-импорт — самый быстрый и надёжный путь. Для нестандартных сценариев со скриптами up/down разумнее сразу ставить консольный OpenVPN как сервис — так и заводится сервер на Ubuntu 24.04, тот же принцип годится для десктопа, если GUI-клиент не тянет.

Типичные ошибки GUI-клиента и их причины

Значок VPN в трее крутится, но соединение не устанавливается. Чаще всего — неверно определённый тип аутентификации при импорте: GUI выбрал «Сертификаты (TLS)», а сервер требует ещё и логин/пароль поверх сертификата (или наоборот). Откройте настройки соединения и проверьте вкладку Аутентификация — тип должен совпадать с тем, что реально настроено на сервере. Общая логика диагностики TLS-проблем разобрана в статье про TLS handshake failed в OpenVPN — она написана для консольного клиента, но причины совпадают, только смотреть лог нужно через journalctl -u NetworkManager, а не напрямую вывод openvpn.

Соединение зелёное («подключено»), но интернет не открывается. Обычно redirect-gateway не применился как ожидалось — либо из-за галочки «только для ресурсов в его сети» во вкладке IPv4, либо из-за конфликта с уже активным маршрутом по умолчанию (второй VPN, Docker-сеть с похожей подсетью). Проверьте таблицу маршрутов после подключения:

ip route show

Если строки 0.0.0.0/0 через VPN-интерфейс нет — редирект не сработал, дело в настройках IPv4 профиля. Подробный разбор причин и команд диагностики — в статье OpenVPN подключается, но нет сети.

Пароль не сохраняется между сессиями. GNOME Keyring должен быть разблокирован (обычно совпадает с паролем входа в систему), иначе NetworkManager каждый раз просит пароль заново, даже если галочка «Запомнить пароль» стояла при вводе. Если система настроена на автовход без пароля, Keyring может вообще не разблокироваться автоматически — тогда сохранённый пароль VPN недоступен до ручного ввода пароля Keyring один раз за сессию.

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

Ошибка аутентификации при заведомо верном логине. Иногда виновата не связка логин/пароль, а устаревший кэш сертификата после повторного импорта файла с тем же именем — NetworkManager не всегда полностью перезаписывает старые данные. Удалите профиль полностью (nmcli connection delete "client") и импортируйте заново. Более широкий разбор причин — в статье про ошибку аутентификации в OpenVPN.

Арендуйте сервер под свои задачи!

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

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

Нужен ли отдельный пакет openvpn, если стоит network-manager-openvpn?

Да, плагин — это обвязка, сам протокол реализует пакет openvpn, apt обычно подтягивает его как зависимость автоматически, но если импорт не удаётся — проверьте dpkg -l | grep '^ii.*openvpn' явно.

Можно ли держать несколько VPN-профилей одновременно в NetworkManager?

Добавить — можно сколько угодно, но активным одновременно имеет смысл держать только один: два поднятых VPN-туннеля начинают спорить за таблицу маршрутизации и DNS, поведение непредсказуемо.

Работает ли split-tunneling через NetworkManager GUI?

Да, во вкладке IPv4Маршруты можно добавить конкретные подсети вместо redirect-gateway, либо снять флажок «Использовать это соединение только для ресурсов в его сети» для обратной логики.

Почему в списке типов VPN нет пункта OpenVPN вообще?

Значит, network-manager-openvpn-gnome не установлен или NetworkManager не был перезапущен после установки — оба шага обязательны, одной установки пакета недостаточно.

Как проверить, что DNS реально уходит через туннель, а не мимо?

GUI-клиент это не показывает — нужна отдельная проверка, описанная в статье про DNS leak и его закрытие.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →