IPv6 子网划分为 /64 - 会出现什么问题,如何解决?

IPv6 子网划分为 /64 - 会出现什么问题,如何解决?

在 IPv6 中,您不应该将子网划分为小于 /64 (RFC 5375) 的任何子网。除其他事项外,SLAAC 不适用于较小的子网,而且显然其他一些功能也会中断。

如果 ISP 只给您一个 /64 而您内部需要多个子网,那么有什么解决方法?常见的建议似乎是找到另一个可以提供 /56 或 /48 的 ISP。在世界某些地区,这可能可行,但在我们地区(美国),由于缺乏竞争,这是行不通的。我的大多数客户很幸运,因为他们所在的地区只有一个 ISP 提供服务。这里的许多人仍在使用拨号上网。

我的客户没有资格从 ARIN 获得自己的 /48。

答案1

如果 ISP 不给你超过 /64 的地址,那么这个 ISP 就很差劲。如果这能让你松一口气的话,我可以告诉你,我必须与比这更差劲的 ISP 打交道。在这里,从客户手中夺走公共 IPv4 地址并将其置于 CGN 之后是完全正常的。如果你向他们索要 IPv6 地址,他们会告诉你他们不提供 IPv6,因为 IPv4 地址目前并不短缺,只要有服务器不支持 IPv6,他们就不会提供 IPv6,因为双栈客户端不可能连接到仅支持 IPv4 的服务器。

如果有任何 ISP 能给我你所拥有的东西,我会接受,因为它比我迄今为止所能得到的东西要好得多。

展望未来,我建议您同时采取两种方法。

向 ISP 施加压力

尽可能向 ISP 施加压力。这包括联系其他 ISP,如果其他 ISP 能为您提供更好的服务,则可能选择更换 ISP。

确保测试路由器在 WAN 上通过 DHCPv6 请求委派的 /48、/52、/56 或 /60 时会发生什么情况。我会测试所有四个前缀长度,以防 DHCPv6 服务器出于某种原因只分发特定前缀长度并忽略其他前缀长度的请求。

充分利用你所拥有的一切

考虑到你可能不得不忍受一些黑客攻击,你必须问自己,IPv4 和 IPv6 哪个攻击更少。

您可以使用一些技巧将单个 /64 延伸到许多主机。

将链接前缀转换为路由前缀

如果您的 WAN 链路上只有一个 /64,但没有路由到 LAN 的前缀,则可以通过几个步骤将该 /64 转换为路由前缀。将路由器上的 WAN 接口配置为 /126 而不是 /64。在路由器上安装邻居通告守护程序(例如 ndppd),以便为 /64 中的每个地址(/126 中的 4 个地址除外)通告自己的 MAC 地址。通过这两个步骤,您将获得一个路由的 /64,您可以在 LAN 上使用它,但用于 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 的交换机数量没有限制。

答案2

是的,向 ISP 施压,让他们不要太差劲是首选。RIR 分配政策假设 ISP 为每个客户提供 /48;ISP 绝对没有理由不这样做。

IPv6 并不喜欢较小的子网,然而应该据我所知,最容易被打破的是 SLAAC。您会遇到一些 IPv6 堆栈中的错误和假设问题,这些错误和假设只是盲目地假设“/64 == 子网”,但这是一个错误,而不是一个功能,您可以要求供应商修复它。另一方面,在您的 ISP 给您 /48 之前是否修复了它...

答案3

/64 前缀是更加容易因为 ISP 只需维护一条路由,而不是两条。

我从 ISP 收到一个 /64 前缀,我想在 ISP 和我的内部网络之间放置防火墙。我添加了 ip6tables 规则并启用了 radvd。机器获得了 IP,但找不到外部路由。

起初我想划分我的内部网络。我可以用外部 /64 和内部 /80 来代替外部 /56 和内部 /64 吗?然后我来到这个帖子,也感到很失望,因为 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:

duid
option rapid_commit
nohook resolv.conf
background
timeout 30
noipv4ll
noipv6rs
reconfigure
allowinterfaces eth1,eth0
# WAN
interface eth1
ia_pd_mix
iaid 1
# LAN
ia_pd 1/::/64 eth0/0/64

这是我的 /etc/radvd.conf:

interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 10;
MaxRtrAdvInterval 30;
prefix ::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};

然后启动 dhcpcd 和 radvd。

内部 LAN 客户端正在使用网络管理器,并将 ipv6 配置为自动。

相关内容