長時間睡眠後 OpenVPN 無法透過 LAN 喚醒重新連接

長時間睡眠後 OpenVPN 無法透過 LAN 喚醒重新連接

我父母家裡有一個 RaspberryPi,設定並設定了 PiVPN,為我和幾個朋友提供個人 VPN 服務。這個 VPN 從一開始就運行得很好,我在我的電腦上使用它,從未出現過錯誤。

我最近在父母家設置了另一台裝有 Windows10 的計算機,作為各種用途的服務器(如果與此問題相關,我將其用作帶有 Plex Media Server 的家庭多媒體服務器,也用作 Git 存儲庫供個人使用)。我需要它自動連接到 VPN,所以我執行了以下操作:

  1. 我配置 PiVPN 來產生相應的 .ovpn 文件,在新伺服器電腦上安裝 OpenVPN GUI 用戶端並導入 ovpn 文件。事實上,我為 VPN 的所有連接配置了靜態 IP,因為我希望它們始終具有相同的 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配置為每當AC恢復時自動啟動(因此,如果斷電,伺服器會再次啟動),並且我還將其配置為自動登入我在安裝Win10時建立的使用者。因此,希望伺服器在開機時始終保持登入狀態。

  4. 由於我擔心父母家的功耗,我將此伺服器配置為在 3 小時不活動後進入睡眠狀態(Windows 10 設定),並在凌晨 2 點時始終睡眠(使用批次腳本)

  5. 由於自動睡眠的原因,我將 BIOS 設定為接受 LAN 喚醒封包來喚醒伺服器。我對此進行了多次測試,效果很好。這樣我就可以在需要的時候喚醒伺服器 3 小時(足以滿足我的目的)。

  6. 我花了幾天時間測試伺服器:手動將其置於睡眠狀態、在 3 小時不活動後讓它睡眠、強制關閉等,而 OpenVPN 始終運行良好並重新連接,沒有出現任何問題。

現在,當我在「凌晨 2 點睡眠」後測試與伺服器的 VPN 連線時,問題出現了。我喚醒了伺服器,然後嘗試像往常一樣使用其靜態 VPN IP 對其進行 ping 操作,但無法存取它。我透過 TeamViewer 登入來檢查發生了什麼,當我打開 OpenVPN 的 gui 時,我發現它陷入了這樣的循環:

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...

我用我的 PC 測試了 VPN,並且工作正常,所以最好的選擇是這是伺服器的故障。

我個人認為這可能與我製作並編程為在凌晨 2 點運行以使 PC 在凌晨 2 點進入睡眠狀態的批次腳本有關,因為我對其他睡眠方法(手動睡眠和不活動睡眠)沒有任何問題。批次腳本如下所示:

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

我使用這個腳本是因為我看到了有關如何為此執行批次腳本的教程。正如該教程中所述,我還運行了以下命令來進行睡眠而不是休眠:

Powercfg -H OFF

可能是什麼問題呢?

答案1

我終於修復了它,儘管我的設置中有兩個問題。

首先,「VPN 設定」有一個問題:OpenVPN 伺服器(帶有 PiVPN 的 RaspberryPi)與伺服器電腦位於同一子網路中。

.ovpn 設定檔指向我的個人 DNS,因此伺服器電腦為了連接到 RaspberryPi 的 VPN,必須到達 DNS,然後透過我父母路由器的公共 IP(我已與路由器連結)到達我的 RaspberryPi 。這是一個問題,因為所有 VPN 流量都透過固定的 UDP 連接埠重定向到 RaspberryPi 的本地 IP,這意味著 RaspberryPi 發送到伺服器電腦的回應,當它們到達路由器時,它們最終會到達 RaspberryPi,因為到重定向的UDP端口,所以伺服器機器從未收到回覆

我修復了此問題,打開 .ovpn 檔案並修改包含目標 URL 的行以從此連接到 VPN:

remote my.personal.dns {port_number}

對此

remote {local_raspberry_pi_IP} {port_number}

另外,睡眠腳本在 OpenVPN 設定中存在某種問題,我不太確定為什麼,但我認為它與停用休眠有關。我下載了微軟Ps工具並製作了一個新腳本讓電腦在凌晨 2 點進入睡眠狀態。新腳本看起來像這樣C:\{path_where_pstools_was_extracted}\PsTools\psshutdown.exe -d -t 0 -accepteula

透過這些修改,伺服器現在終於可以如預期般運作了。

答案2

由於您的 Windows PC(伺服器)可以在其他時間連接到 Pi 上的 VPN,因此我真的不認為連接埠重新導向(轉送?)是導致您出現此問題的原因。此外,您可以使用本機 IP 存取 VPN(位於 Pi)這一事實表明您的路由器可能有問題。您的公用 IP 位址可能在此期間發生了更改,並且您的 DNS 記錄並沒有更新。

相關內容