どのガイドも、OpenVPNにはUDPがTCPより優れていると言いますが、それは既定値であって測定ではありません。トランスポートが変えるのはパケットの届き方と経路がパケットを落としたときに何が起きるかであり、トンネルの暗号化方式ではありません。キャプティブポータルやポート443だけを許可するプロキシの背後では、遅いほうの選択肢こそがそもそも接続できるものです。以下では、プロトコルが何をするかと、アクセスネットワークが何を許すかを分けて説明します。

トランスポートが実際に変えるもの

TCPは信頼できる順序どおりのバイトストリームを提供し、失われたものはすべて再送します(RFC 9293が規定)。UDPはデータグラムをネットワークに渡し、OpenVPNはそのソケットの上で独自の信頼性レイヤーを動かします。TCPをTCPでカプセル化すると復旧ループが二重になり、失われたセグメント一つが内側のストリームを止めることが、外側の再送が届くまで続きます。この相互作用こそがUDPを選ぶ本当の理由であり、スループットではなく遅延として現れます。

影響は損失と往復時間に応じて大きくなります。きれいなローカル経路では両方のトランスポートが同じに感じられ、だからこそ研究室のベンチマークは苦情を再現しにくいのです。混雑したモバイル回線では、大きな転送が何かに気づくよりずっと早く、対話型セッションで差が出ます。

これは機密性や完全性には触れません。TLSハンドシェイクとデータチャネルの暗号はどちらのトランスポートでも同じなので、切り替えても弱い暗号スイートは救えません。

TCPが居場所を得る場面

TCPを選ぶ通常の理由はアクセスネットワークです。ホテル、空港、ゲストネットワークが外向き443だけを許可して他を捨てることがあり、そのポートのTCPリスナーが唯一動くプロファイルです。これは性能ではなく到達性であり、それだけで十分な理由になります。

経路が安定していても中間装置が敵対的な場合にもTCPは役立ちます。一部のネットワークは普通のWebトラフィックに似たTCPセッションを許容しながら、長時間のUDPフローをリセットします。その類似が通用するかは個々のネットワークの性質であり、どのガイドもすべてに対して約束できません。プロトコルのせいにする前に、失敗するネットワークの内側で試してください。

ログインが拒否されるのはトランスポートの問題ではありません。接続を通すために証明書の検証を無効にするのは別の変更であり、結果ははるかに悪くなります。

TCPプロファイルを用意しておくのが現実的な妥協です。ほとんどのクライアントは両方を保存し、ネットワークがUDP経路を拒否したときに切り替えられます。必要になるまでコストはかかりません。やってはいけないのは、異なるエンドポイントを指す二つのプロファイルを配ることで、それでは比較がサーバーを測ってしまいます。

実際に動いているリスナーを確認する

性能を比較する前に、両端がトランスポートとポートで一致していることを確認します。クライアントファイルのproto udpをproto tcpに変えても、サーバー側のリスナーは作られません。サーバーがそのプロトコル用に設定され、プロファイルがそれに合っている必要があります。

grep -E '^(proto|port|remote)' /etc/openvpn/server.conf
ss -lunp | grep openvpn
ss -ltnp | grep openvpn

grepはサーバーに使うよう指示された内容を表示し、二つのソケット一覧は何にバインドされているかを示します。UDPリスナーは一つ目の一覧にだけ、TCPリスナーは二つ目にだけ現れるので、行が欠けていれば適用されなかったプロファイルを最短で見つけられます。ポートも比較してください。1194のTCPプロファイルは多くのアクセスネットワークで443とは違う振る舞いをします。変更後にサービスを再起動し、バインディングを報告するログ行を読みます。

クライアント側の確認は安上がりです。--verb 4を付けて接続を実行し、ログのトランスポート行を読みます。クライアントがUDPと言っているのにサーバーがTCPで待ち受けているなら、ハンドシェイクは始まらず、どんな調整も役に立ちません。

トランスポートのラベルではなく作業負荷を比較する

公平な比較ではトランスポート以外をすべて一定にします。同じ端末、同じアクセスネットワーク、同じ宛先ホスト、同じアプリケーション、できれば同じサーバーです。二つのプロファイルが別のホストを指しているなら、そのホストも測っていることになります。

実行ごとに三つの結果を記録します。トンネルが確立するか、維持されるか、作業が完了するかです。小さな要求は通るのに大きな転送が止まるなら、トランスポートではなくパケットサイズとMTUを示します。再接続の繰り返しは経路か中間装置のタイムアウトを示します。

実際に遭遇する条件で動くプロファイルを残し、もう一方も保存しておきます。選択は人ではなくネットワークに属するので、単一の既定の答えはどこかで必ず間違っています。

関連記事