SSL-VPNの深淵:TAP/TUNデバイスが織りなす「仮想」の境界線
VPNという技術は、時として「魔法のトンネル」のように語られる。しかし、現場のインフラエンジニアであれば誰もが知っている通り、そこには魔法など存在しない。あるのは、Linuxカーネルの深淵と、パケットの断片化、そしてTCPオーバーTCPの悪夢に抗うための凄惨なチューニングの歴史だけだ。
本稿では、SSL-VPNにおけるL3/L2トンネリング、すなわち TUN/TAP デバイスを用いた仮想ネットワークインターフェースの動作原理と、そのパフォーマンスを極限まで引き出すための「泥臭い」エンジニアリングについて深掘りする。
—
1. TUN/TAPデバイス:カーネル空間とユーザー空間の架け橋
SSL-VPNにおいて、物理NICから送られてきたパケットをVPNサーバーがどう処理しているか。その鍵を握るのが TUN(Network TUNnel)と TAP(Network TAP)だ。
- TUNデバイス: L3(IP層)を扱う。IPパケットを直接やり取りするため、イーサネットフレームのヘッダーは含まれない。ルーティング制御が主眼となる。
- TAPデバイス: L2(イーサネット層)を扱う。MACアドレスを含んだイーサネットフレームそのものをカプセル化する。ブリッジングや、L2ブロードキャストが必要なレガシー環境に適している。
仕組みはシンプルだ。ユーザー空間のVPNプロセス(OpenVPNやWireGuardなど)が /dev/net/tun をオープンし、カーネルとの間でパケットを読み書きする。このとき、パケットは「物理インターフェース → カーネル → ユーザー空間のVPNプロセス → 暗号化 → TLS/DTLSソケット → 物理NIC」という、非常に長い旅路を辿ることになる。
2. パフォーマンスの敵:TCPオーバーTCP問題
多くのSSL-VPN(特にTLSベース)で直面する最大の敵は、TCPコネクションの中でTCPパケットを運ぶことによる「TCP Meltdown」だ。
VPN内のTCP通信がパケットロスを起こすと、内側のTCPと外側のトランスポート層(TLS)のTCP、双方で再送制御(Retransmission)が発動する。これにより、輻輳ウィンドウ(CWND)が急激に収縮し、スループットが壊滅する。
解決策:DTLSの採用とバッファチューニング
現代のSSL-VPNにおいて、UDPベースの DTLS(Datagram TLS)の使用は必須だ。DTLSであれば、外側のレイヤーで再送制御を排除できる。また、カーネルパラメータの調整も欠かせない。
# カーネルのTCPバッファサイズを拡張し、高RTT環境でのスループットを稼ぐ
# インターネット越しのVPNでは、ウィンドウサイズの拡大が不可欠
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
3. パケットヘッダー圧縮とMTUの最適化
VPNのオーバーヘッドは無視できない。IPsecやSSL/TLSによるカプセル化で、パケットサイズは必ず膨らむ。ここでフラグメンテーションが発生すれば、パケットの再構築(Reassembly)コストがCPUを食いつぶす。
MTU設定の極意
物理回線のMTUが 1500 であっても、カプセル化後のヘッダー分を考慮し、仮想インターフェースのMTUを 1400 前後に絞るのが定石だ。
# TUNデバイスのMTUを調整し、フラグメンテーションを回避する
ip link set dev tun0 mtu 1380
また、VPNプロセス側で IPヘッダー圧縮 や LZO/LZ4 等の圧縮を有効にする場合、CPU負荷と圧縮効率のトレードオフを慎重に見極める必要がある。帯域が細い環境なら圧縮は有効だが、近年の高速な光回線環境では、圧縮処理のオーバーヘッドがボトルネックになるケースが多い。
4. セキュリティ:ゼロトラストの観点からの強化
SSL-VPNは境界防御の要だが、それ自体が攻撃の標的となる。特に、VPNセッションの乗っ取りや、VPN経由での横方向展開(Lateral Movement)は致命的だ。
- 証明書ベースの認証: パスワード認証は過去の遺物だ。TLSハンドシェイク時にクライアント証明書を要求し、デバイスの信頼性を担保せよ。
- パケットフィルタリングの徹底:
TUN/TAPデバイスに対しては、物理インターフェースとは別に、iptablesやnftablesで厳格なポリシーを適用する。
# TUNデバイス経由の不要な通信を破棄するポリシー
# 許可されたIP範囲以外からのアクセスは即座にDropする
nft add rule inet filter forward iifname "tun0" ip saddr != 10.8.0.0/24 drop
まとめ
SSL-VPNの TUN/TAP を使いこなすということは、カーネル内のパケットフローを頭の中で可視化し、トランスポート層の特性を理解し尽くすということだ。設定ファイルをなぞるだけでなく、tcpdump を走らせてパケットのシーケンス番号やフラグメンテーションの様子を自分の目で確認してほしい。
ネットワークエンジニアの仕事は、パケットが滞りなく、かつ安全に目的地に到達するための「道筋」を整えることにある。この深淵な技術レイヤーを理解した先には、真に強固なゼロトラストの世界が広がっているはずだ。
コメント