SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-10-28

VPS、VM、VPC 有什麼不同?一次搞懂三者差異

VM 是虛擬化技術,VPS 是租用的伺服器產品,VPC 則是雲端內的私有網路。本文說明三者的核心差異,以及如何用 systemd-detect-virt 判斷環境。

VPS、VM 與 VPC 概述

VM(虛擬機器)是由軟體構成的電腦:hypervisor 將一台實體伺服器分割成數台相互獨立的機器,每台都執行自己的 kernel。VPS(虛擬私有伺服器)則是以產品形式出租給你的伺服器,通常包含作業系統、root 存取權與月租費。大多數 VPS 方案都是虛擬機器,但有些主機商會以相同名稱銷售共用 host kernel 的容器。VPC(虛擬私有雲)根本不是伺服器,而是你在雲端帳戶內定義的私有網路,並將資源放入其中。VM 是常見的技術。VPS 是產品。VPC 則是包圍該產品的網路。

其中兩個詞描述的是機器,第三個描述的是網路。幾乎所有混淆都源自這種不一致,因為人們常把它們當成同一貨架上的三種產品來比較。

VM 是什麼

Hypervisor 是模擬硬體的層。它會為每個 guest 提供虛擬 CPU、記憶體區塊、虛擬磁碟和虛擬網路卡,並阻止各 guest 互相查看。伺服器上常見的 hypervisor 包括 KVM、Xen、Hyper-V 和 VMware ESXi。現代 hypervisor 會使用 CPU 虛擬化擴充功能(Intel VT-x、AMD-V),讓 guest 指令直接在實體 CPU 上執行,速度接近原生執行,而不必透過解譯。

對 sysadmin 而言,關鍵在於 kernel。VM 會啟動自己的 kernel,因此你可以選擇 distribution、載入 kernel module,並設定只套用於自己的 sysctl 值。這與 container(LXC、Docker)不同。container 共用 host kernel,只能取得自身程序和檔案的視圖。

你可以在任何 Linux 主機上,透過一個 command 查看結果。

systemd-detect-virt

kvm 表示你是在 KVM hypervisor 上執行的 virtual machine。lxc 或 openvz 表示你位於使用他人 kernel 的 container 中。none 表示未偵測到受支援的虛擬化環境。如果找不到該 command,lscpu | grep -i hypervisor 會顯示 hypervisor 資訊,但無法識別 container。

VPS 是什麼

VPS 是包裝成商業產品的隔離伺服器,最常見的形式是 VM。底層技術是虛擬化,而「VPS」這個名稱還包含了使其成為可銷售產品的項目:可重新安裝的 OS 映像檔、IP 位址、頻寬額度、控制面板、每月費用,以及主機故障時可聯絡的支援人員。「Private」用來與 shared hosting 區分;在 shared hosting 中,數百個網站共用同一個作業系統與同一份 PHP 設定。

VPS 是產品名稱,不是技術術語,因此不一定代表完整的 VM。有些平價方案以相同名稱銷售 container;許多方案採用的 container 平台 OpenVZ,也將其 container 稱為「also known as virtual private servers」。當你第一次需要使用 kernel 時,就會看出差異。在以 container 為基礎的方案中,kernel 屬於主機,你無法變更。若 sudo modprobe wireguard 無法在 container 的 module 目錄中找到模組,即使主機已載入該模組,仍會失敗;載入缺少的模組也需要變更主機 kernel 的權限。若主機 kernel 不支援 WireGuard,建立介面(ip link add dev wg0 type wireguard)會以 RTNETLINK answers: Operation not supported 失敗。若已安裝 userspace 實作,wg-quick 會改用該實作(預設為 wireguard-go),並輸出「Missing WireGuard kernel module. Falling back to slow userspace implementation.」。這項 fallback 仍需要 container 獲准使用 TUN 裝置,但並非所有主機都允許。若沒有 userspace binary,wg-quick 會停在該錯誤訊息。在 KVM 方案中,kernel 由你管理:你可以安裝 WireGuard,在尚未載入模組時載入模組、設定介面,然後建立 tunnel。如果你計畫在伺服器內執行 Docker、VPN、自訂 kernel 或自行建立的 VM,購買前請確認虛擬化類型。在 VPS 內執行 虛擬機器 需要主機啟用 KVM 的 nested virtualisation,而符合條件的方案會更少。

VPC 是什麼

VPC 是雲端服務供應商內部的軟體定義網路。在大多數雲端平台上,您會以 CIDR 表示法為 VPC 指定位址範圍,例如 10.0.0.0/16,再從中劃分子網路(Google Cloud 不使用整個網路的位址範圍,而是為每個區域子網路指定個別範圍)。您可以附加路由表,並在內部資源前方設定防火牆規則(security groups)。VPC 不具備 CPU、記憶體或磁碟,也沒有可登入的環境。刪除 VPC 中的所有伺服器後,VPC 仍會留在那裡,維持空白狀態,通常也不會產生費用。

VPC 提供的是私有定址。同一個 VPC 中的兩台伺服器,可透過供應商的內部網路,使用 10.0.1.15 這類位址互相通訊,因此流量不會經過公用網際網路,也不會按網際網路輸出流量計費。資料庫接著可以只監聽其私有位址,完全不對外公開任何連接埠。

ip -4 addr show

10.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 中,通往網際網路的路由通常已經存在。VPC 提供的隔離能力,是讓資源完全不配置公用位址,並透過規則指定哪些子網路可以彼此通訊。

這 3 個詞也代表不同類型的隔離。VM 隔離的是運算資源:hypervisor 會分隔 CPU 使用時間與記憶體,因此其他 guest 無法讀取你的 RAM。對磁碟與網路而言,這種隔離較弱;同一台主機上忙碌的鄰近租戶仍可能降低你的效能。以 container 為基礎的 VPS 共用同一個 kernel,因此 kernel 層級的錯誤會成為共用風險。VPC 完全不隔離運算資源,只會控制網路配置。

定價的基本概念

VPS 通常以固定的月費出售固定規格的機器。您在月份開始前就知道帳單金額,磁碟與流量額度也包含在月費中。這種可預測性,是小型工作負載選擇 VPS 而非 cloud instance 的主要原因。

cloud VM 採用用量計費。instance 按小時或按秒計費,磁碟、snapshot、load balancer 與對外流量則分別計費。VPC 本身通常免費,但附加的 managed 元件並不免費:讓 private instance 存取網際網路的 NAT gateway 會按小時計費,而其流量的計費方式取決於 provider。AWS 會針對 NAT gateway 處理的每個 gigabyte 收費;OVHcloud 則表示,其 Public Cloud Gateway 按小時及用量計費,且包含流量。在 AWS 中,跨越 availability zone 的流量也會計費;Azure 則不會對同一個 region 內各 zone 之間的流量收費。截至 October 27, 2026,AWS VPC guide 表示每個 region 都有一個 default VPC;AWS VPC FAQ 則表示,在 March 18, 2013 之前建立的帳戶,可以在已啟用、且過去未啟動 EC2 instance 或配置 ELB、RDS、ElastiCache 或 Redshift 資源的 region 中使用 default VPC。刪除的 default VPC 可以重新建立,但無法還原。Google Cloud 會為每個新 project 建立 default network,除非 administrator 將其停用;如果您未選擇現有的 virtual network,Azure 會在建立新的 VM 時一併建立 virtual network。無論是哪種情況,您的 cloud VM 都會位於其中一個網路內,不論您是否主動要求。

實際上需要哪一種

  • 用於網站、應用程式、遊戲伺服器或 VPN 的單一伺服器:VPS。新 VPS 上線後的 前 10 分鐘,比方案名稱更重要。
  • 多台伺服器必須透過私有位址互相連線:VPC,或 VPS 供應商以其他名稱提供的私有網路功能。
  • 必須在整個資料中心故障時仍持續運作的工作負載:具備多個區域的雲端環境,也就是在 VPC 內執行 VM。
  • 需要完整控制 kernel,或要在其上執行自己的 hypervisor:採用 KVM based VPS(若要執行 hypervisor,請啟用 nested virtualisation),或使用 dedicated server;比較方案時,也要查看 方案採用的磁碟類型。

大多數單一伺服器專案都不需要 VPC。VPS 隨附的私有網路功能,已足以讓少量機器完成相同工作。

FAQ

VPS 是否與 VM 相同?

通常相同,但不一定。在 KVM、Xen 或 VMware 上建立的每個 VPS 都是虛擬機器,但不是每個虛擬機器都是 VPS,因為在你筆電上的 VirtualBox 中執行的 VM 並不屬於任何人的產品。反過來,也不是每個 VPS 都是 VM:使用 OpenVZ 或 LXC 的方案是共用主機 kernel 的容器,而 OpenVZ 本身也將其容器稱為虛擬私有伺服器。依賴 kernel 存取權之前,請先透過 systemd-detect-virt 確認。

可以在 VPC 中放置 VPS 嗎?

通常不行,因為 VPC 是單一 cloud provider 所提供的架構;AWS 也支援在相同組織內跨帳戶共用其子網路。獨立 provider 提供的 VPS 位於該 provider 的網路上。如果需要在兩者之間建立私有連線,應改為建立 VPN tunnel,讓 VPS 透過 tunnel 存取私有子網路。

為什麼我的 cloud 帳單比同等 VPS 高?

instance 價格只是其中一部分。計費式 cloud 會將儲存空間、snapshots、對外流量、load balancers 和 NAT gateways 分開計費,而單獨的 NAT gateway 每月費用可能就高於小型 VPS。固定價格的 VPS 會將磁碟與流量額度合併計入同一個價格,因此相同工作負載通常看起來會更便宜。

如何確認伺服器是否具備實際的 kernel 存取權?

執行 systemd-detect-virt 並讀取結果。kvm、xen 或 vmware(較新的 EC2 instances 則為 amazon)表示你擁有自己的 kernel,且 modprobe 可以將 modules 載入其中。lxc、lxc-libvirt 或 openvz 表示你與主機共用 kernel;載入 modules 需要主機 kernel 權限,但在主機允許的情況下,/proc/sys 底下的 namespaced 設定(包括網路設定)仍可進行配置。第二種確認方式是 uname -r;在 container 方案中,它通常會回報你的 distribution 從未發布過的 kernel 版本。

這篇文章對您有幫助嗎?

#vps#vm#vpc#cloud#basics