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 地址中,具体方式如下:
IPv4 地址的结构:
192.168.6.x
192.168.6
是 IPv4 的前三个字节,对应 IPv6 地址中的c0a8:06
(即192.168.6
的十六进制表示)。x
是 IPv4 的最后一个字节,对应 IPv6 地址的最后 8 位。
IPv6 子网结构:
fd7a:115c:a1e0:b1a:0:7:c0a8:600/120
- 前 120 位(15 字节)是固定的。
- 最后 8 位(1 字节)是可变的,用于表示 IPv4 的最后一个字节。
🔍 如何计算 IPv4 对应的 IPv6 地址
以 192.168.6.146
为例:
IPv4 最后一个字节:
146
- 转换为十六进制:
146 = 0x92
- 转换为十六进制:
IPv6 地址的最后 8 位:
0x92
完整 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 地址的映射。 - 验证方法:你可以使用
ping6
或traceroute6
测试该 IPv6 地址是否能访问对应的 IPv4 设备。
🧠 总结
Tailscale 的 4via6 功能通过将 IPv4 地址的最后一个字节映射到 IPv6 地址的最后 8 位,实现了 IPv4 和 IPv6 的双向通信。对于 192.168.6.146
,其对应的 IPv6 地址为:
1 | fd7a:115c:a1e0:b1a:0:7:c0a8:692 |