OpenVPN — очень популярная программа для организации виртуальных сетей и VPN-серверов. Это очень удобно, так как вы можете объединить несколько компьютеров, находящихся в разных концах мира в одну виртуальную локальную сеть и для операционной системы всё будет выглядеть так, как будто эти компьютеры действительно находятся в одной локальной сети.
Но иногда сеть перестает работать или не получается её настроить. В этой статье мы разберём несколько причин, почему не подключается OpenVPN, с которыми лично сталкивался я и которые мне приходилось исправлять. Возможно, одна из них и привела к вашей поломке.
1. Сервис запущен?
Если вы только что установили и настроили OpenVPN, убедитесь, что его сервис запущен и работает. Если сервер не запущен, то, как правило, при попытке подключения вы будете получать ошибку «Connection refused». Для проверки выполните:
sudo systemctl status openvpn
В некоторых случаях сервис запускается с определённым конфигом. Тогда для проверки нужно указать этот конфигурационный файл:
sudo systemctl status openvpn@имя_конфига
Также вы можете посмотреть, слушает ли сервис подключения на порту OpenVPN:
ss -tlpn | grep openvpn
2. Открыт порт?
Если сервис запущен и слушает подключения на 1194 порту, а вы всё ещё не можете подключится, убедитесь, что этот порт не защищён брандмауэром на сервере. Для этого просто пробуем подключится к нему с помощью telnet:
telnet ip_сервера 1194
Когда всё хорошо, утилита сообщит об успешном подключении:
Если вы получаете такую же ошибку — «Connection refused» — или просто долго идёт подключение, но сервис запущен, значит порт закрыт. Открыть порт в Ubuntu можно с помощью команды:
sudo ufw allow 1194
А в CentOS:
sudo firewall-cmd --zone=trusted --add-service openvpn
sudo firewall-cmd --zone=trusted --add-service openvpn --permanent
Теперь можете снова попробовать подключаться к вашему OpenVPN-серверу и теперь всё должно заработать.
3. Соответствуют ли настройки?
Если сервер запущен и доступен извне, но вы всё ещё не можете подключится, то проверьте, соответствуют ли клиентская сторона настройкам сервера. Обратите внимание на тип подключения — tcp это или udp? Также обратите внимание на настройки шифрования и сжатия, особенно tls и comp-lzo. Все настройки, касающиеся подключения, должны быть одинаковыми как в конфигурационном файле клиента, так и сервера.
4. Используете ли правильные ключи?
Если вы подписывали ключи вручную, без использования какого-либо автоматического скрипта настройки OpenVPN, и поэтому они находятся в отдельных файлах от клиентского конфигурационного файла, тогда проверьте, используете ли вы правильные ключи и правильно ли они подписаны. Обычно при проблемах с ключами всё это очень хорошо видно в лог-файле OpenVPN. Но об этом позже. Попробуйте подписать ключи ещё раз.
5. Стабильная сеть?
Если OpenVPN подключается, но подключение постоянно разрывается, причиной этому может стать нестабильная сеть. Если вы знаете, что сеть у вас не очень стабильная или сильно загружена, уберите эти опции из конфигурационного файла клиента:
sudo vi /etc/openvpn/server.conf
Как правило, это решает проблему с сетью и программа может нормально работать даже в сети, которая постоянно разрывается. Также можно не удалять эти строки полностью, а просто увеличить их значения.
6. Проанализируйте лог файл
Если вам всё ещё не удалось выяснить, почему не работает подключение, значит это что-то более серьёзное и без анализа лог-файла вам не обойтись. При подключении в терминале клиента вы обычно будете получать примерно одну и ту же ошибку:
Более подробную информацию можно взять из лог-файла сервера. Лог-файл настраивается директивой log-append в конфигурационном файле сервера, обычно это /var/log/openvpn.log.
По умолчанию уровень логирования равен трём. На этом уровне вы мало что сможете понять. Вам нужен уровень 9, максимальный. Поэтому откройте конфигурационный файл и приведите настройки логирования к такому виду:
Теперь перезапустите OpenVPN:
sudo systemctl restart openvpn@имя_конфига
Откройте лог-файл и попробуйте снова подключится:
tail -f /var/log/openvpn.log
Здесь вы увидите очень много информации, просмотрите её внимательно и найдите, где именно находится проблема. Обычно программа сама говорит где проблема и как её решить. Главное, потом не забудьте вернуть значение параметра verb по умолчанию (3) иначе лог-файл очень быстро займёт всё свободное место на жёстком диске.
7. Два пользователя одновременно
Если по одному и тому же конфигурационному файлу пытаются подключится два или больше пользователей одновременно, то OpenVPN примет только одно подключение, а все остальные будет сбрасывать. Это поведение можно изменить, добавив к конфигурации сервера строчку:
Но лучше так не делать и создавать для каждого пользователя или устройства отдельный конфигурационный файл, тогда можно будет просто отследить, кто и когда подключался.
8. Истек срок действия crl
CRL — это список отозванных сертификатов. Этот файл имеет свой срок действия, и он может истекать. Если это произойдёт, то в логе вы найдёте ошибку «CRL has expired». Для быстрого её решения можно просто закомментировать строчку:
Но тогда отозванные сертификаты перестанут быть отозванными. Другой вариант — это создать этот файл заново. Если у вас установлен пакет скриптов EasyRSA, который, обычно, автоматически устанавливается вместе с OpenVPN, то сделать это очень просто. Перейдите в папку со скриптами:
cd /etc/openvpn/easyrsa/
И выполните:
./easyrsa gen-crl
Затем скопируйте полученный файл в папку с файлами OpenVPN:
cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/crl.pem
Готово, теперь у вас всё будет работать.
9. Сервер перегружен
Если вы не можете подключится или подключение разрывается, причиной этому может стать недостаточное количество ресурсов на сервере. Убедитесь, что сервер ничем не перегружен, а на жёстком диске есть свободное место.