手当たり次第に書くんだ

飽きっぽいのは本能

OpenVPN のパケット構造 – TLS 制御チャネルとデータチャネルを理解する

OpenVPN を理解しにくくしている原因の一つは、通信を単なる VPN トンネルとして一枚で見てしまうことです。実際には、OpenVPN には TLS 制御チャネルとデータチャネルがあり、それぞれ役割が違います。

この記事では、OpenVPN のパケット構造を、TLS 制御チャネルとデータチャネルに分けて整理します。細かい実装仕様をすべて追うというより、設定やトラブルシュートで何を見ているのかを理解するための整理です。

OpenVPN には制御チャネルとデータチャネルがある

OpenVPN では、接続を確立し、相手を検証し、鍵情報を扱うための通信と、実際の IP パケットを運ぶ通信を分けて考えます。

  • TLS 制御チャネル: 認証、鍵交換、接続制御を扱う
  • データチャネル: VPN 内を流れる実際の通信を暗号化して運ぶ
  • tls-auth / tls-crypt: 制御チャネルを追加で保護するための仕組み

この分け方を理解すると、証明書の問題、tls-auth の問題、MTU の問題を同じ場所に押し込まずに考えられます。

TLS 制御チャネルの役割

TLS 制御チャネルでは、証明書による相手確認、TLS セッションの確立、データチャネルで使う鍵の生成や更新が行われます。ここが成立しなければ、VPN のデータ通信は始まりません。

設定例

remote-cert-tls server
auth SHA512
tls-version-min 1.3

remote-cert-tls は、相手証明書の用途確認に関わります。証明書が存在するだけでなく、その証明書をどう検証するのかを明示することが重要です。

データチャネルの役割

データチャネルは、VPN 内を流れる実際の IP パケットを運ぶ部分です。暗号化方式、圧縮の有無、MTU、MSS、fragment などの影響を受けやすいのはこちらです。

設定例

data-ciphers AES-256-GCM:AES-128-GCM
data-ciphers-fallback AES-256-GCM

OpenVPN のバージョンや環境によって推奨される書き方は変わりますが、考え方としては、制御チャネルの TLS と、データチャネルの暗号化を分けて見ることが大切です。

tls-auth はどこを守るのか

tls-auth は、データチャネルを直接暗号化するものではありません。OpenVPN の TLS 制御チャネルに HMAC による追加の検査を加え、共有鍵を持たない通信を早い段階で落とすための仕組みです。

そのため、tls-auth は「VPN のパスワード」ではなく、OpenVPN の制御チャネルを保護する追加の鍵として理解した方が正確です。

MTU 問題は主にデータチャネル側で見える

OpenVPN で通信は確立するのに一部の通信だけ不安定な場合、TLS 制御チャネルではなく、データチャネル側の MTU / MSS 問題であることがあります。

tun-mtu 1500
mssfix 1360

接続確立の問題と、接続後の通信断や特定サイトだけ開けない問題は、原因の層が違うことがあります。制御チャネルとデータチャネルを分けて考えると、切り分けがしやすくなります。

確認するときの観点

  • TLS エラーなら証明書、CA、role、remote-cert-tls を見る
  • tls-auth エラーなら共有鍵と key-direction を見る
  • 接続後の通信不安定なら MTU / MSS を疑う
  • 経路がない場合は OpenVPN ではなくルーティングを確認する

まとめ

OpenVPN は、TLS 制御チャネルとデータチャネルを分けて理解すると整理しやすくなります。証明書や tls-auth は主に制御チャネルの問題であり、MTU や MSS は主にデータチャネルの問題として見えます。

VPN が動かない時に、すべてを OpenVPN の一言でまとめてしまうと原因がぼやけます。認証、鍵交換、暗号化、経路、MTU を分けて確認することが重要です。

関連する記事

次に進む

参考書籍

参考書籍
参考書籍
マスタリングTCP/IP ルーティング編

VPN、MTU、経路制御を含むネットワーク設計の前提を確認したい場合の参考書籍です。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

OpenVPN のパケット構造 – TLS 制御チャネルとデータチャネルを理解する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る