我一直在阅读相互冲突的来源,并看到有关 CPE 路由器应如何分配 IPv6 地址的不同行为。
RFC3633似乎暗示每个主机都应该获得 /64,而RFC6204表示路由器应该为每个 LAN 接口分配一个 /64(对于简单的住宅网络,每个主机仍然是一个 /64,对吧?)
同时,我被分配了一个 /56(通过隧道),并且我有一个运行 OpenWRT Barrier Breaker 的路由器。
我电脑上的 SLAAC 只给我来自第一个 /64 的 IP;并且为了尝试自动为每台计算机分配一个完整的 /64(而不是通过手动分配),我尝试过的两个 DHCPv6 服务器(odhcpd 和 dnsmasq)仍然只在第一个 /64 中分配 IP。
更具体地说,使用 dnsmasq,我已经尝试过dhcp-range=2001:xxxx:e001:c501::,2001:xxxx:e001:c5ff::
,但它出现“不一致的 DHCPv6 范围”错误,并dhcp-range=2001:xxxx:e001:c500::,56
给出“前缀长度必须至少为 64”。
所以实际的 DHCPv6(和 SLAAC)似乎只为整个网络使用了一个 /64,但我只读到每个主机都应该得到一个 /64。
那么哪个是对的?
编辑:
如果整个网络的 /64 是住宅站点的“正确”分配,为什么为每个站点分配 /56 或 /48 是当前最佳做法?
我的假设是每个主机都会被路由器分配一个/64。
PS,我的路由器接口上的 IP 如下所示:
$ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::a2f3:c1ff:fed4:3678/64 scope link
valid_lft forever preferred_lft forever
5: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet6 2001:xxxx:e001:c500::1/56 scope global
valid_lft forever preferred_lft forever
inet6 fdd0:da3b:f524::1/56 scope global
valid_lft forever preferred_lft forever
inet6 fe80::a2f3:c1ff:fed4:3678/64 scope link
valid_lft forever preferred_lft forever
7: eth0.2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet6 fe80::a2f3:c1ff:fed4:3678/64 scope link
valid_lft forever preferred_lft forever
8: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::a2f3:c1ff:fed4:3678/64 scope link
valid_lft forever preferred_lft forever
22: sit1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280
inet6 2001:xxxx:f000::32af/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::7892:987e/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::c0a8:101/64 scope link
valid_lft forever preferred_lft forever
IPv6 通常对每个子网使用 /64。路由器向 LAN 发送路由器广告或 RA。此 RA 包含 LAN 的基本设置,例如使用哪些前缀(通常是单个 /64)、路由器是否可以用作默认网关、是否允许主机自动配置以及是否有 DHCPv6 服务器LAN(以及什么样的 DHCPv6 服务器:有状态或无状态)。默认 DNS 解析器也可以在 RA 中发送。
是的,这意味着在没有 DHCP 的情况下运行网络并让一切自动运行完全没有问题。
如果允许主机自动配置自己,它们将采用 RA 中宣布的 /64 并在 /64 中给自己一个或多个地址。可能让您感到困惑的是,这显示为 eg
2001:db8:aa:b::12ab/64
。这并不意味着主机获得整个 /64,这意味着主机是LAN 上的 /64 的一部分,地址为2001:db8:aa:b::12ab
。DHCPv6 可以以两种方式工作:有状态和无状态。有状态类似于您在 IPv4 中所使用的:DHCP 服务器为主机分配地址并为它们提供配置信息,如 DNS 解析、NTP 服务器等。无状态更简单:它只提供配置信息。LAN 上可用的 DHCPv6 服务器类型在 RA 中进行通信。
自动配置和无状态 DHCPv6 的组合非常常见。
每个广播域都有一个 /64。如果您将主机隔离,因此每个子网应该只有一个,您可以为单个主机分配整个 /64。这主要用于服务器,无论如何您都使用静态 IP 分配。如果您发现需要 SLAAC 或有状态 DHCPv6,您可能应该为整个网段分配 /64,而不是单个主机。