甲骨文云 IPv6 地址如何配置才能让外网访问

文章导读
甲骨文云实例要能通过 IPv6 被外网访问,核心是在控制台开启 VCN 和子网的 IPv6 支持,并在安全列表中放行 IPv6 流量,操作系统层面通常会自动获取地址但需检查防火墙。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D IPv6 地址保留策略
  5. E 怎么验证是否生效
  6. F 常见坑
  7. G 参考来源
A A

甲骨文云实例要能通过 IPv6 被外网访问,核心是在控制台开启 VCN 和子网的 IPv6 支持,并在安全列表中放行 IPv6 流量,操作系统层面通常会自动获取地址但需检查防火墙。

先说结论:IPv6 在甲骨文云默认未启用,需手动在 VCN 层面开启并按层级配置安全规则,适合需要双栈网络或 IPv6 专属服务的场景。

  • 适合:需要公网 IPv6 地址直连实例,或解决 IPv4 地址不足的业务。
  • 先准备:确认 VCN 支持 IPv6,规划好安全列表的入站和出站规则,注意端口最小化原则。
  • 验收:使用外部 IPv6 网络环境测试端口连通性和 Ping 响应,确认地址在实例重启后是否保留。

命令速用版

在实例内部快速检查 IPv6 地址获取情况、基础连通性及自动化检测:

# 查看是否获取到 IPv6 地址(通常以 2001 开头)
ip -6 addr show

# 测试 IPv6 出站连通性
ping6 -c 4 ipv6.google.com

# 查看监听端口是否支持 IPv6
ss -tlnp | grep ::

# 自动化连通性检测脚本(保存为 check_ipv6.sh)
#!/bin/bash
IPV6_ADDR=$(ip -6 addr show | grep 'global' | awk '{print $2}' | cut -d'/' -f1 | head -n 1)
if [ -z "$IPV6_ADDR" ]; then
  echo "未检测到全球单播 IPv6 地址"
  exit 1
fi
echo "检测到 IPv6 地址:$IPV6_ADDR"
ping6 -c 2 -I $IPV6_ADDR 2001:4860:4860::8888 >/dev/null && echo "出站连通性正常" || echo "出站连通性失败"

为什么会这样

甲骨文云的 VCN(虚拟云网络)默认仅启用 IPv4 栈。IPv6 功能需要显式开启,且安全机制与 IPv4 独立。即使实例操作系统支持 IPv6,如果 VCN 子网未分配 IPv6 地址段,或者安全列表(Security List)未放行 IPv6 协议流量,外网依然无法访问。此外,OCI 的 IPv6 地址通常是全球单播地址,理论上可直接路由,但必须通过安全列表的显式允许。

分步处理

1. 在 VCN 中启用 IPv6

登录甲骨文云控制台,进入 Networking > Virtual Cloud Networks。选择你的 VCN,点击右侧菜单或找到 "IPv6 Information" 区域,点击 "Edit" 启用 IPv6 支持。系统会分配一个 /56 的 IPv6 前缀。

2. 配置子网 IPv6

甲骨文云 IPv6 地址如何配置才能让外网访问

进入该 VCN 下的 Subnets 列表,点击目标子网名称。在 IPv6 部分,点击 "Edit",选择 "Assign IPv6 Address",通常选择 "Automatically assign" 或手动指定 /64 前缀。保存后,该子网内的实例才能申请 IPv6 地址。

3. 为实例 VNIC 分配 IPv6

进入 Instances 详情页,点击实例名称,再点击 "Attached VNICs" 或主 VNIC 链接。编辑 IPv6 地址部分,点击 "Assign IPv6 Address"。完成后,实例会在几分钟内通过 SLAAC 自动配置 IPv6 地址。

4. 配置安全列表(关键)

进入子网详情,找到关联的 Security Lists。需要添加两条规则:

  • 入站规则:源 CIDR 填 ::/0,协议根据需要选择(如 TCP 端口 80 或 ICMPv6)。警告:::/0 代表全球所有 IPv6 地址,务必仅开放必要业务端口,切勿开放 22 等管理端口至 ::/0,以防暴力破解。
  • 出站规则:目标 CIDR 填 ::/0,允许所有或特定端口。

注意:安全列表是状态化的,但建议显式配置出站规则以确保兼容性。

甲骨文云 IPv6 地址如何配置才能让外网访问

5. 检查操作系统防火墙

如果控制台配置无误但仍不通,检查实例内部防火墙。Ubuntu 默认可能开启 ufw,CentOS 可能使用 firewalld 或 iptables。确保 IPv6 流量未被拦截。

# Ubuntu 示例
sudo ufw allow from any to any port 80 proto tcp

# CentOS 示例
sudo firewall-cmd `--permanent` `--add-port`=80/tcp
sudo firewall-cmd `--reload`

IPv6 地址保留策略

配置前需了解 IPv6 地址的生命周期,避免业务中断:

  • 实例停止(Stop):VNIC 保留,IPv6 地址不会释放,重启后地址不变。
  • 实例终止(Terminate):VNIC 被销毁,IPv6 地址立即释放,无法找回。
  • 重新分配:若手动取消分配 IPv6 地址,原地址将返回池化,再次分配时可能获得新地址。

建议:若业务依赖固定 IPv6 地址,避免随意终止实例,可在 DNS 中绑定域名而非直接使用 IP。

怎么验证是否生效

配置完成后,不要仅凭实例内部有地址就认为成功,必须从外部验证:

  • Ping 测试:在本地电脑或支持 IPv6 的在线工具,Ping 实例的 IPv6 地址。如果通了,说明网络层可达。
  • 端口测试:使用 curl -g -6 http://[实例 IPv6 地址]:端口 测试具体服务。
  • 路由追踪:使用 traceroute6 查看路径是否在甲骨文云边缘中断。
  • 脚本验证:运行上文提供的 check_ipv6.sh 脚本快速自检。

如果内部有地址但外部 Ping 不通,90% 的情况是安全列表未放行 ICMPv6 或 TCP 端口。

常见坑

  • 安全列表只配了 IPv4:IPv4 和 IPv6 规则互不影响,开了 IPv4 不代表 IPv6 通。
  • 安全风险:直接开放 ::/0 所有端口会导致服务暴露,务必限制具体端口。
  • 操作系统未自动获取:部分旧版镜像可能需要重启网络服务或实例才能识别新分配的 IPv6 前缀。
  • ICMPv6 被阻断:IPv6 依赖 ICMPv6 进行邻居发现和路径 MTU 发现,完全禁止 ICMPv6 可能导致连接不稳定,建议放行 ICMPv6 类型。
  • 路由表缺失:极少数情况下,实例内部路由表未添加默认 IPv6 路由,需手动检查 ip -6 route

参考来源

  • Oracle Cloud Infrastructure Documentation, "Overview of IPv6", https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/ipv6.htm
  • Oracle Cloud Infrastructure Documentation, "Managing IPv6 Addresses", https://docs.oracle.com/en-us/iaas/Content/Network/Task/managingipv6addresses.htm