Oracle Cloud中如何为实例分配大于/64的IPv6前缀并实现路由委派
Oracle Cloud中如何为实例分配大于/64的IPv6前缀并实现路由委派
我之前折腾过类似的需求,刚好能给你梳理下具体的操作步骤和注意事项:
一、先理清Oracle Cloud的IPv6基础逻辑
Oracle给每个启用IPv6的VCN分配的是**/56的全局前缀**,默认每个子网只会用其中的一个/64,但我们可以从这个/56里切出更大的前缀(比如你需要的/58),委派给指定实例让它充当路由器,再把这个前缀下的子网分给WireGuard节点。
二、具体操作步骤
确认VCN的IPv6状态
先登录OCI控制台,进入你的VCN详情页,确认已经启用了IPv6,并且拿到了VCN的/56全局前缀(比如2603:c020:abcd::/56)。配置VCN路由表,把目标前缀指向实例
在VCN的路由表中添加一条路由规则:- 目标CIDR:填你要委派的那个/58前缀(比如从VCN的/56里切出
2603:c020:abcd:0000::/58) - 下一跳类型:选择「实例」,然后选中你的目标实例
这样Oracle的底层网络就会把这个/58前缀的所有流量都转发到你的实例上。
- 目标CIDR:填你要委派的那个/58前缀(比如从VCN的/56里切出
给实例附加委派的IPv6前缀
你可以用OCI控制台或者CLI来操作:- 如果用CLI,执行命令(替换成你的实例ID和目标前缀):
oci compute instance update --instance-id ocid1.instance.oc1.xxxx --ipv6-prefixes '[{"cidrBlock": "2603:c020:abcd:0000::/58"}]' - 控制台操作的话,进入实例详情页,找到「IPv6前缀」选项,点击添加,输入你的/58前缀即可。
注意:这个前缀必须是VCN/56的连续子集,不能和现有子网的/64重叠,/58的步长是十六进制的
0x40,所以合法的前缀比如2603:c020:abcd:0000::/58、2603:c020:abcd:0040::/58等。- 如果用CLI,执行命令(替换成你的实例ID和目标前缀):
配置实例内部的IPv6转发
登录到实例后,先给网卡添加这个前缀(假设网卡是ens3,根据实际情况修改):ip -6 addr add 2603:c020:abcd:0000::1/58 dev ens3然后启用IPv6转发功能:
- 编辑
/etc/sysctl.conf,添加或修改:net.ipv6.conf.all.forwarding=1 net.ipv6.conf.default.forwarding=1 - 执行
sysctl -p让配置生效。
- 编辑
配置WireGuard的路由规则
在你的WireGuard配置文件中,给每个Peer分配这个/58下的子前缀(比如给Peer A分配2603:c020:abcd:0001::/64),然后在实例的WireGuard配置里添加路由:[Peer] PublicKey = xxxxxxx AllowedIPs = 2603:c020:abcd:0001::/64这样实例就会把这个/64前缀的流量转发给对应的WireGuard节点。
调整防火墙和安全列表
- 实例内部的防火墙(比如
ip6tables)要允许IPv6转发:ip6tables -A FORWARD -i wg0 -o ens3 -j ACCEPT ip6tables -A FORWARD -i ens3 -o wg0 -j ACCEPT - OCI控制台的安全列表要允许IPv6的入站/出站流量:比如ICMPv6(用于路由探测)、WireGuard的端口(默认51820),以及你需要的业务端口。
- 实例内部的防火墙(比如
三、验证配置
- 在实例上执行
ip -6 addr确认/58前缀已经成功添加到网卡 - 执行
ip -6 route查看路由表,确认目标前缀的路由指向正确 - 从WireGuard节点尝试ping公网IPv6地址,或者从外部ping你分配给节点的IPv6地址,验证连通性
备注:内容来源于stack exchange,提问作者Keval




