
我正在使用 BTGuard VPN,並且剛剛隨機收到來自 Little Snitch 的連接拒絕彈出視窗。 LS中條目的註釋是:
2019 年 5 月 29 日,vpn.btguard.com 嘗試建立與 openvpn 的傳入連線。請求被自動拒絕,因為這種連線不能延遲。
答案1
它可能類似於您上次連接時的雜散資料包。例如,OpenVPN 用戶端重新啟動,但伺服器仍嘗試透過先前的會話傳送資料。
OpenVPN(預設情況下,在 BTGuard 的配置中)透過 UDP 運行,UDP 是一種無狀態傳輸協議,其中有不明確的「建立連線」或「斷開連線」資料包,沒有序號,除了一對連接埠號碼之外什麼都沒有。
在 TCP 中,主機和防火牆一看到 SYN(握手)封包就開始追蹤連線。但在 UDP 中,因為沒有任何類型的“連接”資料包(只是資料包),防火牆只是在之後開始追蹤“連接”任何他們看到的數據包。
在 TCP 中,主機和防火牆一看到 FIN(斷開連線)封包就會忘記連線。但在UDP 中,因為沒有任何類型的「斷開連接」資料包,防火牆必須使用逾時來使舊的「連線」過期(例如,每當條目空閒60 秒或180 秒或10 分鐘或類似的時間時,該條目就會被刪除)。
當然,像 OpenVPN 這樣的程式在其應用層協定中可能有「連接」/「斷開連接」命令,但防火牆對此一無所知 – 它只看到內部包含一些資料的 UDP。
所以有時會發生這樣的情況:
要么 OpenVPN 重新啟動/退出,防火牆就會忘記與舊進程關聯的所有條目,要么 VPN 連接閒置太久,以致防火牆由於達到到期時間而忘記了它。
但是,BTGuard 伺服器尚未收到 OpenVPN「斷開連接」資料包,也沒有因為逾時而忘記連接,因此它會嘗試透過舊會話向您發送一些資料。
防火牆看到傳入的資料包並已無從得知無論它是一個新的“連接”還是屬於以前建立的連接。 (而且它也無法知道它最初是向外建立的還是向內建立的。)
因為防火牆不記得這個連接埠對(由於在第 1 部分中忘記了它),所以它只是假設它必須是新的。由於它是傳入資料包,防火牆會顯示有關「傳入連線」的警告。
這是一個猜測,但這是一個合理的猜測。