关于构建原生 IPv6 路由器/防火墙的问题

关于构建原生 IPv6 路由器/防火墙的问题

我的 ISP 好心地给了我一个 /64 前缀,我正在构建一个 Ubuntu 路由器,因为我现有的大多数设备都太旧了,无法支持 IPv6。使用各种文章,我设法让它基本正常工作,但我发现的大多数示例都围绕隧道路由器,我也构建了隧道路由器,但我想我更想寻找有关原生 IPv6 路由器/防火墙的最佳实践。

作为背景,eth0 是我的内部接口,eth1 是外部接口。我目前有类似的东西:

iface eth0 inet6 static
address 2605:xxxx:yyyy:zzzz::1
netmask 64

iface eth1 inet6 static
address 2605:xxxx:yyyy:zzzz::2
netmask 64

已在 eth1 上验证了连接性,因此我的 ISP 可以正确路由我。我计划在 eth0 上使用 radvd。我还计划使用 ip6tables 作为防火墙。

我不清楚的是我应该如何(或是否)细分我的前缀。我有多个 VLAN 可以访问 eth0,但考虑到我的设备使用年限,我可能必须通过这个(虚拟)路由器路由它们,所以我最终可能会有更多接口或在 eth0 上使用某种形式的中继。

该网络上的大多数计算机都是虚拟的,主要分布在两个 VLAN 上。活跃计算机可能不足 200 台,大多数都支持 IPv6。

我最初考虑搭建一座桥而不是路由器,但我确实希望在我的网络上获得一些保护——大多数机器只需要出站访问,而且我们此时不会托管任何公共服务器。

我的问题很简单:

  1. 从最佳实践的角度来看,我应该为 VLAN/子网使用什么前缀?/72?/68?
  2. eth0 和 eth1 是否应位于不同的子网?这个问题很愚蠢吗?
  3. 我是否应该使用网桥而不是路由器?优点/缺点是什么?

我的主要问题是,似乎没有很多不简单、与 Cisco 设备无关或不使用 BGP 的本地示例。一个简单的示例可能可以回答我所有的问题。

谢谢!

答案1

路由到子网的大小应为 /64。如果每个子网不使用 /64,则自动配置等功能将无法工作。如果您从 ISP 仅获得一个 /64,那么您将无法以任何方便的方式路由它。ISP 应该为您提供一个 /48,或至少 /56,并将整个前缀路由到您的网关路由器。然后您可以创建子网和路由。

基本上,您当前的设置仅限于单个子网。因此,您应该创建一个网桥。

答案2

如果您的 ISP 没有为您提供至少一个路由到您的 IPv6 /64 网络和一个用于路由器外部接口的 IPv6 地址,我会重新考虑是否将其用作 IPv6 提供商。也可能是您误解了他们提供的内容。

您需要一个由 ISP 提供的 IPv6 地址,用于外部接口。这是他们的网络,不是您的网络,您的路由器可以连接到 Internet。它可以作为静态、DHCPv6 或通过 SLAAC 提供给您。前者和后者需要您和您的 ISP 通信地址,例如路由器的 MAC 地址或 IPV6 地址和网络掩码(CIDR 格式)。使用 SLAA,所有这些都会自动设置。

您的网络必须是 /64,否则 SLAAC 无法工作,因此 radvd 将无法工作。然后您必须手动设置所有机器的地址。不,DHCPv6 也无法工作,因为它建立在与 SLAAC 使用的相同机制之上。

如果您的 ISP 在询问时没有给您提供 /48 或 /56 网络,您应该再次重新考虑您的 ISP 选择。

因此,只需一个普通的 IPv6 连接即可连接到您的 ISP,就像使用隧道一样。还有一个用于 LAN 的路由网络,并且不小于 /64,当被要求使用 /48 或 /56 网络时,您可以将其划分为不同的 /64 网络用于 LAN。不要对 LAN 使用除 /64 以外的任何网络,否则会遇到问题。

对于防火墙,不要使用纯 ip6tables,除非您已经阅读并理解所有相关的 RFC。

我建议ufw服务器和shorewall6路由器也这样做。你还应该考虑通过 radvd(或 DHCPv6,如果你考虑使用它而不是 SLAAC)配置 DNS,然后你需要为每个客户端提供一个包来设置它。同样,在基于 Debian 的发行版(如 Ubuntu)中,安装包resolvconf

相关内容