3. 生产网络基础与故障排查

在 OCI 中,生产环境的网络连通性由一组彼此协作的对象共同决定。很多“实例 ping 不通”“数据库连不上”“公网访问失败”的问题,并不是单一组件故障,而是某个网络对象配置与预期不符。理解这些对象的职责边界和组合关系,是快速定位问题的前提。

OCI 网络的基本层次可以这样理解:VCN 是整体地址空间容器,子网 是 VCN 内的地址段划分,路由表 决定流量“往哪里走”,安全列表 和 NSG 决定流量“是否被允许”,网关 决定流量“能否进出 VCN”。四类对象分别回答不同问题,排查时必须按顺序逐层确认。

OCI 生产网络对象与连通性判断链 VCN 10.0.0.0/16 公有子网 10.0.1.0/24 Web 实例 Bastion 主机 安全列表:允许 0.0.0.0/0 → TCP 443 NSG-web:允许 10.0.2.0/24 → TCP 8080 路由表:0.0.0.0/0 → Internet Gateway 私有子网 10.0.2.0/24 应用服务器 数据库实例 安全列表:允许 10.0.1.0/24 → TCP 1521 NSG-db:仅允许 NSG-app 成员 → TCP 1521 路由表:0.0.0.0/0 → NAT Gateway Internet Gateway 公网双向通信 NAT Gateway 私有子网出公网 Service Gateway 访问 OCI 对象存储 DRG 本地/跨区互联 Internet

路由表:决定流量方向

路由表是子网级别的属性,每个子网关联一张路由表。路由表由若干条路由规则组成,每条规则包含目标 CIDR 和下一跳目标。OCI 路由表只做“目标网段 → 下一跳”的匹配,不做安全判断。常见下一跳类型包括 Internet Gateway、NAT Gateway、Service Gateway、DRG、Local Peering Gateway 等。

例如,公有子网要访问公网,路由表中必须有 0.0.0.0/0 → Internet Gateway;私有子网要主动访问公网下载补丁,则需要 0.0.0.0/0 → NAT Gateway。如果路由表缺少对应条目,即使安全规则全部放通,流量也无法离开子网。排查时可用以下命令确认实例所在子网关联的路由表:

oci network subnet get --subnet-id ocid1.subnet.oc1..xxxx \
  --query 'data."route-table-id"' --raw-output

oci network route-table get --rt-id ocid1.routetable.oc1..xxxx \
  --query 'data."route-rules"[].{dest:"destination",next:"network-entity-id"}'

安全列表与 NSG:决定流量是否被允许

安全列表作用于子网内所有实例,规则为有状态(返回流量自动放通)。NSG 作用于一组指定的 VNIC,规则同样有状态,但粒度更细,适合按应用角色划分。两者同时生效时,流量必须同时满足安全列表和 NSG 的允许规则,任一拒绝即不通。

生产环境推荐做法:安全列表保留最小必要规则,NSG 按应用层精细控制。例如数据库子网的安全列表只允许应用子网网段访问 1521,NSG-db 再限定只有 NSG-app 成员可访问。这样即使安全列表被误放宽,NSG 仍能兜底。

安全列表和 NSG 都是“允许”模型,没有显式拒绝规则。默认情况下,如果没有匹配的允许规则,流量被丢弃。因此“规则写少了”比“规则写错了”更常见。

网关:决定流量能否进出 VCN

Internet Gateway 提供公网双向通信,仅公有子网应关联;NAT Gateway 只允许私有子网主动出公网,外部无法主动进入;Service Gateway 用于访问 OCI 内部服务(如 Object Storage),流量不出公网;DRG 用于 VCN 与本地数据中心或其他 VCN 互联。网关选错或未关联,是公网访问失败的高频原因。

连通性诊断命令与判断顺序

当出现连通性问题时,建议按“路由 → 安全 → 网关 → 实例内部”的顺序排查,避免盲目改规则。以下命令可在实例内部或跳板机上执行:

# 1. 查看网卡与 IP 配置
ip addr show
ip route show

# 2. 测试到目标地址的连通性
ping -c 4 10.0.2.10
nc -zv 10.0.2.10 1521

# 3. 查看 DNS 解析
dig +short db.internal.example.com

# 4. 跟踪路径,判断在哪一跳中断
traceroute -n 10.0.2.10

# 5. 查看本机监听端口
ss -tlnp | grep 1521

判断依据:若 ping 不通但 nc 通,说明 ICMP 被安全规则拦截而 TCP 正常;若 traceroute 在网关地址后中断,通常是路由表或网关问题;若本机 ss 无监听,则是应用未启动而非网络问题。OCI 还提供 Network Visualizer 和 VCN Flow Logs,可直观查看某条路径上各安全规则和路由的匹配结果,适合复杂场景快速定位。

修改安全列表或 NSG 后,已建立的连接可能因状态表刷新而短暂中断。生产环境建议在变更窗口操作,并保留回滚规则。

生产排查检查表

检查项确认内容常用命令/入口
子网路由表目标网段是否有匹配路由,下一跳是否正确oci network route-table get
安全列表入站/出站是否允许源/目标端口控制台子网详情 → Security Lists
NSGVNIC 是否加入正确 NSG,规则是否放通oci network nsg rules list
网关网关已创建且与路由表下一跳一致控制台 VCN → Gateways
实例内部IP、路由、监听端口、防火墙ip addr / ss -tlnp

掌握这套对象关系和排查顺序后,绝大多数生产网络连通性问题都可以在几分钟内缩小到具体对象,而不是反复重启实例或盲目放通所有端口。