为隧道接口分配 6to4 格式的 IPv6 地址
在本步骤中,你将通过为其分配一个特殊的 6to4 格式的 IPv6 地址来配置你刚刚创建的 tun6to4 接口。这个地址并非随意指定;它直接源自隧道端点的公共 IPv4 地址。
6to4 寻址方案被设计为自动化的。它使用一个指定的 IPv6 前缀 2002::/16。此后跟的 32 位由公共 IPv4 地址填充,并转换为十六进制格式。这为拥有至少一个公共 IPv4 地址的任何组织创建了一个唯一的 /48 IPv6 前缀。
让我们计算一下我们概念性 IPv4 地址 192.0.2.1 的十六进制表示:
- 十进制的
192 在十六进制中是 c0。
- 十进制的
0 在十六进制中是 00。
- 十进制的
2 在十六进制中是 02。
- 十进制的
1 在十六进制中是 01。
将它们组合起来,192.0.2.1 的十六进制表示是 c000:0201。因此,我们唯一的 6to4 前缀是 2002:c000:0201::/48。
现在,我们将从这个前缀中为我们的 tun6to4 接口分配一个特定的 IPv6 地址。我们将使用第一个子网中的第一个地址 2002:c000:0201::1/64。执行以下命令来分配地址:
sudo ip -6 addr add 2002:c000:0201::1/64 dev tun6to4
创建接口并分配地址后,接口默认仍处于“DOWN”状态。你需要将其设置为“UP”才能使其正常工作。为此,请使用 ip link set 命令:
sudo ip link set tun6to4 up
最后,让我们验证接口是否已启动并具有正确的 IPv6 地址。使用 ip a 命令并查找 tun6to4 接口:
ip a
你应该会看到一个包含 tun6to4 接口的输出,该接口现在已激活并配置了 IPv6 地址。请注意,接口编号(例如 5:)可能会有所不同,并且你可能会看到其他接口,如 docker0 或 sit0。
5: tun6to4@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit 192.0.2.1 brd 0.0.0.0
inet6 ::192.0.2.1/96 scope global
valid_lft forever preferred_lft forever
inet6 2002:c000:201::1/64 scope global
valid_lft forever preferred_lft forever
请注意,除了你配置的 2002:... 地址外,系统还自动添加了一个 IPv4 兼容的 IPv6 地址(::192.0.2.1/96)。这是预期的行为。