3. 子网与网关配置

在 Oracle Cloud Infrastructure(OCI)中,VCN 只是地址空间的容器,真正决定“谁能进出、往哪里走、走哪条路”的,是子网与网关的组合。一个常见误区是:把子网建成“公有”或“私有”就以为流量控制完成了。实际上,子网的“公有/私有”属性只决定实例是否可拥有公网 IP,而流量能否到达公网、能否访问 OCI 服务、能否跨 VCN 通信,取决于路由表中指向了哪类网关,以及安全列表/NSG 是否放行。因此,配置的核心是“网关 + 路由表 + 安全规则”三件套的协同。

四类网关的定位与适用场景

Internet 网关(IGW)为 VCN 提供双向公网通道,是公有子网访问互联网、以及外部主动访问公网 IP 实例的必经出口。它是有状态的,且一个 VCN 只能有一个 IGW。适用于 Web 前端、跳板机、需要被外部访问的负载均衡等场景。

NAT 网关只允许私有子网内的实例主动发起到互联网的出站连接,外部无法借此主动连入。它同样有状态,一个 VCN 一个 NAT 网关。适用于数据库、应用服务器等需要打补丁、拉取镜像但不应暴露在公网的私有子网。

服务网关(Service Gateway)用于访问 OCI 内部服务(如 Object Storage、Autonomous Database),流量不经过互联网,走 OCI 骨干网。它支持“仅允许访问指定服务”的细粒度控制,是私有子网访问 OCI 服务最安全、最经济的方式。

动态路由网关(DRG)是 VCN 与外部网络之间的枢纽,用于 VCN 与本地数据中心(经 FastConnect/VPN)、其他 VCN、以及跨区域网络的互联。它承担的是“VCN 之外”的路由,而非简单的公网出口。

记忆要点:IGW 管“双向公网”,NAT 管“单向出公网”,Service Gateway 管“不出公网的 OCI 服务访问”,DRG 管“VCN 与外部网络的互联”。

路由表:流量走向的决策依据

每个子网关联一张路由表,路由表由若干条路由规则组成,每条规则包含“目标 CIDR”和“下一跳(目标网关)”。OCI 采用最长前缀匹配:当有多条规则匹配同一目标时,选择前缀最长(最具体)的那条。例如目标为 0.0.0.0/0 和 10.0.0.0/16 同时存在时,访问 10.0.0.5 会命中后者。

下面这张图展示了同一 VCN 内公有子网与私有子网的路由分流关系,以及各网关的流量方向差异:

VCN 10.0.0.0/16 公有子网 10.0.1.0/24 Web 实例(含公网IP) 路由:0.0.0.0/0 → IGW 私有子网 10.0.2.0/24 App / DB 实例 路由:0.0.0.0/0 → NAT 服务网关路由(两子网均可) 目标:all-region-services-in-oci → Service Gateway DRG 路由(跨 VCN / 本地数据中心) 目标:192.168.0.0/16 → DRG(经 VPN/FastConnect) Internet 网关 双向公网通道 NAT 网关 仅出站,外部不可入 服务网关 OCI 服务,不走公网 DRG VCN 与外部互联 Internet 本地数据中心

配置方法与关键参数

以控制台或 CLI 配置时,推荐按“先建网关、再改路由、后调安全”的顺序,避免中途断流。以下给出一个可参考的 CLI 片段(示例参数,需替换为实际值):

# 1. 创建 Internet 网关
oci network internet-gateway create \
  --compartment-id $CMP --vcn-id $VCN \
  --is-enabled true --display-name "igw-prod"

# 2. 创建 NAT 网关
oci network nat-gateway create \
  --compartment-id $CMP --vcn-id $VCN \
  --display-name "nat-prod"

# 3. 创建服务网关(需指定服务 CIDR 列表)
oci network service-gateway create \
  --compartment-id $CMP --vcn-id $VCN \
  --services '["all-region-services-in-oci"]' \
  --display-name "sgw-prod"

# 4. 为公有子网路由表添加默认路由
oci network route-table update --rt-id $RT_PUBLIC \
  --route-rules '[{"destination":"0.0.0.0/0","networkEntityId":"<IGW_OCID>"}]'

# 5. 为私有子网路由表添加 NAT 默认路由
oci network route-table update --rt-id $RT_PRIVATE \
  --route-rules '[{"destination":"0.0.0.0/0","networkEntityId":"<NAT_OCID>"}]'

配置时需重点关注几个参数:目标 CIDR决定匹配范围,0.0.0.0/0 是默认路由,务必确认下一跳正确;networkEntityId必须填写网关的 OCID,而非名称;服务网关的 services 字段可填 all-region-services-in-oci 或具体服务 CIDR,若只允许 Object Storage,应使用更精确的服务 CIDR 而非全量。

子网级流量控制的落地要点

路由表决定“能不能走”,安全列表和 NSG 决定“让不让过”。两者是叠加关系:流量必须同时被路由表匹配、被安全规则放行,才能通过。常见做法是:公有子网安全列表放行 80/443 入站,私有子网仅放行来自公有子网安全列表的出站回包;NAT 网关出站无需额外放行,但私有子网安全列表仍需允许出站到 0.0.0.0/0 或具体目标。

易错点:私有子网若只配了 NAT 网关路由,却未在安全列表放行出站,实例仍无法访问互联网;反之,若路由表指向 IGW 但子网是私有的,实例没有公网 IP,也无法通过 IGW 出站。路由与安全规则必须同时正确。

最后,DRG 的配置与前三者不同:它需要先在 DRG 上创建附件(Attachment),把 VCN 挂载到 DRG,再在 VCN 路由表中添加指向 DRG 的路由,并在 DRG 路由表中配置到对端网络的路由。跨 VCN 互联时,两端 VCN 的非重叠 CIDR 是关键前提,若地址段重叠,DRG 无法正确转发。建议在规划阶段就用统一的地址分配表管理各 VCN 与本地网段,避免后期返工。

掌握这四类网关的定位与路由协同,就能在子网级别实现“该出的出、该进的进、不该走的绝不绕公网”的流量控制目标。