OpenVPN: ошибка аутентификации — решение
Вы пытаетесь подключиться к OpenVPN, а вместо «Connected» видите в клиенте AUTH_FAILED — и соединение тут же обрывается. Клиент почти ничего не объясняет, а сервер, к которому у вас, возможно, есть только SSH-доступ, кажется чёрным ящиком. Разберём по шагам, где искать настоящую причину и как её устранить — без предположения, что вы уже когда-то копались в логах сервера.
Содержание
- Почему клиент молчит, а сервер — говорит
- Как посмотреть точную причину в логе сервера
- Причина: неверный логин или пароль (auth-user-pass)
- Причина: сертификат клиента просрочен или отозван
- Причина: несовпадение Common Name сертификата
- Причина: рассинхронизация ta.key между клиентом и сервером
- Причина: разное время на клиенте и сервере
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему клиент молчит, а сервер — говорит
AUTH_FAILED — универсальная фраза OpenVPN, означающая буквально «сервер отказал в доступе». Причин отказа минимум пять, и приложение на вашем телефоне или ноутбуке не может знать точную — сервер ей просто не сообщает подробностей. Это сделано намеренно: если бы сервер отвечал «неверный пароль» или «сертификат просрочен» прямо любому, кто стучится в дверь, злоумышленнику было бы проще перебирать варианты.
Зато сервер честно пишет причину в свой лог-файл — тот, что виден только тому, у кого есть доступ к самой машине. С него и начнём. Если сервер настраивался «с нуля» по инструкции, для общего контекста пригодится статья про установку OpenVPN на VPS — там описана структура файлов, на которую мы будем ссылаться ниже.
Как посмотреть точную причину в логе сервера
Подключитесь к серверу по SSH: откройте терминал на своём компьютере и наберите ssh root@ваш_ip_адрес, введите пароль или используйте ключ — так же, как подключались раньше.
Если OpenVPN запущен через systemd (стандартный способ управления сервисами в Ubuntu/Debian), логи читаются через journalctl:
journalctl -u openvpn-server@server -n 100 --no-pager
journalctl — программа для чтения системного журнала. -u openvpn-server@server — показать записи только этого сервиса (имя иногда другое, openvpn@server — если команда выдаст «не найдено», попробуйте так). -n 100 — последние 100 строк. --no-pager — вывести всё сразу, не открывая постраничный просмотр.
Чтобы смотреть лог в реальном времени прямо в момент подключения:
journalctl -u openvpn-server@server -f
-f («follow») держит окно открытым и показывает новые строки по мере появления. Оставьте терминал открытым и на клиенте попробуйте подключиться ещё раз — в момент неудачи появится несколько новых строк с ответом. Остановить просмотр — Ctrl+C.
Если OpenVPN настроен через отдельный файл (без systemd), лог обычно лежит в /var/log/openvpn/openvpn.log:
tail -f /var/log/openvpn/openvpn.log
tail показывает конец файла, а не весь текст целиком; -f работает так же, как в journalctl.
Если строк мало и они ничего не объясняют, поднимите уровень подробности. В конфиге сервера (/etc/openvpn/server/server.conf или /etc/openvpn/server.conf) найдите строку verb и временно поставьте:
verb 4
Стандартное значение — 3, оно даёт минимум деталей. После правки перезапустите сервис: systemctl restart openvpn-server@server. Не забудьте вернуть verb 3 обратно, когда разберётесь — подробные логи быстро растут в размере.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать VPSПричина: неверный логин или пароль (auth-user-pass)
Если аутентификация идёт по логину и паролю (директива auth-user-pass в конфиге клиента), в логе сервера будет:
TLS: Username/Password authentication failed for username 'ivan'
Это самая понятная ошибка — сервер прямо называет имя пользователя. Если имя вообще не то, что вы ожидали, — в файле с учётными данными на клиенте опечатка или устаревшие данные.
Что проверить:
- Раскладку клавиатуры при ручном вводе — кириллица вместо латиницы или незамеченный Caps Lock портят пароль незаметно для глаза.
- Файл с логином и паролем на клиенте (обычно две строки — логин и пароль). Откройте текстовым редактором, убедитесь, что нет лишнего пробела или пустой строки в конце.
- Срок действия системного аккаунта, если пользователи хранятся через PAM:
chage -l ivanпокажет дату истечения. - Отдельный файл с парами логин:пароль (например,
/etc/openvpn/psw-file) — убедитесь, что строка для нужного пользователя там есть и оформлена правильно.
Сбросить пароль: passwd ivan — система попросит ввести новый пароль дважды. После смены обновите пароль и в конфигурации клиента, иначе ошибка повторится.
Причина: сертификат клиента просрочен или отозван
При аутентификации по сертификатам (более распространённая и безопасная схема) ошибка в логе сервера выглядит иначе:
VERIFY ERROR: depth=0, error=certificate has expired
или error=certificate revoked. Первая — у клиентского сертификата вышел срок действия: сертификаты OpenVPN выпускаются на определённый срок (часто 1–3 года при стандартных настройках Easy-RSA) и потом перестают приниматься — это защита, а не баг.
Проверить срок действия сертификата (файл .crt у клиента или в pki/issued/ на сервере):
openssl x509 -in client1.crt -noout -enddate
openssl x509 работает с сертификатами формата X.509. -in client1.crt — какой файл читать. -noout — не выводить сам сертификат целиком (он нечитаем глазами), только запрошенное. -enddate — вывести дату окончания. Ответ вида notAfter=Mar 12 08:00:00 2026 GMT — если дата уже в прошлом, вот и причина.
Выпустить новый сертификат через Easy-RSA (утилита, которой почти наверняка настраивался сервер):
cd /etc/openvpn/easy-rsa
./easyrsa build-client-full client1 nopass
nopass — приватный ключ не будет дополнительно зашифрован паролем (для VPN это обычно приемлемо, ключ и так хранится только у владельца устройства). Новый client1.crt скопируйте на устройство взамен старого.
«certificate revoked» означает, что сертификат отозван вручную — например, командой easyrsa revoke client1, и вы забыли, что это было именно текущее устройство. Отозванные сертификаты попадают в список CRL (crl.pem), который сервер сверяет при каждом подключении. Отменить отзыв нельзя — выход один: выпустить новый сертификат командой выше.
Причина: несовпадение Common Name сертификата
У каждого сертификата есть поле Common Name (CN) — имя, заданное при создании (build-client-full client1 выше как раз задаёт CN равным client1). Сервер может быть настроен на строгую проверку: одно и то же CN не должно использоваться с двух устройств одновременно.
Если у вас несколько устройств (телефон и ноутбук) используют один и тот же файл сертификата — при одновременном подключении сервер обрывает одно из соединений в зависимости от настройки duplicate-cn в конфиге. Решения два:
- Добавить в конфиг сервера строку
duplicate-cn— она разрешает нескольким устройствам подключаться под одним сертификатом одновременно. Быстро, но менее аккуратно: в логах не видно, какое именно устройство сейчас в сети. - Выпустить для каждого устройства свой сертификат с уникальным CN (
build-client-full phone-ivan nopass,build-client-full laptop-ivan nopass) — тогда в логе всегда видно, какое устройство подключено, и можно отозвать доступ одному, не трогая остальные.
Второй вариант надёжнее, если вы администрируете сервер сами и планируете растить число пользователей.
Причина: рассинхронизация ta.key между клиентом и сервером
Если в конфигурации есть tls-auth (или более новый tls-crypt) — дополнительная защита через общий ключ ta.key, — при несовпадении этого ключа в логе появится:
TLS Error: cannot locate HMAC in the incoming packet from [AF_INET]x.x.x.x
ta.key — не сертификат и не пароль, а файл с общим секретом, который должен быть идентичен на сервере и на клиенте. Он подписывает пакеты ещё до начала обычной TLS-аутентификации — это защита от определённых сетевых атак и способ спрятать сам факт использования OpenVPN от анализа трафика.
Ошибка HMAC почти всегда означает одно из двух:
- На клиенте лежит устаревшая копия
ta.key— например, сервер переустанавливали и ключ перегенерировали, а клиентам не разослали новый файл. - В конфигах указано одинаковое направление ключа вместо противоположного. На сервере:
tls-auth ta.key 0, на клиенте:tls-auth ta.key 1(или наоборот, но обязательно по-разному).
Убедиться, что ta.key на клиенте и на сервере совпадает побайтово, можно контрольной суммой на обеих машинах:
sha256sum ta.key
Если строки-«отпечатки» разные — файлы разные, нужно скопировать актуальный ta.key с сервера на клиент заново безопасным способом (например, через scp по SSH, а не почтой или мессенджером — это секретный ключ). Для tls-crypt логика диагностики та же, разница лишь в том, что он ещё и шифрует управляющий канал целиком.
Подробный разбор прочих типичных сбоев OpenVPN (не только аутентификации) есть в статье про частые ошибки OpenVPN на сервере — пригодится, если проблема окажется смежной.
Причина: разное время на клиенте и сервере
Причина реже приходит в голову новичку, но встречается часто — особенно на VPS, которые долго простаивали или работали в виртуальной машине с «плывущими» часами, либо на старых Android-телефонах и роутерах, где время сбилось после перезагрузки.
Проверка TLS-сертификата сверяет текущее время с полями «действует с» и «действует по». Если время на сервере или клиенте убежало на несколько часов или дней, сертификат может показаться ещё не вступившим в силу или уже истёкшим, даже если по календарю всё в порядке:
VERIFY ERROR: depth=1, error=certificate is not yet valid
Проверить время и синхронизацию на сервере:
timedatectl
Команда покажет текущую дату, часовой пояс и строку System clock synchronized: yes/no. Если там no, часы никто не подводит и рано или поздно разъедутся с реальным временем.
Включить синхронизацию:
timedatectl set-ntp true
Если не помогает, поставьте более надёжный chrony:
apt install chrony
systemctl enable --now chrony
apt install chrony ставит программу точной синхронизации времени по сети. systemctl enable --now chrony включает автозапуск при загрузке и сразу запускает службу, не дожидаясь перезагрузки.
На клиенте (телефон, ноутбук) проверьте, что включена автоматическая установка времени по сети в системных настройках даты — ручной перевод времени «на глаз» для другой задачи и забытый обратно автоматический режим — частая причина именно на телефонах.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
В логе сервера вообще ничего нет про мою попытку подключения — что делать?
Значит, соединение не доходит до этапа аутентификации — скорее всего, дело в файрволе, порту или маршрутизации. Проверьте, что порт OpenVPN (обычно 1194/UDP) открыт: ufw status покажет список разрешённых портов, если используется UFW.
Ошибка появляется не всегда, а через раз — в чём может быть дело?
Чаще всего это рассинхронизация времени (часы «плывут», особенно в виртуальных машинах) либо нестабильное соединение, из-за которого TLS-рукопожатие не успевает завершиться. Проверьте timedatectl в первую очередь.
Можно ли одновременно использовать и логин-пароль, и сертификаты?
Да, это более безопасная практика: сертификат подтверждает доверенное устройство, логин-пароль добавляет второй фактор для конкретного человека. Настраивается директивой auth-user-pass-verify в конфиге сервера в дополнение к обычной проверке сертификатов.
После смены ta.key старые клиенты вообще перестанут подключаться?
Да, у всех, где остался старый файл, начнёт появляться ошибка HMAC. Меняйте ta.key только когда готовы разослать новый файл всем активным пользователям.
Как понять, что дело именно в аутентификации, а не в маршрутизации?
Если туннель вообще не поднимается и клиент явно показывает AUTH_FAILED (а не таймаут или «не могу подключиться») — это почти всегда аутентификация. Проблемы с маршрутизацией проявляются иначе: туннель поднимается, но интернет через него не идёт.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.