我的问题与这个问题有些相关:为了将本地 IPv6 /56 范围路由到多个 VLAN,ISP 需要提供什么该问题集中在路由器的私有端,我的问题集中在公共端,并且与如何ISP 执行其工作。
假设我的 ISP 给了我一个 IPv6 网络前缀 2001:db8:beef:a700::/56。假设我没有对它进行子网划分——我只是将路由器的 LAN 接口放在该子网中。假设我的路由器的 WAN 接口地址为 2001:db8:face:2000::2/64(通过 DHCP 分配),上游网关为 2001:db8:face:2000::1。当上游网关从公共 Internet 收到目标地址为 2001:db8:beef:a700::abcd 的数据包时,它必须将该数据包路由到位于 2001:db8:face:2000::2 的路由器。上游网关如何得知这是它必须做的?
这个问题是根据这些假设提出的:
- 客户设备未运行任何动态路由协议。我没有看到客户设备运行路由协议,所以我必须假设上游网关通过其他一些方式获知了 2001:db8:beef:a700::/56 网络。那可能是什么意思?
- 分发前缀的 DHCPv6 服务器未在上游网关上运行。相反,上游网关正在执行 DHCP 中继。这允许单个 DHCP 服务器为可能与社区或城镇相关的许多网络提供服务。
我试图用一些 Linux 主机和 pfSense 路由器对此进行测试,但我无法复制 ISP 提供的功能。我非常欢迎纠正我在学习 IPv6 时可能产生的误解。
IPv6 到消费者网络/客户通常是通过在 ISP 路由器和家庭路由器 (CPE) 之间使用DHCPv6-PD来提供的。PD 代表前缀委派,是对正常 DHCPv6 选项的补充。它不仅为 CPE 提供链路上的地址,而且还给它一个完整的前缀,然后它可以使用它在自己的网络中进一步分发。
为了能够将前缀路由到正确的 CPE,ISP 路由器必须记住哪些前缀被委派给了哪个 CPE。为此,它会记住 DHCPv6 客户端 ID (DUID)、其本地链路 (fe80:) 地址、委派前缀和租用时间。然后,它会自动为每个前缀创建一条静态路由,并将 CPE 的链路本地地址作为下一跳,并在租约到期时再次删除该路由。
如果 ISP 路由器本身不是 DHCPv6 服务器(通常不是),那么它会执行 DHCPv6 中继的角色。它将来自 CPE 的 DHCPv6 请求中继到中央 DHCPv6 服务器,该服务器将为每个 CPE 提供前缀。在中继这些消息时,ISP 路由器将在其中窥探以查看是否正在委派前缀,并且它将根据该消息更新其路由。
例如,这里是此功能的一些 Cisco 文档。
还有一些交换机可以监听 DHCPv6 流量。这样做是为了安全而不是路由。通过查看为哪个以太网端口提供了哪些 IPv6 地址和前缀,交换机可以确保其他端口上的设备无法使用其他 IPv6 地址欺骗数据包。这称为轻量级 DHCPv6 中继代理,并在RFC 6221中指定。
它的工作方式与 IPv4 的路由相同。
路由器以三种不同的方式学习路由:
如果您没有在 CE 和 PE 之间运行路由协议,则 PE 被配置为将任何发往
/56
网络的流量路由到 CE 路由器。ISP 使用 IGP 或 iBGP/56
在其自己的网络中通告前缀,并将其通告(可能在更大的聚合前缀中)到公共 Internet。在这种特殊情况下,上游网关必须“窥探”它中继的 DHCP 数据包。因为这些 DHCP 数据包包含客户路由器的 WAN 地址和委托给该客户的前缀地址,所以上游路由器需要的所有信息都在那里,必须简单地提取。提取后,上游网关将信息添加到其路由表中。这称为“DHCP 侦听”。从某种意义上说,DHCP 被用作穷人的路由协议。
思科提供的文档帮助我得出了这个答案。可以在这里找到。