このページの目次

トンネリング技術の比較

「トンネリング」は、あるプロトコルを別のプロトコルでラップして転送することです。GRE は最もシンプルな IP-in-IP、VXLAN はマルチテナント用のオーバーレイ L2、rathole/frp はリレー経由で社内サービスを公開し、WireGuard/IPsec はエンドツーエンドの暗号化を提供します。選定の際は、オーバーヘッド、暗号化の必要性、NAT への互換性を見ます。

概要

「トンネリング」はネットワークエンジニアリングにおける一般的な概念であり、あるプロトコルを別のプロトコルでラップして転送することを指します。異なるトンネリング技術は異なる問題を解決します。GRE は最もシンプルな IP-in-IP ラップ方式であり、VXLAN は L3 ネットワーク上に L2 をオーバーレイしてマルチテナント環境で利用されます。rathole や frp はリレー経由で社内サービスを公開し、WireGuard/IPsec はエンドツーエンドの暗号化を提供します。選定における核心的な考慮事項は、オーバーヘッド、暗号化の必要性、接続モデル(オンデマンド vs 常時接続)、および NAT への互換性です。

トンネリングの分類

L2 overlay: VXLAN, GENEVE — データセンター仮想ネットワーク, 24-bit VNI
L3 tunnel:  GRE, IPIP, WireGuard — サイト間接続, 暗号化あり or なし
Port forward: rathole, frp, ngrok — 社内サービスの公開
Full VPN:    WireGuard, IPsec, OpenVPN — デバイスレベルの暗号化アクセス

rathole vs frp

ratholefrp
アーキテクチャ対称 (server ↔ client)集中型 (frps ↔ frpc)
接続モデル事前構築済み TCP 接続プールオンデマンドで TCP を作成
複数サービスサービスごとのトンネルサービスごとのプロキシ
暗号化上位層に依存 (Caddy による TLS)内蔵 (オプション)
プロトコル対応TCP のみTCP/UDP/HTTP
Dockerserver + clientserver + client
リソース使用量極めて低い (~5MB RAM)中程度 (~20MB)

事前構築済み接続プールの利点: server と client は起動時に複数のアイドル状態の TCP 接続を事前に確立します。クライアントからのリクエストが server に到達すると、server はプールから既に確立済みの接続を1つ取得し、データを転送します。これにより、リクエストごとに TCP の3ウェイハンドシェイクによる遅延を排除できます。

事前構築済み接続プールの代償: NAT や conntrack はアイドル状態の接続をクリアしてしまう可能性があります → early eof エラーが発生 → client は keepalive を設定する必要があります (TCP keepalive interval < conntrack timeout)。

GRE vs VXLAN

GRE (IP プロトコル 47):
  ラップ: [Outer IP | GRE hdr(4-16B) | Inner IP | Payload]
  設計: 汎用 (Generic Routing Encapsulation) — あらゆるプロトコルをラップ可能
  識別子: オプションの Key (4B) — 複数の GRE トンネルが同じ IP を共用

VXLAN (UDP):
  ラップ: [Outer Eth | Outer IP | UDP(port 4789) | VXLAN(8B) | Inner Eth | Inner L2+]
  識別子: VNI (24-bit) — 1600万の仮想ネットワーク
  ECMP: UDP src port をエントロピーとして使用 → マルチパスルーティング
  MTU: 50B のオーバーヘッド → ジャンボフレーム (9000 MTU) または断片化が必要

選定ガイド

要件選択
社内 HTTP サービスの公開rathole + Caddy (自動 TLS、接続プール)
複数プロトコルの社内透過frp (TCP/UDP/HTTP、ダッシュボード)
低レイテンシメッシュ VPNWireGuard (カーネル、約4K行のコード)
自動 NAT 透過Tailscale (STUN+DERP+UPnP)
企業向け VPN ゲートウェイIPsec/IKEv2 (ハードウェアオフロード)
データセンターオーバーレイVXLAN + EVPN (BGP コントロールプレーン)
シンプルな IP トンネルGRE (軽量、暗号化なし)

参考

  • rathole: github.com/rapiz1/rathole
  • frp: github.com/fatedier/frp
  • RFC: 2784 (GRE), 7348 (VXLAN)

Keywords: tunnel, rathole, frp, GRE, VXLAN, WireGuard, connection pool, overlay, port forwarding