在 IPv6 中,您不应将子网划分为小于 /64 (RFC 5375) 的任何内容。除其他外,SLAAC 不适用于较小的子网,而且显然其他一些功能也会中断。
对于 ISP 只会为您提供单个 /64 但您在内部需要多个子网的情况,有哪些解决方法?常见的建议似乎是找到另一个将分发 /56 或 /48 的 ISP。在世界的某些地方,这可能行得通,但在我们地区(美国),由于缺乏竞争,这是不可行的。如果我的大多数客户有一个为他们所在地区服务的 ISP,他们就会很幸运。这里的很多人还在拨号上网。
我的客户没有资格从 ARIN 获得他们自己的 /48。
如果 ISP 不会给你超过 /64,那么那个 ISP 很烂。如果有任何解脱,我可以告诉你,我必须与更糟糕的 ISP 打交道。在这里,将公共 IPv4 地址从客户那里拿走并将它们放在 CGN 后面是完全正常的。如果你向他们询问 IPv6 地址,他们会告诉你他们不提供 IPv6,因为现在还不缺少 IPv4 地址,而且只要有不支持 IPv6 的服务器,他们就不会提供 IPv6,因为这是不可能的一个双栈客户端连接到仅 IPv4 的服务器。
如果任何 ISP 会给我你所拥有的,我会接受它,因为它比我迄今为止所能得到的要少。
展望未来,我建议您并行采用两种方法。
给ISP施压
尽可能给 ISP 施加压力。这包括联系其他 ISP,如果任何其他 ISP 可以为您提供更好的交易,则可能会进行切换。
确保您确实测试了如果您的路由器通过 WAN 上的 DHCPv6 请求委派的 /48、/52、/56 或 /60 会发生什么。我会测试所有四个前缀长度,以防 DHCPv6 服务器出于某种原因只会分发特定的前缀长度而忽略对其他前缀长度的请求。
充分利用你所拥有的
鉴于您可能不得不忍受一些黑客攻击,您必须问自己,哪个对 IPv4 使用 hacks 或 IPv6 对 hack 使用更少。
您可以使用一些技巧将单个 /64 扩展到许多主机。
将链接前缀转换为路由前缀
如果您在 WAN 链路上有一个 /64,但没有路由到 LAN 的前缀,您可以通过几个步骤将该 /64 转换为路由前缀。将路由器上的 WAN 接口配置为 /126 而不是 /64。在路由器上安装邻居通告守护程序(例如 ndppd),为 /64 中的每个地址通告自己的 MAC 地址,但 /126 中的 4 个地址除外。通过这两个步骤,您将拥有一个可在 LAN 上使用的路由 /64,但用于 WAN 链接的 4 个地址除外。
此 hack 的修改版本可以在多个路由器之间共享链接 /64。然后,链接前缀必须比 /126 短一些,以适应每个路由器的 IP 地址,/120 将足够短以允许多达 254 个路由器。
每个路由器显然只会得到一个比 /64 长的前缀。我建议您尽可能长地为每个路由器设置前缀,同时该路由器上的 LAN 仍有足够的 IP 地址。每个路由器的 /112 或 /120 可能是合适的。每个路由器都使用自己的 MAC 地址进行响应,以便邻居发现该路由器前缀内的任何内容。
在此变体中,每个路由器将在其 WAN 端配置相同的前缀,并将响应邻居发现请求,请求分配给其 LAN 端的前缀。显然,所有 LAN 前缀都不能相互重叠,也不能与您在 WAN 端配置的前缀重叠。
因此,如果充当网关的 ISP 路由器位于地址 2001:db8::1/64 上,那么您可以使用 2001:db8::/120 作为您的 WAN,您可以将 2001:db8::1:0/112 分配给第一个路由器,2001:db8::2:0/112 到第二个路由器,依此类推。
在 LAN 上,您可以通过子网划分或桥接将 /64 扩展到许多主机。您必须确定这两种方法中哪一种最适合您。
子网划分
如果您对 /64 进行子网划分,您也可以使用最长的前缀,这些前缀仍然有足够的地址供您需要的主机使用。不要将子网划分为 /80 前缀,而是每个子网使用 /116、/120 或 /124。如果您不使用 /64 会破坏的东西不太可能在意,并且通过使用 /116 或更长的时间,您将减少某些邻居发现 DoS 攻击(如果存在于您的任何系统中)的影响。
在这样的子网配置中,您将破坏 SLAAC,因此您需要一个 DHCPv6 服务器来响应每个分段,并在所有不支持 DHCPv6 的设备上配置静态 IPv6 地址。
桥接
桥接是另一种选择。这实质上意味着您不进行子网划分,而是将整个 LAN 作为具有 /64 前缀的单个 IPv6 段运行。(如果需要,/64 可以同时跨越 LAN 和 WAN。)
IPv6 旨在允许网桥识别每个任播地址需要转发到哪个桥接网络。这样,您就不必在 LAN 上的每个物理链路上广播数据包。
网桥还可以应用防火墙并防止 LAN 上的邻居发现欺骗。
如果桥接器上有足够的智能,原则上您可以桥接单个 /64 的交换机数量没有限制。
是的,向您的 ISP 施压以使其不吸水是首选。RIR 分配策略假设 ISP 给每个客户一个 /48;ISP 不这样做的理由绝对为零。
IPv6 不喜欢较小的子网,但据我所知,唯一应该破坏的是 SLAAC。您会遇到一些 IPv6 堆栈中的错误和假设问题,它们只是盲目地假设“/64 == 子网”,但这是一个错误,而不是功能,您可以向供应商提出修复它。另一方面,它是否在您的 ISP 给您 /48 之前得到修复......
/64 前缀更容易部署,因为 ISP 将只有一条路由需要维护,而不是两条。
我从我的 ISP 收到 /64 前缀,我想在 ISP 和我的内部网络之间放置一个防火墙。我添加了 ip6tables 规则并启用了 radvd。机器获得了 IP,但找不到外部路由。
起初我想划分我的内部网络。而不是外部/56 和内部/64 我可以有外部/64 和内部/80?然后我来到这个线程并感到失望,因为 SLAAC 在 /80 中不起作用。
我一直在研究并发现如何在具有 /64 前缀的 ISP 和具有 SLAAC 的内部网络之间放置防火墙。如果这就是您想要子网划分的原因,那么前面描述的设置会有所帮助,但不需要子网划分。
RFC 3633 使用 RFC 6603 进行了扩展,并创建了前缀委派排除。
您将需要与 RFC 6603 兼容的 DHCPv6 客户端,并且您的 ISP 的 DHCPv6 服务器也必须兼容。
WIDE-DHCPv6 有效,但我是一个 Slackware linux 用户,而且它还没有准备好。然后我找到了dhcpcd。在手册页中查找选项ia_pd以获取更多详细信息。
在我的设置中,eth0 连接到内部 LAN,eth1 以桥接模式连接到外部路由器。
ipv4 由网络管理器配置。在网络管理器中,ipv6 方法被忽略。
这是我的 /etc/dhcpcd.conf:
这是我的 /etc/radvd.conf:
然后启动dhcpcd 和radvd。
内部 LAN 客户端使用网络管理器,并将 ipv6 配置为自动。