README Pro Version

Multiverse Secure Lab(MSL) Setup for Proxmox by Zelogx™

Zelogx™ Multiverse Secure Lab Setup(MSL Setup)は、Proxmox 上に「L2 レベルで分離されたセキュアな開発ラボ」を構築するための、ソース公開型オートメーションフレームワークです。 Proxmox SDN、ファイアウォール(セキュリティグループ)、Pritunl VPN を組み合わせて、プロジェクトごとに分離された環境を自動構築します。

このリポジトリは、その Personal / Community Edition を提供します。

Hola! Enjoying your self-hosted stack? Why not offer a secure slice of it to your team? Refer to REAMME_en.md for English documents.

English version is here (README.md)
Official Web Site is here

概要

プロジェクトごとに完全に分離された L2 レベルの開発環境を構築し、VPN 経由で安全にアクセスできるようにします。 低コストの分散開発、オフショア案件、またはチーム向けプライベートラボのためのプラットフォームです。

1. 今回作ったものの超概要

開発環境をプロジェクトごとに完全隔離。VPN経由でチームに公開。 ローコスト分散開発、オフショア開発環境構築。

動機

課題: Proxmoxにおける「フラットネットワーク」の罠

VPN経由でチームメンバーにProxmoxの開発環境を共有しようとしたとき、よくある問題に直面しました。

解決策: 「マルチバース」を作る

私が欲しかったのは次のようなツールでした。

見つかりませんでした。

そこで Zelogx MSL Setup を作りました。

Zelogxは1台のProxmox VEホストをマルチテナントのラボ提供基盤に変えます。対象は、インフラ全体を晒さずに特定リソースへ安全にアクセスさせたいエンジニアです。


アーキテクチャ

(詳細はリポジトリ内の高解像度ネットワーク図を参照してください)

+----------------+       +------------------+
|  VPN Client    | ----> |  Cloudflare /    |
| (Team Member)  |       |  Internet        |
+----------------+       +------------------+
        |                        |
        | VPN Tunnel (UDP/TCP)   | Port Forwarding
        v                        v
+=========================================================================+
|  Proxmox VE Host (Physical Server)                                      |
|                                                                         |
|    +----------------------------------------+                           |
|    | Pritunl VM (VPN Gateway)               |                           |
|    |  [OpenVPN Servers]  [WireGuard Servers]|                           |
|    |         |                  |           |                           |
|    +---------+------------------+-----------+                           |
|              | VPN Traffic (Decrypted)                                  |
|              v                                                          |
|    +----------------------------------------+                           |
|    |  SDN Zone: vpndmz (192.168.80.0/24)    |                           |
|    +----------------------------------------+                           |
|              |                                                          |
|              | (Routing & Firewalling)                                  |
|    +=========v==============================+                           |
|    | Nftables / Proxmox SDN Engine          |  <-- "Multiverse"         |
|    | (L2/L3 Isolation Enforcement)          |      Enforcer             |
|    +=========+====================+=========+                           |
|              |                    |                                     |
|    +---------v-------+    +-------v-------+         +-------v-------+   |
|    | Zone: devpj01   |    | Zone: devpj02 |         | Zone: devpjNN |   |
|    | [Isolated Lab]  |    | [Isolated Lab]|   ...   | [Isolated Lab]|   |
|    | 172.16.16.0/24  |    | 172.16.17.0/24|         | 172.16.xx.0/24|   |
|    +-----------------+    +---------------+         +---------------+   |
|       | VM1 | VM2 |          | VM1 | VM2 |             | VMs... |       |
|       +-----+-----+          +-----+-----+             +--------+       |
|            (🔒)                   (🔒)                      (🔒)         |
+=========================================================================+
LEGEND: ---> Traffic Flow, [🔒] Isolated Project Environment

エンジニアリング原則

1. 実行時オーバーヘッドより事前構成

Zelogx MSL Setupは事前構成ツールとして設計しています。

2. Proxmox標準機能のみで構成

「退屈な技術の力」を重視しています。

3. Pritunl自動化(VPNプロビジョニング)

VPN側は公式Pritunl HTTP APIで完全自動化しています。

VPNセットアップ時にMSL Setupが行うこと:

  1. cloud-initでPritunl VMを起動
  2. Pritunlサービスが起動するまで待機
  3. VM内で設定されたPritunl API(key/secret)を使って次を実行
    • 1つ以上のOrganizationを作成
    • 必要なServer(OpenVPN / WireGuard)を作成
    • OrganizationをServerに関連付け
    • 構成したServerを起動

Web UIの自動操作は行いません。すべてドキュメント化されたREST APIでプロビジョニングします。

Proxmoxホスト側から見ると、Pritunl VMはブラックボックスのVPNゲートウェイとして扱われます。


セキュリティと設計上の選択(FAQ)

Q: VMホッピングは防げますか?

A: はい。ラボ(テナント)境界で隔離が強制されます。


Q: APIトークンと権限管理はどうしていますか?

A: Zelogx MSL SetupはProxmox APIのトークン認証を使いません。ノード上でローカル実行し、root権限のProxmox CLI(pveshなど)を使用します。

1.1. この手順でできるもの(現場目線で)

Proxmox VEサーバ一台で

うんちく良いから早く構築方法教えてという方はこちら

1.2. この手順でできること(管理者・経営者目線で)

参考:

ベンダー/製品領域・強み本セットアップとの比較
Palo Alto Networks 「Prisma Access」などSASE/ZTNA (Zero-Trust Network Access)をクラウド規模で提供。エンタープラISE向けに広範囲機能。 (cloudnuro.ai)巨大な構成・コスト高。自社ハイパーコンバージド/オンプレ重視環境には”オーバースペック”
Zscaler 「Zero Trust Exchange」世界中にエッジを持ち、リモートユーザ/クラウドアクセスに強い。 (cloudnuro.ai)オンプレ専用/仮想マルチテナントネットワークにはカスタマイズが必要。Proxmox+自前環境との親和性低め
Check Point Software Technologies+Perimeter 81ゼロトラストWAN/VPN置換ソリューションを買収展開。 (Wikipedia)大企業向け価格帯、設定・運用が複雑。小規模/中規模で”手軽に導入できる仮想マルチテナントVPN+開発環境隔離”構成では割高/難易度高い
StrongDMインフラアクセス管理(SSH/RDP/データベース)に特化。 (Wikipedia)ネットワーク全体隔離・仮想スイッチ階層・VPN+マルチテナント構成までは含まれない。君の構成がこの補完領域を突ける
JumpCloudクラウドディレクトリ/リモートアクセス管理など幅広く。 (Wikipedia)ネットワーク隔離・仮想ブリッジ・オンプレ仮想ハイパーバイザ深掘り構成までは標準ではカバーしていない

1.3. 利用ソフトウェアのライセンス

Pritunl

Proxmox VE

1.4. 想定するターゲット

1.5. 必要性

ターゲットのところで記載してますが、さらに踏み込んで現場が気付いていないかもしれない課題の発掘。

1.5.1. パブリッククラウドの課題、ホームラボ環境の課題

開発環境をパブリッククラウドで行っている場合の典型的”あるある問題”

セキュリティリテラシーの低いアプリ開発者や”インフラわかってるつもりの人”が自由にクラウド触り続けてて大丈夫でしょうか? 彼らは悪気はない。求められる責任を果たすための”仕組み”が無いだけ。 その結果、コスト膨張、攻撃面増大、権限スパゲッティ、“一周回ってオンプレの方が安全だった”現象

また、ホームラボ環境を持っていて、その一部をチームメンバへ公開したいが、 家庭用LANと共存しており、家庭内LANのデータブリーチ、他社開発プロジェクトのVM丸見え問題が発生するため公開しない人。 簡単に晒せない。という悩みをお持ちの方も多いかと思います。

1.6. コスパ

例えば、AWS EC2 c5d.large (2vCPU) を例に比較をしてみよう。 今回の企画で使ったマシン:Intel NUC pro Core i7 1360P 12コア16スレッド、最大5.0GHz

項目AWS EC2 (c5d.large)NUC上の2vCPU VM
割り当て vCPU2 vCPU2 vCPU
物理CPUXeon Platinum 8124MCore i7-1360P
物理CPU性能18C/36T / max 3.5GHz12C/16T / max 5.0GHz
RAM4GB任意
コスト$89/月 (~13,000円)電気代 200円程度/月 (2vCPU相当)
ストレージEBS (別課金)NVMeローカル (高速/低遅延)
ネットワーク課金100GB超で課金無し(ローカル)
性能指標(2vCPU換算)基準ベンチ比 ~3.3〜3.5倍

参考 ベアメタルでのベンチマークスコア

BenchScore(8124M)Score@1360P
PassMark single thread2.0403.573
PassMark CPU Mark22.28720.824
Geekbench 4 single core3.9546.517
Geekbench 4 multi core35.42035.803

ベンチマーク値参考元

PassMark/Geekbench の シングルスレッド性能(1.65~1.7倍) × 2 vCPU の単純計算に基づく。
実際の本来マルチスレッド係数等、CPUキャッシュ性能等、メモリ帯域等により変動するが、 CPU性能として約3.3〜3.4倍の差が見られる。 なお、I/O性能はローカルNVMe PCIe4 x 4なので、こちらも爆上がり。
※ただしハイパーバイザーのオーバーヘッドは考慮してない。

1.7. リスク検討

パブリッククラウドを自前proxmoxサーバにした場合のリスクを想定してみました。

1.7.1. 想定リスク

1.7.2. リスクヘッジ

2. 構築手順 (Quickstart)

さて、ここからは具体的な構築手順です。 全部オープンなOSS構成で再現可能な手順を載せます。

2.1. 必要なもの

簡単に言うとProxmox VEが入った物理PC一台。 開発用VMを何台も実行することになるのであれば、メモリとディスク容量には余裕がある方が良いです。

構築に必要なHWとSWは全部これだけ

HW

SW

必要なパッケージ (セットアップスクリプトで自動インストール):

Other

2.2. ネットワークの検討

以下のネットワークアドレスの入力が必要となります。適切な設定を行う必要があります。
Proxmox VEが接続しているサブネットワーク以外にセグメントがないという場合には、a,b以外は重複がない限り以下の例のままでもよいかと思います。a,bは現在利用中のネットワークを指定すれば問題ありません。

Zelogx MSL Setup Network Overview

(a) MainLan(vmbr0既設): (例:192.168.77.0/24 GW: .254)

(b) Proxmox PVEのmainlanのIP: (例:192.168.77.2)

(c) vpndmzvn(新設): (例:192.168.80.0/24 GW: 192.168.80.1)

(d) クライアントへの配布IP: (例:192.168.81.0/24)

(e) 作成する開発用分離セグメントの作成数(PJ数): (例:8)

(f) 各PJ(vnetpjxx)に割り当てるネットワークアドレス(新設): (例:172.16.16.0/20)

(g) Pritunlのmainlan側のIP: (例:192.168.77.9)

(h) Pritunlのvpndmzvn側のIP: (例:192.168.80.2)

(i) UDP ports

注意: ルーターによっては、ポートフォワードできる数に制限がある。Buffaloルータでは最大32個でした。なので、5を決める際にはルータの最大ポートフォーワード数も念頭に置いて決定すること。 また、IPoEでNDプロキシ/MAP-E/DS-Liteなどを使用している場合は使用できるポートに制限があるので、あらかじめ確認する必要がある。

2.3. Proxmox VE 9.0 インストール

本ドキュメントはPVE 9.0.11で動作の確認を取っております。 PVEには固定IPを振ってください。

2.4. Quickstart

rootでPVEへSSHログイン。

apt update -y
apt install -y git ipcalc jq zip
# Downloadしたzipファイルをscpなどで置いてください。

# Corporate editionの場合
unzip msl-setup-pro-1.x.x_corporate.zip    # change x to correct version number
cd proxmox-msl-setup-1.x.x_corporate
# Personal editionの場合
git clone https://github.com/zelogx/msl-setup.git
cd msl-setup

# Phase 1: ネットワークセットアップ (設定確認 + SDN構築)
./01_networkSetup.sh jp   # 言語: en|jp (省略時 en)
# これにより以下を順次実行:
#   1. 0101_checkConfigNetwork.sh - 対話的に .env を生成
#   2. 0102_setupNetwork.sh - SDN設定適用 (Zone/VNet/Subnet/IPSet/Firewall)

# Phase 1 完了後、ルーター設定を実施してください(ポートフォワード、静的ルート)
# Phase 1 終了時に表示される指示に従ってください

# Phase 2: VPN セットアップ (Pritunl VM 展開 + 設定)
./02_vpnSetup.sh jp   # 言語: en|jp (デフォルトen)
# これにより以下を順次実行:
#   1. 0201_createPritunlVM.sh - Pritunl VM展開 (Ubuntu 24.04 LTS + cloud-init)
#      - 既存VMインベントリ収集(監査証跡)
#      - VMID自動割当(100から開始)
#      - SSH鍵自動生成(存在しない場合)
#      - Ubuntu 24.04 cloud-initイメージダウンロード(再利用可能キャッシュ)
#      - 2-NIC VMを作成(vmbr0/MainLAN, vpndmzvn)
#      - cloud-init経由で固定IP・ルート設定
#      - ネットワーク設定をリモート検証
#   2. 0202_configurePritunl.sh - Pritunl サーバー、組織、ユーザー設定

# Phase 3 (Pro Corporate エディション専用): RBAC Self-Care ポータルセットアップ
./0203_setupSelfCarePortal.sh jp   # 言語: en|jp (省略時 en)
# これにより以下を実行:
#   1. 現在の RBAC 状態をバックアップ(Pool、Group、User、ACL、Firewallルール)
#   2. 既存リソースとの ACL 競合を確認
#   3. ストレージデバイスの選択を促す(Project Pool に割り当てる)
#   4. NUM_PJ 個の Pool、管理グループ、ユーザーアカウントを作成
#   5. 各 Project の管理ユーザー用にランダムなパスワードを生成
#   6. Pool と SDN Zone の権限を Project グループに割り当て
#   7. VPN ユーザーが Proxmox GUI(ポート 8006)へアクセスするための Firewall ルールを追加
#   8. Project の認証情報(ユーザー名、パスワード)をテーブル形式で表示
# --restore オプション対応: すべての Project RBAC リソースを削除し、バックアップ状態に復元可能
#
# このフェーズを実行することで、VPN ユーザーを含むプロジェクトメンバが、自分たちの
# プロジェクトネットワーク内で自由に VM の作成・削除・起動・停止・スナップショット作成・
# バックアップ作成などを実施できるセルフサービス環境が整備されます。管理者の手を借りずに
# プロジェクト固有の開発リソースを管理できるようになります。
#
# **Pro Corporate エディション専用**: この機能は Pro Corporate エディションに含まれています。
# Community Edition のユーザーは、このフェーズはオプションであり、ユーザー/Pool の手動セットアップが必要です。

# (任意) MSLセットアップを完全にアンインストール
./99_uninstall.sh jp   # 言語: en|jp (省略時 en)
# これにより以下を実行:
#   1. RBAC 設定を削除 (0203_setupSelfCarePortal.sh --restpreを呼び出し。Corporate editionのみ)
#   2. Pritunl VMを破棄 (0201_createPritunlVM.sh --destroy を呼び出し)
#   3. ネットワーク設定をバックアップ状態に復元 (0102_setupNetwork.sh --restore を呼び出し)
# 重要: アンインストール実行前に、vnetpjXXを使用している全VM/CTを削除するか、
#       それらのNICを別のブリッジ(例: vmbr0)に付け替えてください
# デフォルトはNo - 実行には明示的な確認(y/yes)が必要です

引数ポリシー:

4. 既知の問題 (Known Issues)

5. あとがき

適切に設計されたパブリッククラウドは強いし、 冗長電源、空調、マルチAZ、SLA、責任分界、フィジカルセキュリティ…など叶わない点はあります。 ある意味自由を奪ってセキュリティとコストの自由度を担保してみた結果、こうなったという一例です。

なお、この記事は家庭LABおじさんも出来るレベルで記載してますが、中小ソフトハウス、少人数SaaS開発、SIer、SES会社向けです。