很多人第一次用华为云都会卡在同一个问题上:三台机器建好了,两台能互相 ping 通,第三台怎么都 ping 不通——机器没坏、网也没断,是 VPC 把它们隔开了。这篇用「两个 VPC、三个子网、三台 ECS」的最小拓扑走一遍:先讲清 VPC 到底由什么组成,再动手建网,最后用三条 ping 验证「同 VPC 通、跨 VPC 不通、安全组能掐断通信」,顺手把安全组和网络 ACL 这两层防护的边界划清楚。
本文概要:
| 项目 | 内容 |
|---|---|
| 文章主题 | 华为云 VPC 的概念与组成、子网/路由表/安全组的分工,以及同 VPC 互通与跨 VPC 隔离的实测验证 |
| 所属类别 | 云计算 → 华为云 → 网络类服务(VPC 与访问控制) |
| 知识关键字 | VPC·子网·路由表·安全组·网络 ACL·虚拟 IP·弹性网卡·默认不通·ping |
主线是「先认识容器、再装进机器、最后验证边界」:一到四章把 VPC 的组成和九个相关名词摆清楚,第五章建网建机器,六到八章做三次连通性实验,九、十章是命令表和排错顺序。看完你应该能回答那句最常被追问的话:为什么同一个 VPC 里的两台机器天生能通,而不同 VPC 的两台机器天生不通?
一、VPC 是什么:用隧道隔出来的私有网络
虚拟私有云(Virtual Private Cloud,VPC)为云服务器、云容器、云数据库等资源构建隔离的、用户自主配置和管理的虚拟网络环境。官方的定义里有两个关键词值得拆开看:
- 隔离:不同 VPC 之间默认完全不通,哪怕它们用的是同一个网段。底层靠隧道网络技术把不同租户的流量分开,你在自己的 VPC 里怎么划网段,都不会影响别人。
- 自主配置:网段、子网、路由、访问规则都由你自己定。云平台只提供「一层空的网络」,里面怎么摆是你的自由。
官方把 VPC 的优势归纳成四条,这四条几乎每次考试都问:
| 优势 | 具体表现 | 实际含义 |
|---|---|---|
| 安全可靠 | 100% 逻辑隔离 + 多重安全防护 | 你的 VPC 和别人天然不通;内部再用安全组、网络 ACL 层层收口 |
| 灵活配置 | 自定义虚拟私有网络,支持跨可用区部署 ECS | 网段自己划,机器可以分散到同区域不同机房 |
| 高速访问 | 全动态 BGP 协议接入多个运营商,寻路协议实时自动故障切换 | 出公网走最优路径,某条链路故障自动切走 |
| 互联互通 | 多种方式连接公网;靠对等连接用私有 IP 在两个 VPC 间通信 | 既能上公网,也能和别的 VPC、本地机房打通 |
⚠️注意:VPC 是区域级资源。在华东-上海一建的 VPC,切到华北-北京四的控制台里根本看不到——这不是没建成,是区域隔离。跨区域的 VPC 想互通,不能靠对等连接,只能走 VPN 或云连接。
二、VPC 由什么组成:网段、路由表、子网
每个 VPC 由三样东西构成,缺一样都不成立:
| 组成 | 是什么 | 关键约束 |
|---|---|---|
| 私网网段 | 整个 VPC 的地址空间,如192.168.0.0/16 | 创建后不能改,改网段等于重建 |
| 路由表 | 一组路由规则,控制子网出流量往哪走 | 每个子网必须关联一个,一个子网同时只能关联一个 |
| 子网 | VPC 内的 IP 地址块,云资源必须放在子网里 | 同一 VPC 内子网网段不能重复;子网建好后网段不能改 |
三者的关系是层层收窄:VPC 给一个大网段,子网从里面切一块出来,机器再从子网里拿一个 IP。
2.1 子网:机器真正待的地方
- 子网是 VPC 内的 IP 地址块,所有云资源都必须部署在子网内——没有子网,ECS 连「网络」那一栏都是空的。
- 同一 VPC 下,子网网段不能重复;子网创建成功后,网段无法修改。所以划子网要一次想清楚。
- 子网默认启用DHCP,机器启动后自动拿到 IP,不用手工配。
- 子网归属于某个可用区。可用区是同一地域内电力与网络互相独立的物理区域——把两台机器放不同可用区,就相当于放进了两个不同的机房。
2.2 路由表:决定流量出子网往哪走
路由表由一系列路由规则组成,控制 VPC 内子网的出流量走向。两条硬规则先记住:
- 每个子网都必须关联一个路由表;
- 一个子网一次只能关联一个路由表,但一个路由表可以关联多个子网。
这就解释了后面第五章的现象:同一个 VPC 里的subnet-01和subnet-02,默认都关联同一张默认路由表,互相知道对方网段,所以天生能通;而另一个 VPC 的subnet-03在另一张路由表里,压根没有通往192.168.0.0/16的路由,所以天生不通。
三、九个相关概念一次分清
VPC 控制台左侧那一长串菜单,初学时最容易糊成一团。下面这张表按「管什么」分类,先建立骨架:
| 概念 | 一句话定义 | 管哪一层 |
|---|---|---|
| 子网 | VPC 内的 IP 地址块,资源必须放在里面 | 地址分配 |
| 路由表 | 一组路由规则,决定出流量走向 | 路径 |
| 安全组 | 逻辑分组,为组内实例提供访问策略 | 实例级防护 |
| 网络 ACL | 对一个或多个子网的访问控制策略系统 | 子网级防护 |
| 对等连接 | 两个 VPC 之间的网络连接,用私有 IP 通信 | VPC 间互联 |
| 虚拟 IP | 未分配给真实网卡的 IP,可在多台机器间漂移 | 高可用 |
| 弹性网卡 | 虚拟网卡,可创建、附加、解绑 | 实例接入 |
| IP 地址组 | 一个或多个 IP 的集合,供安全组/ACL 引用 | 规则简化 |
| 弹性公网 IP | 独立的公网 IP 与出口带宽 | 出公网 |
几个容易混的点单独说:
- 安全组是逻辑上的分组,为具有相同安全保护需求并相互信任的云服务器、云容器、云数据库等实例提供访问策略。实例加入安全组后,就受这些规则保护。规则分入方向(外部访问实例)和出方向(实例访问外部)。
- 网络 ACL是对一个子网或多个子网的访问控制策略系统,是子网级别的安全层,通过与子网关联的出/入方向规则判断数据包能否流入/流出关联子网。
- 虚拟 IP(VIP)是一个不分配给真实网卡的 IP。机器除了私网 IP,还能再挂一个 VIP,用其中任意一个都能访问它——主备切换就是把 VIP 从主机器挪到备机器。它拥有和私网 IP 同样的接入能力,包括 VPC 内二三层通信、对等连接访问,以及 EIP、VPN、云专线接入。
- 弹性网卡分三种:随实例创建的是主弹性网卡;后来加挂、可解绑的是扩展弹性网卡;辅助弹性网卡是为了突破单实例网卡数量上限而衍生的资源,通过VLAN 子接口挂在弹性网卡上。
- IP 地址组就是一个 IP 集合,可关联到安全组、网络 ACL,省得在每条规则里重复填一串地址。
安全组与网络 ACL 的区别值得单独一张表——这是本节最容易被问混的地方:
四、VPC 与传统 IDC 的四维对比
为什么上云不自己在机房拉网线?官方给了四个维度的对比,背这四条比背定义有用:
| 对比项 | 虚拟私有云 | 传统 IDC |
|---|---|---|
| 部署周期 | 无需工程规划、布线,自主规划网段/子网/路由,分钟级可用 | 自行搭建网络并测试,周期长,需专业技术支持 |
| 总成本 | 多种计费方式,无前期投入与后期网络运维,降低 TCO | 机房、供电、施工、硬件物料都是固定重资产,还要养运维团队 |
| 灵活性 | 服务可自由搭配,带宽等资源随时动态扩展 | 部署要严格遵守前期网络规划,业务变了改不动 |
| 安全性 | VPC 逻辑隔离,叠加网络 ACL、安全组、DDoS 防护 | 网络难得到专业维护,安全性依赖自身团队 |
落到场景上就两类:云端专属网络(生产环境和测试环境用两个 VPC 严格隔离)和Web 应用托管(VPC 里放 ECS,用 EIP 或 NAT 网关连 Internet,前面再挂一个 ELB 分流量)。这三样东西怎么组合,是后面两篇的主题。
五、实操:两个 VPC、三个子网、三台 ECS
拓扑很小,但把关键点都覆盖了:一个 VPC 里放两个子网,另一个 VPC 里放一个子网,三个子网各一台机器。
| 资源 | 名称 | 网段 | 说明 |
|---|---|---|---|
| VPC | VPC-SH01 | 192.168.0.0/16 | 主 VPC,两个子网 |
| 子网 | subnet-01 | 192.168.0.0/24 | 放ecs-sh-01 |
| 子网 | subnet-02 | 192.168.1.0/24 | 放ecs-sh-02 |
| VPC | VPC-SH02 | 10.0.0.0/16 | 另一个 VPC,验证隔离 |
| 子网 | subnet-03 | 10.0.0.0/24 | 放ecs-sh-03 |
5.1 建两个 VPC
- 控制台右上角把区域切到华东-上海一,进「服务列表 → 网络 → 虚拟私有云 VPC」。
- 点「创建虚拟私有云」,按上表填 VPC 名称与网段;创建 VPC 时同时会建一个默认子网,第一个子网就在这里填。
VPC-SH01建完再进它的详情页,点「创建子网」补第二个子网subnet-02(192.168.1.0/24)。- 回列表,用同样方式建
VPC-SH02与subnet-03。
⚠️注意:两个 VPC 的网段不能重叠。这不只是本实验的要求——以后要建对等连接、要接本地机房,网段重叠的 VPC 根本连不起来,只能重建。规划时避开家里和办公室最常用的
192.168.0.0/16、10.0.0.0/8里已被占用的段。
5.2 建三台 ECS
三台机器参数完全一致,只有「网络」不同。关键参数如下:
| 参数 | 取值 |
|---|---|
| 计费模式 | 按需计费 |
| 区域 / 可用区 | 华东-上海一 / 随机分配 |
| 规格 | s6.small.1(1 vCPU / 1 GiB) |
| 镜像 | 公共镜像 CentOS 7.6 64bit |
| 系统盘 | 高 IO 40 GiB |
| 安全组 | 默认安全组default |
| 弹性公网 IP | 暂不购买(这一篇还不需要出公网) |
| 登录凭证 | 密码 |
三台分别选:ecs-sh-01→VPC-SH01/subnet-01,ecs-sh-02→VPC-SH01/subnet-02,ecs-sh-03→VPC-SH02/subnet-03。
建完把三台的私有 IP记下来,后面每一步 ping 都用它:
| 机器 | 所在 VPC / 子网 | 私有 IP(示例) |
|---|---|---|
ecs-sh-01 | VPC-SH01 / subnet-01 | 192.168.0.169 |
ecs-sh-02 | VPC-SH01 / subnet-02 | 192.168.1.13 |
ecs-sh-03 | VPC-SH02 / subnet-03 | 10.0.0.38 |
⚠️注意:云上的私有 IP 是动态分配的,不是按创建顺序排的。每次重建机器 IP 都可能变,所以「用 IP 判断机器对不对」这件事在云上不成立,要对机器名。实验里把 IP 记在表格里,就是为了避免 ping 错对象还以为网络有问题。
六、验证一:同 VPC 通,跨 VPC 不通
6.1 同 VPC 内两台机器:天生通
远程登录ecs-sh-02(Linux 默认用户名root),直接 pingecs-sh-01的私有 IP:
[root@ecs-sh-02 ~]# ping 192.168.0.169PING192.168.0.169(192.168.0.169)56(84)bytes of data.64bytes from192.168.0.169:icmp_seq=1ttl=64time=0.869ms64bytes from192.168.0.169:icmp_seq=2ttl=64time=0.343ms64bytes from192.168.0.169:icmp_seq=3ttl=64time=0.293ms ^C ---192.168.0.169pingstatistics ---6packets transmitted,6received,0% packet loss,time5000ms rtt min/avg/max/mdev=0.171/0.340/0.869/0.245 ms# 中文:6 个包全通,0% 丢包,时延 0.1~0.9 ms——同 VPC 内两台机器默认互通注意ttl=64:一路没经过任何路由器,说明流量在同一个 VPC 的虚拟交换里直接过去了。这个数字后面会变成判断依据。
6.2 跨 VPC:一条 ping 就断
在ecs-sh-02上再 ping 另一个 VPC 的ecs-sh-03:
[root@ecs-sh-02 ~]# ping 10.0.0.38PING10.0.0.38(10.0.0.38)56(84)bytes of data. ^C ---10.0.0.38pingstatistics ---3packets transmitted,0received,100% packet loss,time2003ms# 中文:3 个包全丢,100% 丢包——不同 VPC 默认不通,这是隔离生效,不是故障结论只有一句:同一个 VPC 内的两台 ECS 默认互通;不同 VPC 内的 ECS 默认不通。不通是设计如此,要让它们通,得建对等连接(同区域)或 VPN(跨区域)——那是第三篇的内容。
七、验证二:安全组决定谁能进这台机器
上一节证明「同 VPC 天生通」,但这句话有个前提:安全组没拦。把规则清空,同样的两台机器立刻断。
- 进「网络控制台 → 访问控制 → 安全组」,点开两台机器所在的安全组(默认
default)。 - 选「入方向规则」,把里面的规则全部删除。
- 回 ECS 控制台,用 VNC 登录
ecs-sh-02,再 ping 一次ecs-sh-01:不通。 - 回安全组,点「一键放通」把常用端口(22、80、443、ICMP 等)恢复。
再 ping 一次,通了。这一删一加说明:安全组的入方向规则就是「谁能进来」的白名单,删掉规则等于把这台机器对外关死,连 ICMP 都进不来。
默认安全组的初始规则是这样的(这也是「为什么刚建的机器互相能通」的真正原因):
| 方向 | 默认规则 | 效果 |
|---|---|---|
| 入方向 | 只允许同一安全组内的实例互通 | 同组机器互相能 ping,组外来的一律进不去 |
| 出方向 | 全部放行 | 机器想访问谁都可以出去 |
所以「同 VPC 默认通」这句话要补完整:同 VPC + 同一安全组 → 通;同 VPC 但分属不同安全组,且没互相放行 → 一样不通。这也解释了一个常见现象:机器建好了却 SSH 不上——不是网络问题,是新安全组没放通 22 端口。
⚠️注意:安全组是有状态的。入方向放行了一个连接,这条连接的回包会自动放行,不需要再单独配出方向规则。所以「只配了入方向,怎么回包能出去」不是漏洞,是设计。
八、验证三:网络 ACL 在子网边界再拦一道
安全组管的是单台机器。如果要整个子网统一封禁,就该网络 ACL 上场了。它的行为和预期不太一样,值得实测一次:
- 在「网络控制台 → 访问控制 → 网络 ACL」新建一个 ACL,关联到
subnet-02(ecs-sh-02所在子网),先不加任何规则。 - 此时
ecs-sh-01pingecs-sh-02、ecs-sh-02pingecs-sh-01,两个方向都不通——ACL 关联子网后默认拒绝所有出入子网的流量,直到加上放通规则。 - 在 ACL 的入方向加一条:允许源
192.168.0.0/24、协议 ICMP。 - 再测:
ecs-sh-01→ecs-sh-02通了;但ecs-sh-02→ecs-sh-01仍然不通。
第 4 步的结果是最容易被问倒的地方。原因是 ACL 的规则分方向生效:
ecs-sh-01访问ecs-sh-02:流量进入subnet-02,走 ACL 的入方向规则,我们配了,所以通。ecs-sh-02访问ecs-sh-01:流量离开subnet-02,走 ACL 的出方向规则,我们没配,所以不通。
也就是说,ACL 虽然是有状态的(响应流量不受规则限制),但主动发起的方向必须自己有规则。想让反方向也通,得在出方向补一条「允许目的192.168.0.0/24、协议 ICMP」。
⚠️注意:安全组和网络 ACL 是两层串联的关系——流量要先进 ACL(子网边界),再过安全组(网卡)。任何一层拒绝,包就到不了实例。所以「连不上」永远有两种可能,别只盯着安全组。
九、命令速查:ping 与 ssh
这一篇的验证全靠两条命令,参数逐个列清楚。
9.1 ping 用法速查表
| 参数 | 含义 | 英文原意 |
|---|---|---|
ping | 用 ICMP 回显请求测连通性,看丢包率与时延 | — |
-c 数量 | 发多少个包就停,不加会一直发 | count |
-i 秒 | 发包间隔,默认 1 秒,普通用户最小 0.2 | interval |
-W 秒 | 每个包等回应的超时时间 | Wait |
-s 字节 | 指定包大小,用来测 MTU 或大包丢不丢 | size |
-t 跳数 | 设 TTL 上限,配合-c可当简易 traceroute | ttl |
-4/-6 | 强制走 IPv4 / IPv6 | — |
-I 网卡 | 指定从哪块网卡发出,多网卡机器常用 | Interface |
-f | 洪水模式,只显示通与不通,需要 root | flood |
-q | 只打印汇总,不打印每个包 | quiet |
最简演示:
[root@ecs-sh-02 ~]# ping -c 3 -i 0.2 192.168.0.169# 中文:发 3 个包、间隔 0.2 秒,看丢包率和平均时延读结果只看三处:packet loss是不是 0%、ttl是 64 还是 63、rtt avg是零点几毫秒还是几十毫秒。同 VPC 内是ttl=64、亚毫秒;过了对等连接或 VPN 是ttl=63、毫秒级;跨地域 VPN 通常是二三十毫秒。
9.2 ssh 用法速查表
| 参数 | 含义 | 英文原意 |
|---|---|---|
ssh 用户@地址 | 以指定用户登录远程主机 | secureshell |
-i 私钥文件 | 用私钥认证,替代密码 | identity file |
-p 端口 | 指定端口,默认 22 | port |
-o 选项 | 临时设置一个配置项,如-o StrictHostKeyChecking=no | option |
-v | 打印握手过程,排错时看卡在哪一步 | verbose |
-L 本地:目标:端口 | 本地端口转发 | Local forward |
-N | 只建隧道不执行命令 | No command |
-T | 不分配终端,跑批量命令时用 | noTty |
最简演示:
[root@ecs-sh-02 ~]# ssh -i ~/.ssh/key.pem root@192.168.0.169# 中文:私钥登录另一台机器,不需要输密码⚠️注意:绑了 EIP 之后才发现 SSH 不上,八成是安全组没放通 22。用 VNC 登录改规则,别在公网反复试密码——试多了账号会被锁。
十、排错速查:连不上按这个顺序查
| 现象 | 先查什么 | 判据 |
|---|---|---|
| 两台机器互相 ping 不通 | 是不是同一个 VPC | 跨 VPC 要建对等连接,光建 VPC 不会通 |
| 同 VPC 但不通 | 安全组入方向是否放通 ICMP | 默认只放通同组内互通,不同组要手工加规则 |
| 放通后仍不通 | 子网是否关联了网络 ACL | ACL 默认全拒,入方向/出方向都要放通 |
| 能 ping 通但 SSH 不上 | 安全组是否放通 22 | ping 走 ICMP,SSH 走 TCP 22,是两条规则 |
| 换了台机器 IP 对不上 | 私有 IP 是否被重新分配 | 云上 IP 动态分配,用机器名核对 |
| 切区域后资源全消失 | 是否切错了区域 | VPC 是区域级资源,跨区域不可见 |
附:命令英文全称速查表
| 命令 / 缩写 | 英文全称 / 原意 | 作用 |
|---|---|---|
ping | Packet InterNet Groper | 用 ICMP 回显请求测连通性 |
ssh | secureshell | 加密远程登录 |
ICMP | Internet Control Message Protocol | 互联网控制报文协议,ping 的底层协议 |
VPC | Virtual Private Cloud | 虚拟私有云 |
ACL | Access Control List | 访问控制列表 |
DHCP | Dynamic Host Configuration Protocol | 动态主机配置协议,子网默认启用 |
VIP | Virtual IP Address | 虚拟 IP 地址 |
ENI | Elastic Network Interface | 弹性网卡 |
AZ | Availability Zone | 可用区 |
TTL | Time To Live | 生存时间,每过一跳减 1 |
RTT | Round Trip Time | 往返时延 |
TCO | Total Cost of Ownership | 总拥有成本 |
IDC | Internet Data Center | 互联网数据中心 |
📚 参考资料(官方文档 · 中英双语)
- 华为云 VPC 产品介绍与产品架构:https://support.huaweicloud.com/productdesc-vpc/zh-cn_topic_0017946550.html
- 华为云 VPC 访问控制概述(安全组与网络 ACL 对比表):https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0052003963.html
- 网络 ACL 工作原理:https://support.huaweicloud.com/usermanual-vpc/vpc_acl_0001.html
- 虚拟 IP 地址(VIP)概述:https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0118842223.html
- What Is a VPC?(英文版):https://support.huaweicloud.com/intl/en-us/productdesc-vpc/en-us_topic_0017946550.html
总结:VPC 就是「一个网段 + 一张路由表 + 若干子网」,子网决定机器住在哪,路由表决定流量往哪走,安全组和网络 ACL 决定谁能进来。同 VPC 天生通、跨 VPC 天生不通——这两句不是口诀,是这套结构必然的结果。下一篇讲另外两件事:机器怎么出公网(EIP),以及一堆机器怎么分摊流量(ELB)。