OpenVPN 接続が 2 分ごとにリセットされる

OpenVPN 接続が 2 分ごとにリセットされる

AWS の Ubuntu で OpenVPN サーバーを実行しており、macOS の Tunnelblick を使用して接続しています。他の VPN サーバーへの接続には問題はありませんが、このサーバーは 2 分ごとにタイムアウト/リセットされるようです。

私のOVPNプロファイル:

client
dev tun
proto udp
remote ............... 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
cipher AES-128-CBC
auth SHA256
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
Certificate:
    Data:
        Version: 3 (0x2)
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>

接続時に、サーバーは次の設定をプッシュします。

PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,route 172.16.0.0 255.255.240.0,route 172.16.16.0 255.255.240.0,route 172.16.128.0 255.255.240.0,route 172.16.144.0 255.255.240.0,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 1,cipher AES-256-GCM'

(特に注意してくださいping 10,ping-restart 120

クライアントのログ レベルを上げると、接続がデータ パケットを送信しているように見えます。

2021-09-03 11:31:21.848620 UDP WRITE [62] to [AF_INET]...:1194: P_ACK_V1 kid=0 pid=[ #13 ] [ 6 ]
2021-09-03 11:31:21.848768 UDP WRITE [130] to [AF_INET]...:1194: P_DATA_V2 kid=0 DATA len=129
2021-09-03 11:31:21.848856 UDP WRITE [226] to [AF_INET]...:1194: P_DATA_V2 kid=0 DATA len=225

しかし、接続は常に約 2 分後に切断されます。クライアント ログには次のように表示されます。

2021-09-03 11:40:26.121900 [cc-vpn] Inactivity timeout (--ping-restart), restarting
2021-09-03 11:40:26.122379 SIGUSR1[soft,ping-restart] received, process restarting
2021-09-03 11:40:26.122504 MANAGEMENT: >STATE:1630683626,RECONNECTING,ping-restart,,,,,
2021-09-03 11:40:26.448969 MANAGEMENT: CMD 'hold release'

サーバー ログには、接続の再開以外は何も記録されません。

クライアントにプッシュされた設定を考えると、2 分間のタイムアウトは理にかなっていますping-restart 120。しかし、なぜクライアントが非アクティブであると判断するのかはわかりません。何が足りないのでしょうか? クライアントに、ping がサーバーに適切に送信されないようにする設定があるのでしょうか?

具体的には、クライアント設定に ping/ping-restart を追加しても効果がないようです (いずれにしても、サーバーの PUSH によって上書きされると思われます)。

これをデバッグして、接続が維持されない理由を突き止めるにはどうすればよいでしょうか?

答え1

これは、このキー/証明書のペアを使用しているクライアントが複数存在することを示す兆候であることが多いです。

  • (1)認証する
  • (2)認証する。サーバーは同じ証明書を見るので、接続が置き換えられただけであると判断し、(1)キープアライブpingを受信しなくなります。
  • (1)いくつかのpingを逃し、接続が切れたと判断して再接続すると、(2)pingを受信できなくなります
  • (2)はいくつかのpingを逃し、接続が切れたと判断して再接続し、今度は(1)はpingを受信しなくなります。

何が起こっているかがわかり、また、設定された非アクティブ タイムアウトがここでどのように関係しているかも明らかですping-restart

これを防ぐには、VPN CA を慎重に管理する必要があります。具体的には、次の点に注意してください。

  • キーがインストールされている場所と、各キーがインストールされているデバイスの管理者を追跡します。アクティブな VPN キーを持つすべての人に連絡できる方法を用意します (たとえば、電話番号、電子メールなどを記録します。証明書の発行時にそのデータを要求し、そのデータを証明書と CA インデックスに直接記録するように OpenSSL を設定できます)。
  • 同じキー/証明書を複数回使用しないでください。キー/証明書をテンプレート; システムを複製する場合は、そこにキーをクリアしてください。システムが複製されるたびに、キーは常に生成され、証明書が発行される必要があります。配備された
  • アクティブなキー/証明書を持っているのに、別のキー/証明書を要求してきたユーザーは、その理由を説明する必要があります。OSを再インストールしたために古いデータが失われ、VPN設定を保存し忘れたのかもしれません。あるいは、単に別のコンピュータにVPNが必要なのかもしれません。あるいは、何でもいいです。彼らの説明を評価すると、まず取り消す別のキーを発行する前に古いキーを再発行するか、衝突を避けるために別の CN でキーを発行します。
  • キー/証明書が使用されなくなった場合 (紛失したか、発行理由がわからなくなった場合) は必ず通知して取り消すようにユーザーを教育してください。その後、取り消す必要があります。
  • 非常に重要なことは、ユーザーに教育することです急いでキー/証明書が盗まれた疑いがある場合は通知されます。その場合は、直ちに取り消す必要があります。

これらは、「ネットワーク セキュリティ」と呼ばれるプロセスの一部です。VPN は、どれほど完璧なソフトウェアと最先端の暗号化技術を使用していても、一定の規律がなければ安全ではありません。


OpenVPN がこの状態を検出せず、ログ ファイルに報告しない理由を疑問に思う人がいるかもしれませんが、以下にコメントされているように、それは信頼性が低く、誤解を招く可能性があります。ログには生の事実のみが含まれるべきであり、唯一確立された事実は同じ CN が異なる場所から繰り返し接続しているということであり、なぜこれが発生したかについての推測は含まれるべきではありません。

上で概説したようなセキュリティ手順に従うと、問題は発生しません。問題が発生した場合、手順に違反したということになります。その場合、VPN のセキュリティを保証するには、キーが侵害されたと想定して、証明書を直ちに失効させるのが最も安全です。おそらく、VPN は (そのキーの所有者である) 誰かの手によって切断されるでしょうが、それは当然の結果です。彼らの確立された手順に従えない: 何らかのコンピュータで VPN を使用していないことを通知せず、別のコンピュータにコピーしたか、証明書が盗まれたか、などです。この問題について再教育した後、新しい証明書を発行できます。

関連情報