OpenVPN не может повторно подключиться с помощью wake-on-LAN после длительного сна

OpenVPN не может повторно подключиться с помощью wake-on-LAN после длительного сна

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

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

  1. Я настроил PiVPN для генерации соответствующего файла .ovpn, установил клиент OpenVPN GUI на новом сервере и импортировал файл ovpn. По сути, я настроил статические IP-адреса для всех подключений к моему VPN, так как я хочу, чтобы у них всегда были одни и те же IP-адреса.
  2. Я настроил OpenVPN на автоматическое подключение при запуске сервера. Я добился этого, разместив прямую ссылку на OpenVPN GUI в этой папке 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 часов ночи сна". Я разбудил сервер и попытался пинговать его как обычно с его статическим VPN IP, но не смог до него добраться. Я вошел через 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

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

решение1

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

Прежде всего, «настройка 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

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

решение2

Поскольку ваш ПК с Windows (сервер) мог подключаться к VPN на Pi все остальное время, я не думаю, что перенаправление портов (переадресация?) было причиной вашей проблемы здесь. Кроме того, тот факт, что вы могли получить доступ к VPN (на Pi) с помощью локального IP, указывает на то, что проблема может быть в вашем маршрутизаторе. Возможно, ваш публичный IP-адрес мог измениться за это время, а ваша запись DNS просто не обновилась.

Связанный контент