
私は BTGuard VPN を使用していますが、突然 Little Snitch から接続拒否のポップアップが表示されました。LS のエントリのメモは次のとおりです。
2019 年 5 月 29 日、vpn.btguard.com は openvpn への着信接続を確立しようとしました。この種の接続は遅延できないため、要求は自動的に拒否されました。
答え1
これはおそらく、前回接続したときに残ったパケットのようなものです。たとえば、OpenVPN クライアントは再起動しましたが、サーバーは前回のセッションで引き続きデータを送信しようとしました。
OpenVPN(デフォルトおよびBTGuardの設定)はUDP上で実行されます。UDPはステートレスなトランスポートプロトコルであり、いいえ明示的な「接続の確立」または「切断」パケット、シーケンス番号なし、ポート番号のペア以外は何もありません。
TCPでは、ホストとファイアウォールはSYN(ハンドシェイク)パケットを見るとすぐに接続の追跡を開始します。しかしUDPでは、接続パケットは存在せず(データパケットのみ)、ファイアウォールはSYNパケットが受信された後に「接続」の追跡を開始します。どれでも彼らが見るパケット。
TCP では、ホストとファイアウォールは FIN (切断) パケットを検出するとすぐに接続を忘れます。しかし、UDP では、いかなる種類の「切断」パケットも存在しないため、ファイアウォールはタイムアウトを使用して古い「接続」を期限切れにする必要があります (たとえば、60 秒、180 秒、10 分などのアイドル状態になると、エントリが削除されます)。
もちろん、OpenVPN などのプログラムには、アプリケーション層プロトコルに「接続」/「切断」コマンドが含まれている場合がありますが、ファイアウォールはそれについて何も知らず、内部にデータがある UDP のみを認識します。
そのため、次のようなことが時々起こります。
OpenVPN が再起動/終了し、ファイアウォールが古いプロセスに関連付けられたすべてのエントリを忘れるか、VPN 接続が長時間アイドル状態になり、有効期限に達したためにファイアウォールがそれを忘れます。
ただし、BTGuard サーバーは OpenVPN の「切断」パケットを受信しておらず、タイムアウトにより接続を忘れてもいないため、古いセッションを介してデータを送信しようとします。
ファイアウォールは着信パケットを確認し、知る由もないそれが新しい「接続」なのか、それとも以前に確立されたものに属するものなのか。(また、それが元々外向きに確立されたものなのか、内向きに確立されたものなのかを知る方法もありません。)
ファイアウォールはこのポート ペアを記憶していないため (パート 1 で忘れたため)、新しいものであると想定します。また、着信パケットであるため、ファイアウォールは「着信接続」に関する警告を表示します。
それは推測ですが、妥当な推測です。