You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle Cloud中如何为实例分配大于/64的IPv6前缀并实现路由委派

Oracle Cloud中如何为实例分配大于/64的IPv6前缀并实现路由委派

我之前折腾过类似的需求,刚好能给你梳理下具体的操作步骤和注意事项:

一、先理清Oracle Cloud的IPv6基础逻辑

Oracle给每个启用IPv6的VCN分配的是**/56的全局前缀**,默认每个子网只会用其中的一个/64,但我们可以从这个/56里切出更大的前缀(比如你需要的/58),委派给指定实例让它充当路由器,再把这个前缀下的子网分给WireGuard节点。

二、具体操作步骤

  1. 确认VCN的IPv6状态
    先登录OCI控制台,进入你的VCN详情页,确认已经启用了IPv6,并且拿到了VCN的/56全局前缀(比如2603:c020:abcd::/56)。

  2. 配置VCN路由表,把目标前缀指向实例
    在VCN的路由表中添加一条路由规则:

    • 目标CIDR:填你要委派的那个/58前缀(比如从VCN的/56里切出2603:c020:abcd:0000::/58
    • 下一跳类型:选择「实例」,然后选中你的目标实例
      这样Oracle的底层网络就会把这个/58前缀的所有流量都转发到你的实例上。
  3. 给实例附加委派的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::/582603:c020:abcd:0040::/58等。

  4. 配置实例内部的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让配置生效。
  5. 配置WireGuard的路由规则
    在你的WireGuard配置文件中,给每个Peer分配这个/58下的子前缀(比如给Peer A分配2603:c020:abcd:0001::/64),然后在实例的WireGuard配置里添加路由:

    [Peer]
    PublicKey = xxxxxxx
    AllowedIPs = 2603:c020:abcd:0001::/64
    

    这样实例就会把这个/64前缀的流量转发给对应的WireGuard节点。

  6. 调整防火墙和安全列表

    • 实例内部的防火墙(比如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

火山引擎 最新活动