Назад | Перейти на главную страницу

OpenVPN не может повторно подключиться к пробуждению по локальной сети после долгого сна

У меня есть RaspberryPi в доме моих родителей с PiVPN, настроенным и настроенным для предоставления личного VPN-сервиса мне и нескольким друзьям. Этот VPN работал безупречно с самого начала, я использовал его на своем ПК и никогда не получал ошибок.

Недавно я установил еще один компьютер с Windows10 в доме моих родителей, чтобы он работал в качестве сервера для различных целей (если это связано с этой проблемой, я использую его как домашний мультимедийный сервер с Plex Media Server, а также как репозиторий Git. для личного пользования). Мне нужно, чтобы он автоматически подключался к VPN, поэтому я сделал следующее:

  1. Я настроил PiVPN для создания соответствующего файла .ovpn, установил клиент GUI OpenVPN на новый сервер и импортировал файл ovpn. Фактически, я настроил статические IP-адреса для всех подключений к моей VPN, поскольку я хочу, чтобы у них всегда были одинаковые IP-адреса.
  2. Я настроил OpenVPN на автоматическое подключение при запуске сервера. Я добился этого, разместив в этой папке прямую ссылку на графический интерфейс OpenVPN. C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp, и эта прямая ссылка содержала этот аргумент "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect ServerW10.ovpn
  3. Я настроил серверную BIOS на автоматическую загрузку при возобновлении подачи переменного тока (чтобы сервер снова загружался, если электричество отключилось), а также настроил его для автоматического входа в систему под пользователем, которого я создал при установке Win10. Таким образом, мы надеемся, что сервер всегда будет авторизован при каждом включении.

  4. Поскольку меня беспокоит энергопотребление в доме моих родителей, я настроил этот сервер так, чтобы он спал после 3 часов бездействия (настройки Windows 10) и всегда спал (с помощью пакетного скрипта) при достижении 2 утра.

  5. Из-за автоматического спящего режима я настроил BIOS на прием пакетов Wake-on-LAN для пробуждения сервера. Я тестировал это несколько раз, и он отлично работал. Таким образом, я мог разбудить сервер, когда мне нужно, на 3 часа (достаточно для моих целей).

  6. Я потратил несколько дней на тестирование сервера: переводил его в спящий режим вручную, позволял ему спать после 3 часов бездействия, принудительно завершал работу и т. Д., И OpenVPN всегда работал нормально и без проблем переподключался.

Теперь проблема возникла, когда я тестировал VPN-соединение с сервером после "сна в 2 часа ночи". Я разбудил сервер, а затем попытался пропинговать его, как обычно, с его статическим IP-адресом VPN, но не смог связаться с ним. Я вошел в систему через TeamViewer, чтобы проверить, что происходит, и когда я открыл графический интерфейс OpenVPN, я обнаружил, что он застрял в таком цикле:

Thu Mar 01 10:26:28 2018 OpenVPN 2.4.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Sep 26 2017
Thu Mar 01 10:26:28 2018 Windows version 6.2 (Windows 8 or greater) 64bit
Thu Mar 01 10:26:28 2018 library versions: OpenSSL 1.0.2l  25 May 2017, LZO 2.10
Thu Mar 01 10:26:29 2018 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Thu Mar 01 10:26:29 2018 TCP/UDP: Preserving recently used remote address: [AF_INET](my ip):(my port)
Thu Mar 01 10:26:29 2018 UDP link local: (not bound)
Thu Mar 01 10:26:29 2018 UDP link remote: [AF_INET](my ip):(my port)
Thu Mar 01 10:27:29 2018 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Thu Mar 01 10:27:29 2018 TLS Error: TLS handshake failed

Thu Mar 01 10:27:29 2018 SIGUSR1[soft,tls-error] received, process restarting
Thu Mar 01 10:27:34 2018 TCP/UDP: Preserving recently used remote address: [AF_INET](my ip):(my port)
Thu Mar 01 10:27:34 2018 UDP link local: (not bound)
Thu Mar 01 10:27:34 2018 UDP link remote: [AF_INET](my ip):(my port)
Thu Mar 01 10:28:34 2018 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Thu Mar 01 10:28:34 2018 TLS Error: TLS handshake failed
etc...

Я протестировал VPN на своем ПК и работает нормально, так что лучше всего, что это ошибка сервера.

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

rundll32.exe powrprof.dll,SetSuspendState 0,1,0

Я использовал этот сценарий, потому что видел учебник о том, как создать для этого пакетный сценарий. Как говорилось в этом руководстве, я также выполнил следующую команду, чтобы перейти в спящий режим вместо гибернации:

Powercfg -H OFF

В чем может быть проблема?

Я наконец исправил это, хотя у меня было 2 проблемы в моей настройке.

Прежде всего, «Настройка VPN» имела одну проблему: сервер OpenVPN (RaspberryPi с PiVPN) находился в той же подсети, что и серверный компьютер.

Файл конфигурации .ovpn указывал на мой личный DNS, поэтому серверный компьютер, чтобы подключиться к VPN RaspberryPi, должен был достичь DNS, а затем достичь моего RaspberryPi через общедоступный IP-адрес маршрутизатора моих родителей (который я связал с моим маршрутизатором) . Это проблема, потому что весь трафик VPN перенаправляется через фиксированный порт UDP на локальный IP-адрес RaspberryPi, что означает, что ответы RaspberryPi, отправленные на серверную машину, когда они прибыли на маршрутизатор, они попали в RaspberryPi из-за на перенаправленный UDP-порт, поэтому серверная машина так и не получил ответа.

Я исправил это, открыв файл .ovpn и изменив строку, содержащую целевой URL, для подключения к VPN из этого:

remote my.personal.dns {port_number}

к этому

remote {local_raspberry_pi_IP} {port_number}

Кроме того, в сценарии сна были какие-то ошибки с настройкой OpenVPN, и я не совсем уверен, почему, но я думаю, что это как-то связано с отключением гибернации. Я загрузил Microsoft PsTools и сделал новый скрипт, чтобы перевести компьютер в спящий режим в 2 часа ночи. Новый скрипт выглядит так C:\{path_where_pstools_was_extracted}\PsTools\psshutdown.exe -d -t 0 -accepteula

Благодаря этим модификациям сервер теперь, наконец, работает должным образом.