システムアーキテクチャ
AegisMeshは、中央の コントロールプレーン(管理系) と、分散配置された データプレーン(パケット転送系) によるハイブリッドアーキテクチャを採用しています。
flowchart TB classDef client fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px; classDef proxy fill:#efebe9,stroke:#8d6e63,stroke-width:2px; classDef control fill:#fff9c4,stroke:#fbc02d,stroke-width:2px; classDef tenant fill:#e8f5e9,stroke:#4caf50,stroke-width:2px; classDef relay fill:#ffe0b2,stroke:#ff9800,stroke-width:2px;
Client["外部クライアント (Windows / Mac / Linux / スマホ)"]:::client
subgraph Host["物理サーバー / クラウド基盤 (eth1: 443のみ開放)"] Proxy["リバースプロキシ (Caddy)"]:::proxy
subgraph Control["コントロールプレーン"] Management["管理サーバー (Management API)"]:::control Database["Neon (Serverless PostgreSQL)"]:::control Signal["シグナルサーバー (Signal)"]:::control end
subgraph DataPlane["データプレーン (テナント個別分離 & 特権TUN)"] TenantA["特権クライアントコンテナ A (wt0)"]:::tenant TenantB["特権クライアントコンテナ B (wt0)"]:::tenant UTMA["専用UTM A (生IP転送 / NAPT OFF)"]:::tenant UTMB["専用UTM B (生IP転送 / NAPT OFF)"]:::tenant end
subgraph Shared["共有データプレーン"] Relay["動的エッジ中継サーバー (Relay / coturn)"]:::relay end end
Client -->|HTTPS / gRPC: 443| Proxy Proxy -->|サブドメインルーティング| Management Proxy -->|サブドメインルーティング| Signal Management <--> Database
TenantA --> UTMA TenantB --> UTMB
TenantA -.->|P2P確立不可時のフォールバック| Relay TenantB -.->|P2P確立不可時のフォールバック| Relay1. コントロールプレーン(Control Plane)
コントロールプレーンは、端末の認証、暗号鍵の交換、アクセスポリシーの配信、およびエッジの負荷分散を担います。
- Management サーバー: REST API および gRPC エンドポイントを提供。端末の登録(Setup Key / SSO)、ピア一覧の更新、アクセスポリシーの計算、および各ピアへの設定配信を即時プッシュ(gRPC Stream)します。
- Signal サーバー: 各ピアがNAT越え(P2P直接通信)を行うためのシグナリング(ICE/STUN)を仲介します。パケット転送自体は行わないため、極めて軽量に動作します。
- データベース(Neon Serverless PostgreSQL): ステートレスなManagementサーバーを冗長化するため、クラウドネイティブな Serverless PostgreSQL(Neon)を採用。自動バックアップと瞬時のスケーリングを実現します。
2. データプレーン(Data Plane)
データプレーンは、暗号化パケットの実際の転送を行うレイヤーです。
- P2P ダイレクトメッシュ(最優先): 両ピア間で直接WireGuard暗号化トンネルを確立。サーバーを経由しないため、最速のスループットと最小の遅延を実現します。
- 動的エッジ中継(Relay / TURN フォールバック): 両端が対称型NAT(Symmetric NAT)等でP2P直接通信が確立できない場合、最も負荷が低く遅延の少ないRelayエッジノードを経由して暗号化通信を維持します。中継ノードはEnd-to-End暗号化されたパケットを転送するのみで、通信内容を復号・傍受することはできません。
3. テナント完全論理分離 & 特権TUNコンテナ
AegisMesh最大の特徴の一つが、マルチテナント環境における 完全論理分離 です。
- ホストOSポートのクローズ:
外部公開ポートはリバースプロキシの
443のみに一本化。テナントごとに異なるポート番号を開放する必要はありません。 - 特権TUNコンテナ(
nb-client-tenant-<slug>): テナントが作成されると、Managementサーバーが Docker SDK 経由で専用のクライアントコンテナを自動起動します。コンテナにはホストの/dev/net/tunとNET_ADMIN特権が付与され、テナント専用のWireGuardインターフェース(wt0)が生成されます。 - 生IP転送(Masquerade無効化): Exit NodeのIPマスカレードをバイパスし、リモートPCの生プライベートIPをそのまま各テナントの専用UTMやファイアウォールへ転送します。