【テクニカル・上級編】 SSL-VPNの「ネットワーク層(L3/L2)トンネリング型」の仕組み(TAP/TUNデバイス) – ゼロトラスト&エンタープライズセキュリティ実践ガイド

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 を走らせてパケットのシーケンス番号やフラグメンテーションの様子を自分の目で確認してほしい。

ネットワークエンジニアの仕事は、パケットが滞りなく、かつ安全に目的地に到達するための「道筋」を整えることにある。この深淵な技術レイヤーを理解した先には、真に強固なゼロトラストの世界が広がっているはずだ。

コメント

タイトルとURLをコピーしました