因此,我有一个 Linux 服务器的 VPS 提供商,其网站上的网络仪表板上显示了以下内容:
2607:f840:0044:0022:0000:0000:0000:0000/64 被路由到此服务器 (2607:f840:0:3f:0:0:0:eaa)
2607:f840:0:3f:0:0:0:eaa/64 是分配给 eth0 接口的地址,旁边写着 GLOBAL。
我对 IPv6 了解不多。每个地址长度为 128 位,以十六进制形式书写,通过省略前导零或使用 :: 一次来缩短。我不明白将 2607:f840:44:22::/64 “路由”到我的 IPv6 分配地址 2607:f840:0:3f:0:0:0:eaa/64 意味着什么。
所以我无法改变2607:f840:0:3f:0:0:0:eaa 中的单个位,但我可以选择从 2607:f840:44:22:0000:0000:0000:0000 到 2607:f840:44:22:FFFF:FFFF:FFFF:FFFF 中的任何一个?这样我就有 2^64 个可能的地址可以使用,但目的是什么呢?
希望这个问题不是太模糊或偏离主题,感谢您的见解。
答案1
欢迎来到拥有多得数不清的 IP 地址的奇妙世界。(您的 VPS 提供商做得对,为您分配了 /64 而不是更小的地址,很多误入歧途的提供商似乎都在这样做……)
你可能已经猜到了,其中一个目的是没有人会用完 IP 地址,.或者至少不是很长一段时间...
因此,它对你的工作方式如下:
您分配给
eth0
接口的 IP 地址是2607:f840:0:3f::eaa
。这位于上游提供商的/64
。当数据包进入你的子网2607:f840:44:22::/64
,您的上游提供商将它们路由到您的eth0
接口。数据包到达后如何处理完全由您决定。由于您使用的是 VPS,因此您可能不需要大量地址,因此您可以直接将它们分配
...::1
给现有eth0
接口。例如:
ip addr add 2607:f840:44:22::1/64 dev eth0 ip addr add 2607:f840:44:22::2/64 dev eth0 ip addr add 2607:f840:44:22::3/64 dev eth0 ip addr add 2607:f840:44:22::deca:fbad/64 dev eth0 ip addr add 2607:f840:44:22:feed:face:dead:beef/64 dev eth0
如果您进一步将 VPS 划分为容器(例如 OpenVZ 或 LXC),那么您可以将其路由
/64
到为容器提供服务的网络桥接器,并为容器分配地址。
另请参阅密切相关的问题,IPv6 子网划分如何工作?它与 IPv4 子网划分有何不同?
答案2
使用 /64 以外的子网前缀长度将破坏 IPv6 的许多功能,其中包括邻居发现 (ND)、安全邻居发现 (SEND) [RFC3971]、隐私扩展 [RFC4941]、移动 IPv6 的部分 [RFC4866]、带嵌入式 RP 的 PIM-SM [RFC3956] 和 SHIM6 [SHIM6]。目前正在开发或正在提议的许多其他功能也依赖于 /64 子网前缀。
您的提供商只是坚持安全标准。您获得了巨大的地址空间,但这是一件好事。它使事情面向未来。
答案3
我不明白将 2607:f840:44:22::/64 '路由'到我的 IPv6 分配地址 2607:f840:0:3f:0:0:0:eaa/64 意味着什么。
这意味着他们将您的服务器视为路由器。
当设备想要发送数据包时,它会在其路由表中查找目的地。
路由可以仅指向一个接口。子网掩码创建的隐式路由就是一个例子,但至少在 Linux 上也可以显式添加此类路由。在这种情况下,目标 IP 地址将被视为下一跳 IP 地址。
或者,路由可以指向接口和下一跳 IP 地址的组合。在这种情况下,使用指定的下一跳 IP 地址
对于 IPv6 6,下一跳 IP 地址使用邻居发现解析为 MAC 地址(IPV4 使用 ARP)。
所以这意味着当提供商的路由器在 2607:f840:44:22::/64 中查找任何地址时,它将对 2607:f840:0:3f:0:0:0:eaa 进行邻居发现,并将数据包发送到它找到的 MAC 地址。