VPS、VM 和 VPC 有什么区别?一文看懂
VM 是虚拟化技术,VPS 是出租给您的虚拟机产品,VPC 则是云账户中的私有网络。本文解释三者的边界,以及 Docker、VPN 或自定义内核该如何选择。
VPS、VM 和 VPC:一段话说明
VM(虚拟机)是由软件构成的计算机:虚拟机监控程序将一台物理服务器划分为多个相互独立的机器,每台机器都运行自己的内核。VPS(虚拟专用服务器)是其中一台作为产品出租给您的虚拟机,包含操作系统、root 访问权限和月租价格。VPC(虚拟私有云)根本不是服务器,而是您在云账户中定义的私有网络,您可以将资源放入其中。VM 是技术,VPS 是产品,VPC 是围绕产品的网络。
其中两个词描述的是机器,第三个描述的是网络。几乎所有混淆都源于这种差异,因为人们会把它们当作货架上的三个产品来比较。
什么是 VM
虚拟机监控程序是模拟硬件的层。它为每个客户机提供虚拟 CPU、一块内存、虚拟磁盘和虚拟网卡,并阻止客户机相互查看。KVM、Xen、Hyper-V 和 VMware ESXi 是服务器上常用的虚拟机监控程序。现代虚拟机监控程序依赖 CPU 虚拟化扩展(Intel VT-x、AMD-V),因此客户机指令可以直接在真实 CPU 上运行,速度接近原生性能,而不必通过解释执行。
对于系统管理员来说,关键在于内核。VM 会启动自己的内核,因此您可以选择发行版、加载内核模块,并设置只对本机生效的 sysctl 值。这不同于容器(LXC、Docker)。容器共享主机内核,只能获得独立的进程和文件视图。
在任何 Linux 主机上运行一条命令即可查看结果。
systemd-detect-virtkvm 表示您位于 KVM 虚拟机监控程序上的虚拟机中。lxc 或 openvz 表示您位于使用他人内核的容器中。none 表示您使用的是自己的物理服务器。如果缺少该命令,lscpu | grep -i hypervisor 会通过 CPU flags 显示相同信息。
VPS 是什么
VPS 是围绕 VM 提供的商业化服务。底层技术是虚拟化,而 “VPS” 这个名称还包含了使其可以销售的组成部分:可重新安装的 OS 镜像、IP 地址、带宽额度、控制面板、月租价格,以及主机故障时可以联系的服务商。“Private” 用于将其与共享主机区分开来;在共享主机中,数百个站点共享同一个操作系统和同一套 PHP 配置。
由于 VPS 是产品名称,而不是技术术语,因此它不一定表示完整的 VM。一些低价套餐也会用同一个名称销售容器。第一次需要使用内核时,这种差异就会显现出来。在基于容器的套餐中,sudo modprobe wireguard 会因 RTNETLINK answers: Operation not supported 或 modprobe: FATAL: Module wireguard not found 而失败,因为使用的是主机的内核,您无权更改它。在 KVM 套餐中,模块可以加载,隧道也可以建立。如果您计划运行 Docker、VPN、自定义内核,或在服务器内部运行自己的虚拟机,请在购买前确认虚拟化类型。在 VPS 中运行虚拟机需要主机启用 KVM 和嵌套虚拟化,而符合这些条件的套餐就更少了。
VPC 是什么
VPC 是云服务提供商内部的软件定义网络。您为它指定一个 CIDR 表示法的地址范围,例如 10.0.0.0/16,然后从中划分子网、关联路由表,并为其中的资源配置防火墙规则(安全组)。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 隔离计算资源:虚拟机监控程序分配并隔离 CPU 时间和内存,因此其他虚拟机无法读取您的 RAM。这种隔离对磁盘和网络的保护较弱。同一主机上的繁忙邻居仍可能降低您的性能。基于容器的 VPS 共享同一个内核,因此内核级漏洞会成为共同风险。VPC 完全不隔离计算资源,只负责控制网络。
定价模型
VPS 通常按固定机器收取固定月费。您可以在月初前知道账单金额,磁盘和流量额度也包含在月费中。对于小型工作负载,这种可预测性是人们选择 VPS 而不是云实例的主要原因。
云 VM 按用量计费。实例按小时或按秒计费,磁盘、快照、负载均衡器和出站流量分别计费。VPC 本身通常免费,但附加到 VPC 的托管组件并不免费:允许私有实例访问互联网的 NAT 网关会按小时和每 GB 计费,跨可用区流量也会计费。截至 2026 年 7 月,主要云服务商仍会自动将每个新实例放入默认 VPC,因此无论您是否主动配置,实例都会使用 VPC。
实际需要哪一种
- 只需要一台用于网站、应用、游戏服务器或 VPN 的服务器:选择 VPS。新 VPS 上的前十分钟比套餐名称更重要。
- 需要让多台服务器通过私有地址互相访问:选择 VPC,或 VPS 提供商以其他名称提供的私有网络功能。
- 工作负载必须能够承受整个数据中心不可用:选择具有多个可用区的云平台,也就是在 VPC 内运行 VM。
- 需要完全控制内核,或需要在其上运行自己的 hypervisor:选择基于 KVM 的 VPS 或独立服务器;比较套餐时,还应检查套餐所使用的磁盘类型。
大多数单服务器项目都不需要 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 网关分别计费;仅 NAT 网关每月的费用就可能高于一台小型 VPS。固定价格的 VPS 会将磁盘和流量额度合并为一个价格,因此相同的工作负载通常看起来更便宜。
如何确认服务器是否拥有真正的内核访问权限?
运行 systemd-detect-virt 并读取结果。kvm、xen 或 vmware 表示您拥有自己的内核,modprobe 可以正常工作。lxc、lxc-libvirt 或 openvz 表示您与其他实例共享宿主机内核;加载模块或写入 /proc/sys 的命令会失败,并显示 Operation not supported。还可以通过 uname -r 进行二次确认。在容器方案中,该命令通常会报告一个您的发行版从未发布过的内核版本。