IPv6 – 我的ISP如何知道如何将stream量路由到我的委托子网?

我的问题与这个问题有些相关: 为了将本地IPv6 / 56范围路由到几个VLAN , ISP需要提供什么问题关注于路由器的私有方面,我的问题关注于公共方面,一个ISP执行它的工作。

假设我的ISP给了我一个2001:db8:beef:a700 :: / 56的IPv6networking前缀。 让我们假设我不是子网的 – 我只是把我的路由器的LAN接口放在那个子网中。 我们假设我的路由器的WAN接口的地址为2001:db8:face:2000 :: 2/64(通过DHCP分配),上游网关为2001:db8:face:2000 :: 1。 当上游网关从公网上获取目的地址为2001:db8:beef:a700 :: abcd的数据包时,它必须在2001:db8:face:2000 :: 2路由该数据包到我的路由器。 上游网关如何知道这是必须做的?

这个问题正在被问到这些假设:

  • 客户设备没有运行任何dynamic路由协议。 我没有看到运行路由协议的客户设备,所以我必须假设上游网关通过其他方式了解到了2001:db8:beef:a700 :: / 56networking。 那可能是什么意思?
  • 上游网关上没有运行发送前缀的DHCPv6服务器。 上游网关正在执行DHCP中继。 这允许单个DHCP服务器为可能与社区或城镇相关联的许多networking提供服务。

我试图用一些Linux主机和pfSense路由器来testing,但我无法复制ISP提供的function。 我更欢迎更正我在学习IPv6时可能产生的错误观念。

IPv6到消费者networking/客户通常通过在ISP路由器和家庭路由器(CPE)之间使用DHCPv6-PD来提供。 PD代表前缀委派,是对正常DHCPv6选项的补充。 它不仅为CPE提供了链接上的地址,而且还为其提供了一个完整的前缀,然后可以用它在自己的networking中进一步分发。

为了能够将前缀路由到正确的CPE,ISP路由器必须记住哪些前缀被委派给哪个CPE。 要做到这一点,它会记住DHCPv6客户端ID(DUID),其本地链接(fe80 :)地址,委托前缀和租用时间。 然后自动为每个前缀创build一个静态路由,以CPE的链路本地地址作为下一跳,并在租约到期时再次删除该路由。

如果ISP路由器本身不是DHCPv6服务器(通常不是),那么它将执行DHCPv6中继的作用。 它将把来自CPE的DHCPv6请求中继给中央DHCPv6服务器,该服务器将为每个CPE提供前缀。 当中继这些消息时,ISP路由器将在其内部窥探以查看是否正在委派前缀,并且将基于此来更新其路由。

作为一个例子,这里是一些思科文档的这个function 。

还有侦听DHCPv6stream量的交换机。 这是为了安全而不是路由。 通过查看哪个以太网端口被赋予哪个IPv6地址和前缀,交换机可以确保其他端口上的设备不能使用别人的IPv6地址来欺骗数据包。 这被称为轻量级DHCPv6中继代理,并在RFC 6221中指定。

它的工作原理与IPv4路由相同。

路由器以三种不同的方式学习路由:

  1. 直接连接的networking
  2. 静态configuration的路由
  3. dynamic地通过路由协议

如果您没有在CE和PE之间运行路由协议,则PEconfiguration为将到/56networking的任何stream量路由到CE路由器。 ISP使用IGP或iBGP在自己的networking中通告/56前缀,并将其通告给公众互联网(可能在更大的聚合前缀内)。

在这种情况下,上游网关必须“窥探”它传递的DHCP数据包。 由于这些DHCP数据包既包含客户路由器的广域网地址,也包含委托给该客户的前缀地址,因此上游路由器需要的所有信息都已存在并且必须简单地提取出来。 一旦提取,上游网关将信息添加到其路由表中。 这被称为“DHCP侦听”。 从某种意义上说,DHCP被用作穷人的路由协议。

思科提供了帮助我得出这个答案的文档。 它可以在这里find。