甲骨文云实例要能通过 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
进入该 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,允许所有或特定端口。
注意:安全列表是状态化的,但建议显式配置出站规则以确保兼容性。
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