Tailscale 4via6 功能 IP地址转换规则

在 Tailscale 的 4via6 功能中,IPv4 地址会被映射到一个特定的 IPv6 子网中。现有信息如下:

  • IPv6 子网fd7a:115c:a1e0:b1a:0:7:c0a8:600/120
  • 对应的 IPv4 子网192.168.6.0/24

192.168.6.0/24 是 openwrt 路由器的 IPv4 地址。fd7a:115c:a1e0:b1a:0:7:c0a8:600/120 是 Tailscale 分配给 openwrt 的 IPv6 地址。

📌 问题

现在有一个 IPv4 地址 192.168.6.146,如何计算出其对应的 IPv6 地址?

📌 IPv6 和 IPv4 的映射规则

Tailscale 的 4via6 功能通常会将 IPv4 地址嵌入到 IPv6 地址中,具体方式如下:

  1. IPv4 地址的结构192.168.6.x

    • 192.168.6 是 IPv4 的前三个字节,对应 IPv6 地址中的 c0a8:06(即 192.168.6 的十六进制表示)。
    • x 是 IPv4 的最后一个字节,对应 IPv6 地址的最后 8 位。
  2. IPv6 子网结构fd7a:115c:a1e0:b1a:0:7:c0a8:600/120

    • 前 120 位(15 字节)是固定的。
    • 最后 8 位(1 字节)是可变的,用于表示 IPv4 的最后一个字节。

🔍 如何计算 IPv4 对应的 IPv6 地址

192.168.6.146 为例:

  1. IPv4 最后一个字节146

    • 转换为十六进制:146 = 0x92
  2. IPv6 地址的最后 8 位0x92

  3. 完整 IPv6 地址

    • 0x92 替换到 IPv6 子网的最后 8 位中。
    • 原始 IPv6 子网的最后部分是 600,因此最终 IPv6 地址为:
      1
      fd7a:115c:a1e0:b1a:0:7:c0a8:692

✅ 最终答案

IPv4 地址 IPv6 地址
192.168.6.146 fd7a:115c:a1e0:b1a:0:7:c0a8:692

📌 附注

  • IPv6 地址格式:每个段由 4 位十六进制数表示,允许省略前导零。
  • 子网掩码/120 表示前 120 位固定,最后 8 位用于 IPv4 地址的映射。
  • 验证方法:你可以使用 ping6traceroute6 测试该 IPv6 地址是否能访问对应的 IPv4 设备。

🧠 总结

Tailscale 的 4via6 功能通过将 IPv4 地址的最后一个字节映射到 IPv6 地址的最后 8 位,实现了 IPv4 和 IPv6 的双向通信。对于 192.168.6.146,其对应的 IPv6 地址为:

1
fd7a:115c:a1e0:b1a:0:7:c0a8:692