VPS、VM、VPC 有什麼不同?一次搞懂
VM 是虛擬化技術,VPS 是租用的 VM 產品,VPC 則是 cloud account 內的私人網路。本文說明三者差異,以及各自適用的情境。
VPS、VM 與 VPC 一段說清楚
VM(virtual machine)是由軟體構成的電腦:hypervisor 會將一台實體伺服器分割成數台彼此獨立的機器,每台機器都執行自己的 kernel。VPS(virtual private server)是以產品形式租用給您的其中一台虛擬機器,包含作業系統、root 存取權限與每月價格。VPC(virtual private cloud)根本不是伺服器,而是您在 cloud account 內定義的私人網路,並將資源配置其中。VM 是技術。VPS 是產品。VPC 是包圍該產品的網路。
其中兩個詞描述的是機器,第三個描述的是網路。幾乎所有混淆都源自這種差異,因為人們將它們當成同一個貨架上的三種產品來比較。
虛擬機器是什麼
Hypervisor 是模擬硬體的層。它會為每個 guest 提供虛擬 CPU、記憶體區塊、虛擬磁碟與虛擬網路卡,並隔離各個 guest,避免彼此存取。KVM、Xen、Hyper-V 與 VMware ESXi 是伺服器上常見的 hypervisor。現代 hypervisor 會使用 CPU 虛擬化擴充功能(Intel VT-x、AMD-V),讓 guest 指令直接在實體 CPU 上執行,速度接近原生效能,而不必透過解譯執行。
對系統管理員而言,重要的是 kernel。VM 會啟動自己的 kernel,因此你可以選擇發行版、載入 kernel modules,並設定只套用於自己的 sysctl 值。這與 container(LXC、Docker)不同;container 會共用 host kernel,只能取得專屬的程序與檔案視圖。
在任何 Linux 主機上,只要執行一個指令即可查看結果。
systemd-detect-virtkvm 表示你是在 KVM hypervisor 上執行的虛擬機器。lxc 或 openvz 表示你是在其他人的 kernel 上執行 container。none 表示你使用的是自己的實體主機。若缺少該指令,lscpu | grep -i hypervisor 會從 CPU flags 顯示相同資訊。
VPS 是什麼
VPS 是以商業形式提供的 VM。底層技術是虛擬化,而「VPS」這個名稱還包含了讓產品能夠銷售的項目:可重新安裝的 OS image、IP 位址、頻寬額度、控制面板、每月價格,以及主機故障時可聯絡的服務商。「Private」用來區分 shared hosting;在 shared hosting 中,數百個網站共用同一個作業系統與同一組 PHP 設定。
VPS 是產品名稱,不是技術術語,因此不一定代表完整的 VM。有些平價方案也會以相同名稱提供容器。第一次需要使用 kernel 時,就會看出差異。在以容器為基礎的方案中,sudo modprobe wireguard 會因為 RTNETLINK answers: Operation not supported 或 modprobe: FATAL: Module wireguard not found 而失敗,原因是 kernel 屬於主機,且你無權變更它。在 KVM 方案中,模組可以載入,tunnel 也能建立。如果你計畫在伺服器中執行 Docker、VPN、自訂 kernel,或自行建立虛擬機器,購買前請先確認虛擬化類型。在 VPS 內執行 虛擬機器 需要主機端啟用 nested virtualisation 的 KVM,而符合這項條件的方案又更少。
VPC 是什麼
VPC 是雲端供應商內部的軟體定義網路。您可以使用 CIDR 表示法為它指定一段位址範圍,例如 10.0.0.0/16,再從中劃分子網路、掛接路由表,並在內部資源前方設定防火牆規則(security groups)。VPC 不具備 CPU、記憶體或磁碟,也沒有可供登入的環境。刪除 VPC 中的所有伺服器後,VPC 仍會留在那裡,保持空白,通常也不會產生費用。
VPC 提供的是私有定址能力。同一個 VPC 中的兩台伺服器可透過類似 10.0.1.15 的位址,在供應商的內部網路上互相通訊。這些網路流量不會經過公用網際網路,也不會列入網際網路輸出流量計費。因此,資料庫可以只監聽其私有位址,完全不對外公開任何埠。
ip -4 addr show10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16 內的位址都是私有位址。同一台主機若有公用位址,表示無論它位於哪種網路物件中,伺服器都能直接從網際網路連線。
VPC 會讓我的伺服器變成私有嗎?
不會,這是混淆這 3 個詞時代價最高的誤解。VPC 負責控制路由與位址配置,但不會決定網際網路是否能連到某台機器。如果執行個體具備公有 IP,且安全性規則允許來自 0.0.0.0/0 的 22 埠流量,無論是否使用 VPC,其暴露程度都與其他伺服器完全相同。VPC 提供的隔離能力,是讓資源完全不配置公有位址,並透過規則指定哪些子網路可以彼此通訊。
這 3 個詞所代表的隔離類型也不同。VM 隔離的是運算資源:hypervisor 會分隔 CPU 時間與記憶體,因此其他 guest 無法讀取你的 RAM。這種隔離對磁碟與網路較弱,因為同一台主機上的忙碌鄰近租戶仍可能降低你的效能。採用容器的 VPS 共用同一個 kernel,因此 kernel 層級的錯誤會成為共用風險。VPC 完全不隔離運算資源,只負責調整網路。
定價的思考模式
VPS 通常以固定月費提供固定規格的機器。您在月份開始前就能知道費用,磁碟與流量額度也包含在其中。對於小型工作負載而言,這種可預測性是人們選擇 VPS 而非雲端執行個體的主要原因。
雲端 VM 採用計量計費。執行個體按小時或秒計費,而磁碟、快照、負載平衡器及輸出流量則分開計費。VPC 本身通常免費,但附加的代管元件並非如此:讓私有執行個體存取網際網路的 NAT gateway,會依小時及 GB 計費;可用區之間的流量也會計費。截至 2026 年 7 月,主要雲端平台仍會自動將每個新執行個體放入預設 VPC,因此無論您是否主動要求,都會使用 VPC。
實際上需要哪一種
- 用於網站、應用程式、遊戲伺服器或 VPN 的單台伺服器:VPS。新 VPS 上線後的前 10 分鐘比方案名稱更重要。
- 多台必須透過私有位址互相連線的伺服器:VPC,或 VPS 供應商以其他名稱提供的私有網路功能。
- 必須能承受整個資料中心停止運作的工作負載:具備多個 zone 的 cloud,也就是位於 VPC 內的 VM。
- 需要完整控制 kernel,或要在其上執行自己的 hypervisor:採用 KVM based VPS 或 dedicated server。比較方案時,也應查看方案背後的磁碟類型。
大多數單一伺服器專案都不需要 VPC。VPS 隨附的私有網路功能,已能為少量機器提供相同用途。
FAQ
VPS 與 VM 是同一回事嗎?
VPS 是由他人提供給你的 VM。所有建置在 KVM、Xen 或 VMware 上的 VPS 都是虛擬機器,但不是所有虛擬機器都是 VPS,因為在你筆電上透過 VirtualBox 執行的 VM 並不是任何人的產品。部分標示為 VPS 的低價方案其實是容器,而不是完整的 VM,因此在依賴核心存取權之前,請先透過 systemd-detect-virt 確認。
我可以在 VPC 內放置 VPS 嗎?
通常不行,因為 VPC 是單一雲端供應商提供的網路架構,只能容納在同一帳戶中建立的資源。獨立供應商提供的 VPS 位於該供應商的網路上。如果需要在兩者之間建立私有連線,應改為建立 VPN 隧道,讓 VPS 透過隧道連線至私有子網路。
為什麼我的雲端帳單比同等級的 VPS 高?
執行個體價格只是其中一部分。計量制雲端服務通常會另外計費儲存空間、快照、輸出流量、負載平衡器與 NAT gateway;光是 NAT gateway 每月的費用,就可能高於一台小型 VPS。固定價格的 VPS 會將磁碟與流量額度合併計入同一個價格,因此相同的工作負載通常看起來較便宜。
如何確認伺服器是否具備真正的核心存取權?
執行 systemd-detect-virt 並查看結果。kvm、xen 或 vmware 表示你擁有自己的核心,且 modprobe 可正常運作。lxc、lxc-libvirt 或 openvz 表示你與主機共用核心;需要載入模組或寫入 /proc/sys 的命令會因 Operation not supported 而失敗。另一項確認方式是 uname -r;在容器方案中,它通常會回報你的發行版從未發布過的核心版本。