TL;DR

  • Tailscale 讓 Proxmox 的外部存取變得很簡單,但「要讓哪台 VM 開放到什麼程度」仍需要自己設計
  • Proxmox 的預設架構(扁平的 vmbr0)下,只要其中一台 VM 被入侵,就可能橫向擴散到其他所有 VM
  • 在有多個專案或多位成員的環境中,正確的順序是先用 SDN 做網路隔離,再使用 Tailscale

前言

在 Proxmox 上安裝 Tailscale 後,就能從外出時輕鬆存取 SSH 或 Web UI。省去 VPN 設定的麻煩,也不需要 NAT 或埠轉發,非常方便。

不過,如果沒有意識到「哪台 VM」「誰」「可以存取到什麼程度」,就直接導入 Tailscale,可能會無意間埋下風險。

本文將整理 Proxmox + Tailscale 架構中常見的遺漏,以及在多專案、多成員環境下正確的設計順序。


常見架構與其問題

典型做法

[外部] → Tailscale → Proxmox 主機或 VM → vmbr0 → 全部 VM

在 Proxmox 主機本身安裝 Tailscale,或是在一台 VM 裡安裝 Tailscale 再透過 SSH 進入各 VM,都是很常見的作法。

問題在哪裡

Proxmox 的預設架構中,所有 VM 都連到同一個橋接器(vmbr0)。

vmbr0(扁平)
├── VM-A(開發環境・專案 X)
├── VM-B(開發環境・專案 Y)
├── VM-C(資料庫)
└── VM-D(安裝了 Tailscale 的 VM)

在這種狀態下,如果讓 VM-D 可以透過 Tailscale 存取,會變成:

  1. 正常使用者透過 SSH 連入 VM-D
  2. 該使用者(不論是不小心還是有意)掃描同一個橋接器上的 VM-A、VM-B、VM-C
  3. 只要有脆弱的 VM,就可能發生橫向移動(lateral movement)

「透過 Tailscale 完成驗證」只是在控制對 VM-D 的存取,並沒有控制後續 VM 之間的通信。

另外,如果該橋接器上還有 Proxmox 主機本身的管理 IP,問題就不只是橫向擴散到其他 VM 而已。被入侵的 VM 也可能進一步嘗試存取 Proxmox 的管理平面(例如 Web UI 或 SSH)。也就是說,在扁平的 vmbr0 架構下,原本只是想安全公開一台 VM,最糟情況下卻會把主機端的管理面也納入爆炸半徑(Blast Radius)。

此外,如果被外部開放存取的 VM 本身有漏洞,攻擊者甚至不需要通過 Tailscale 驗證,也能直接把該 VM 當作跳板,接觸同一個橋接器上的所有 VM。

這不只是 Proxmox 特有的問題,而是任何虛擬化平台或雲端環境,在把外部公開的工作負載直接接到扁平內網時,都可能發生的設計問題。


橫向移動與 Blast Radius

橫向移動(lateral movement)是指攻擊者以最初入侵的那一台 VM 為起點,進一步擴大到同一網路上的其他 VM。

Blast Radius(爆炸半徑)則是指一台 VM 被入侵後,會影響到的範圍。

在扁平的 vmbr0 架構中:

  • Blast Radius = 橋接器所連接的所有 VM + 同一個 L2 上暴露的管理平面

當你讓外部可以存取開發環境時,這點尤其危險。

  • 把 VM 環境交給外部成員(自由接案者、外包成員)
  • 專案 A 的成員可能存取到專案 B 的 VM
  • 只要有一台 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 很簡單,但不適合「以專案為單位分隔存取範圍」這種用途。因為它沒有提供能將單一使用者的存取範圍限制在 VNet 層級的機制。

如果有多位成員、又有多個專案,建立專案專用的 VPN 伺服器,並針對成員發放各自的 VPN 設定檔,會有更細緻的存取控制粒度。


總結

項目|扁平架構 + Tailscale|SDN 分離 + 專用 VPN
---|---|---
外部存取的便利性|◎|○
專案間隔離|✗|◎
防止橫向移動|✗|◎
依成員控制存取|△|◎
不需要額外交換器等設備|需要|不需要

Tailscale 是很方便的工具,但「可以從外部存取」和「安全地提供外部存取」是兩回事。

特別是在有多個專案或多位成員參與的環境中,應該先做網路分離設計,再選擇存取方式,這才是正確順序。


參考:自動化此架構的工具

本文所說明的 Proxmox SDN(VXLAN Zone)+ 專案專用 VPN(Pritunl)架構,可以透過 MSL Setup 這個工具自動建置。

  • 自動生成對應專案數量的 VNet 與防火牆規則
  • 自動部署各專案專用的 Pritunl VPN 伺服器
  • 不需要額外的交換器等網路設備

👉 zelogx.com
👉 GitHub(免費版)
👉 建置詳細步驟請見這篇 Qiita 文章


原文出處:https://qiita.com/masa-555/items/889a597b92d213c7ac39


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝3   💬3   ❤️1
197
🥈
我愛JS
💬2  
7
🥉
Gigi
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登