我对以下 2 个与 IPv6 相关的 RFC 感到有些困惑:
RFC 4862 规定:
本文档中指定的自动配置过程仅适用于主机而不适用于路由器。由于主机自动配置使用路由器通告的信息,因此需要通过其他方式配置路由器。
RFC 7084 列出了其对地址分配的 WAN 侧配置要求之一:
WAA-1:IPv6 CE 路由器必须支持无状态地址自动配置 (SLAAC) [RFC4862]。
这里有矛盾吗?
路由器是否应该能够为其 WAN 接口自动配置 IPv6 地址?
为什么 RFC 4862 说
由于主机自动配置使用路由器通告的信息,因此需要通过其他方式配置路由器。
例如,如果我使用路由器将 LAN 连接到 ISP,则 ISP 的网络中是否没有路由器与我的路由器通话?
我会认为将 2 个(或更多)路由器链接在一起是完全合理的。在这种情况下,为什么不在第二个路由器的 WAN 接口上使用 SLAAC?
也许问题归结为主机和路由器之间的人为区分?来自 RFC 4862:
节点 - 实现 IP 的设备。
路由器 - 转发未明确寻址到自身的 IP 数据包的节点。
主机 - 任何不是路由器的节点。
但是主机(即托管服务器或应用程序的机器)不能也有路由表并充当路由器吗?我们再次有效地将 2 个路由器链接在一起。
编辑:我后来发现的一些额外信息......
Linux 内核处理 SLAAC,并严格遵循 RFC 4862。直到主机和路由器之间的区别。请参阅有关ip-sysctl的内核文档:
- 假设主机行为。这意味着将发送路由器请求,并且路由器广告将用于地址自动配置。
- 仅当启用转发(
/proc/sys/net/ipv6/conf/all/forwarding
) 时,设备才被视为ROUTER。这意味着不会发送任何路由器请求,并且路由器广告将被忽略。
事实证明,这种区别可以追溯到 IPv6 之前。查看参数/proc/sys/net/ipv4/ip_forward
: