甲骨文云免费实例默认支持双栈网络,但需要同时在控制台和操作系统内启用 IPv6 才能生效,能否访问特定网站取决于区域路由策略。
先说结论:配置 IPv6 需要在云端控制台开启子网支持并放行安全列表,同时在系统内确认网卡获取了地址,但具体能否访问谷歌取决于所在区域的路由出口策略。
- 适合:需要公网 IPv6 connectivity 的开发者或测试场景
- 先准备:确认实例所在区域支持 IPv6 且子网未禁用
- 验收:使用 curl 或 ping 测试外部 IPv6 地址连通性
命令速用版
如果你已经确认控制台配置完毕,只需在系统内快速检查状态,可以使用以下命令:
ip -6 addr show ping6 -c 4 google.com curl -6 -I https://www.google.com
为什么会这样
甲骨文云的免费实例虽然硬件支持 IPv6,但网络栈是分层的。第一层是虚拟云网络(VCN),默认可能只分配了 IPv4 地址;第二层是安全列表(Security List),即使有了地址,如果没有放行 IPv6 的出站规则,数据包也会被丢弃;第三层是操作系统内部,如果云初始化脚本没有正确配置网卡监听 IPv6 路由通告(RA),系统也不会生成全局单播地址。只有这三层都打通,才能对外发起 IPv6 连接。
分步处理
1. 控制台开启子网 IPv6
登录甲骨文云控制台,进入“虚拟云网络”,找到实例所在的子网。点击子网详情,查看是否已分配 IPv6 CIDR。如果没有,点击“编辑”开启 IPv6 支持。注意,部分老旧区域或特定可用区可能不支持免费实例的 IPv6,公开资料中没有看到可靠的量化数据说明哪些区域一定支持,需以控制台实际选项为准。
2. 检查安全列表出站规则
在子网详情页找到“安全列表”,点击对应的列表进入配置。查看“出站规则”,确保有一条允许目的为 ::/0 的规则。如果只有 IPv4 的 0.0.0.0/0,IPv6 流量会被默认拒绝。添加一条协议为 ICMPv6 或 ALL,目的为 ::/0 的放行规则。
3. 操作系统内确认地址
SSH 登录实例,运行 ip -6 addr。除了 ::1 和链路本地地址(fe80 开头),应该能看到一个全局单播地址(通常以 2001 开头)。如果没有,尝试重启网络服务或重启实例,让 cloud-init 重新获取元数据。
4. 系统防火墙放行
检查系统内部防火墙。如果是 Ubuntu 默认未开启防火墙,可跳过;如果是 Oracle Linux 或开启了 firewalld/iptables,需确认 IPv6 出站未被拦截。例如 firewalld 可运行 firewall-cmd `--list-all` 查看 masquerade 和规则状态。
怎么验证是否生效
不要只看 IP 地址是否存在,要测试实际连通性。
1. Ping 测试
使用 ping6 google.com 或 ping6 ipv6.google.com。如果能收到回复,说明路由可达。如果出现“网络不可达”或超时,可能是安全列表未放行 ICMPv6。
2. HTTP 请求测试
使用 curl -6 -I https://www.google.com。如果返回 HTTP 200 或 301,说明 TCP 连接正常。如果卡住不动,通常是被中间网络策略拦截。
3. 本地出口检查
运行 curl -6 ifconfig.me 查看当前出口 IP 是否为刚才配置的 IPv6 地址,确认流量确实走了 IPv6 通道。
常见坑
1. 安全列表只配了入站
很多人只记得放行入站规则,忘了出站规则。甲骨文云默认的安全列表有时只允许特定端口,IPv6 出站需要显式添加 ::/0。
2. 系统未启用 IPv6 转发
如果你打算用这台机器做网关,需要开启 net.ipv6.conf.all.forwarding=1。但如果是单纯访问,默认关闭即可,开启反而可能增加风险。
3. 区域路由限制
部分区域的免费实例虽然能获取 IPv6 地址,但出口路由可能受限,导致无法访问某些特定域名。这不是配置错误,而是网络策略问题,公开资料中没有看到可靠的量化数据说明哪些区域受限,建议换区域测试。
4. 云初始化失败
偶尔 cloud-init 未能正确应用网络配置,导致网卡缺少 IPv6 地址。此时重启实例通常比手动修改配置文件更安全,因为手动修改可能在下次重启后被覆盖。