17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProxmoxにTailscaleを入れたら全VMが見えてしまう話—外部アクセスとラテラルムーブメントのリスク

17
Last updated at Posted at 2026-04-23

TL;DR

  • TailscaleはProxmoxへの外部アクセスを簡単にするが、「どのVMにどこまでアクセスさせるか」は自分で設計する必要がある
  • Proxmoxのデフォルト構成(フラットなvmbr0)では、1台のVMに侵入されると他の全VMに横展開できる
  • 複数プロジェクトや複数メンバーがいる環境では、SDNでネットワーク分離してからTailscaleを使うのが正しい順番

はじめに

ProxmoxにTailscaleを入れると、外出先からSSHやWeb UIに簡単にアクセスできるようになります。VPN設定の手間がなく、NATやポートフォワードも不要。非常に便利です。

ただ、「どのVMに」「誰が」「どこまで」アクセスできるかを意識せずにTailscaleを入れると、意図しないリスクを作り込んでしまうことがあります。

この記事では、Proxmox + Tailscale構成でよくある見落としと、複数プロジェクトや複数メンバーが関わる環境での正しい設計順序を整理します。


よくある構成とその問題

典型的なやり方

[外部] → Tailscale → Proxmoxホスト or VM → vmbr0 → 全VM

Proxmoxホスト自体にTailscaleを入れる、またはVM1台にTailscaleを入れてそこからSSHで各VMに入る、という構成はよく見られます。

何が問題か

Proxmoxのデフォルト構成では、全VMが同じブリッジ(vmbr0)に接続されています。

vmbr0(フラット)
├── VM-A(開発環境・プロジェクトX)
├── VM-B(開発環境・プロジェクトY)
├── VM-C(データベース)
└── VM-D(Tailscaleが入っているVM)

この状態でVM-DにTailscale経由でアクセスできるようにすると:

  1. VM-Dに正規ユーザーがSSHでアクセス
  2. そのユーザーが(意図せず、あるいは悪意を持って)同一ブリッジ上のVM-A、VM-B、VM-Cをスキャン
  3. 脆弱なVMがあれば横展開(ラテラルムーブメント)が可能

「Tailscaleで認証した」はVM-Dへのアクセスを制御しているだけで、その先のVM間通信は何も制御していません。

さらに、そのブリッジ上にProxmoxホスト自身の管理IPがある場合、問題は他VMへの横展開だけではありません。侵害されたVMからProxmoxの管理プレーン(たとえばWeb UIやSSH)への到達も試みられます。つまり、フラットなvmbr0構成では、1台のVMを安全に公開したつもりが、最悪の場合はホスト側の管理面までBlast Radiusに含めてしまいます。

さらに外部からアクセスさせているVMに脆弱性があった場合、攻撃者はTailscaleの認証を通らずとも、そのVMを踏み台にして同一ブリッジ上の全VMに到達できます。

これはProxmox固有の問題ではなく、外部公開したワークロードをフラットな内部ネットワークにそのまま接続したときに、どの仮想化基盤やクラウドでも起こり得る設計上の問題です。


具体例

実際、フラットな vmbr0 に接続されたVMの中で近隣情報を確認すると、少なくとも同一L2上のホスト情報が普通に見えてしまいます。

例:

masa@zelogx:~$ ip neigh show
192.168.1.105 dev enp6s18 lladdr ac:f4:73:xx:xx:xx STALE
192.168.1.117 dev enp6s18 lladdr 00:e0:4c:xx:xx:xx REACHABLE
...
192.168.1.2 dev enp6s18 lladdr 48:21:0b:xx:xx:xx STALE
...

この出力だけでは各IPの正体までは断定できませんが、少なくとも「公開VMを1台置いたら、同一セグメント上の他ホスト情報が見える」ことは分かります。


ラテラルムーブメントとBlast Radius

ラテラルムーブメント(横展開)とは、攻撃者が最初に侵入した1台のVMを起点に、同じネットワーク上の他のVMへと侵害を広げていく動きです。

Blast Radius(爆発半径)とは、1台のVMが侵害された場合に影響が及ぶ範囲のことです。

フラットなvmbr0構成では:

  • Blast Radius = ブリッジに繋がった全VM + 同一L2上に露出している管理プレーン

これは開発環境に外部からアクセスさせるとき、特に問題になります。

  • 外部メンバー(フリーランサー、オフショアメンバー)にVM環境を渡している
  • プロジェクトAのメンバーがプロジェクトBのVMにアクセスできてしまう
  • 1台のVMが侵害されると、開発環境全体が止まる可能性がある

正しい設計順序

Tailscaleを使って外部からアクセスさせる前に、まずネットワークの分離を設計するべきです。

ステップ1:SDNでプロジェクトごとにネットワークを分離する

Proxmox SDNのVXLAN Zone + VNetを使うと、プロジェクトごとに完全に隔離されたL2ネットワークを作れます。
AWSであれば、Security Group やネットワーク分離設計で同じ問題に対処できます。

vnetpj01(プロジェクトX用)
├── VM-A
└── VM-B

vnetpj02(プロジェクトY用)
├── VM-C
└── VM-D

vmbr0(メインLAN・管理用)
└── Proxmoxホスト

PVEファイアウォールにより、vnetpj01とvnetpj02の間の通信はホストレベルで遮断します。VM内からネットワーク設定を変更しても、この隔離境界はホスト側が維持します。

ステップ2:アクセス方法を設計する

分離されたネットワークにどうアクセスさせるか、用途によって選択肢が変わります。

用途 アクセス方法
自分一人が管理目的でアクセス Tailscale(ホストに直接)
複数メンバーをプロジェクト単位で招待 プロジェクト専用VPN(Pritunlなど)
特定のサービスだけ公開 Cloudflare Tunnel + リバースプロキシ

Tailscaleはシンプルですが、「プロジェクト単位でアクセス範囲を分ける」という用途には不向きです。1人のユーザーがアクセスできる範囲をVNet単位で制限する仕組みがないからです。

複数メンバー・複数プロジェクトがある場合は、プロジェクト専用のVPNサーバーを立ててメンバーごとにVPNプロファイルを発行する方が、アクセス制御の粒度が上がります。


まとめ

項目 フラット構成 + Tailscale SDN分離 + 専用VPN
外部アクセスの手軽さ
プロジェクト間の分離
ラテラルムーブメントの防止
メンバー単位のアクセス制御
スイッチなどの追加機器 不要 不要

Tailscaleは便利なツールですが、「外部からアクセスできる」と「安全に外部アクセスさせている」は別の話です。

特に複数のプロジェクトや複数のメンバーが関わる環境では、先にネットワークの分離設計をしてからアクセス手段を選ぶのが正しい順番です。


参考:この構成を自動化するツール

本記事で説明したProxmox SDN(VXLAN Zone)+ プロジェクト専用VPN(Pritunl)の構成を自動構築するツールとして MSL Setup を公開しています。

  • プロジェクト数分のVNet・ファイアウォールルールを自動生成
  • プロジェクトごとのPritunl VPNサーバーを自動プロビジョニング
  • スイッチなどの追加ネットワーク機器は不要

👉 zelogx.com
👉 GitHub(無料版)
👉 構築の詳細手順はこちらのQiita記事
👉 まず試してみたい方はこちら

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?