强制使用网关在同一子网上进行通信

网络工程 路由
2021-07-10 08:50:10

我目前在专用网络上有一组四个虚拟主机,第五个主机运行 pfSense 作为网关。

与专用网络外部的主机通信时,所有流量都通过 pfSense 网关 (10.0.0.1) 路由。但是,当同一子网上的两台主机进行通信时,它们不会通过网关进行通信。我收集到这些主机意识到它们在同一个子网和交换机上,并选择通过带 ARP 的 MAC 地址进行通信,而不是使用我设置的 IP 网关。

我希望这些主机通过网关进行通信,以便我可以监控专用网络上主机之间的流量。我试图设置静态路由,例如: ip route add 10.0.0.4 via 10.0.0.1 dev eth0

此后的第一个 traceroute 将通过网关正确路由:

root@file-server ~ # traceroute 10.0.0.4
traceroute to 10.0.0.4 (10.0.0.4), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1) 0.241ms 0.287ms 0.274ms
 2  10.0.0.4 (10.0.0.4) 0.559ms 0.567ms 0.574ms

但是,如果我然后再次执行 traceroute,该路由将停止使用网关。

root@file-server ~ # traceroute 10.0.0.4
 1  10.0.0.4 (10.0.0.4) 0.345ms 0.376ms 0.362ms

我的猜测是,也许我的主机在初始跟踪路由之后用跟踪路由目标的 MAC 地址填充了它的 ARP 表,并选择在将来使用它进行通信。

如果是这样的话,我不知道如何反驳。我相信我的静态路由会优先于系统做出的任何其他决定。我想进一步研究,但实际上我不确定在哪里可以解决这个问题,因为我不确定为什么不遵守我的静态路由。

有人可以提供有关为什么我的静态路由只遵守我的初始跟踪路由的见解,以及我将如何强制静态路由到网关以进行相同子网通信?

**编辑:** 我应该补充一点,这个设置是为了实验,所以我不仅限于在现实世界中是个好主意的东西。

3个回答

您必须捕获数据包才能确定,但​​我怀疑发生的是 ICMP 重定向。

如果路由器接收到存在更好下一跳的数据包,它可以向原始发送者发送 ICMP 重定向,以通知他们在尝试与同一目的地通话时使用更好的下一跳。

初始发送方将使用新信息临时更新其路由表。我相信 10 分钟,但这可能因每个操作系统/供应商/实现而异。

通常有一种方法可以在路由器上禁用 ICMP 重定向。并且很可能有一种方法可以在主机上禁用接受 ICMP 重定向。如果不是特别明确,则通过使用 ACL 或 iptables 条目间接阻止它。

您可以在此处阅读有关 ICMP 重定向的更多信息:http : //www.cymru.com/gillsr/documents/icmp-redirects-are-bad.htm

它们现在被认为是一个安全漏洞,但是当它们被创建时,它们是基于良好的意图。然而,随着互联网变得越来越大,可信度越来越低,它们的使用已经显着减少 - 并且因此不鼓励使用。

您想研究两个称为专用 VLANARP 代理的功能

当您主机的 VLAN 配置为专用 VLAN 时,交换机将禁止您的主机(假设它有 IP 10.0.0.3)与同一 VLAN 中的其他主机通信,例如10.0.0.4当我说禁止时,我的意思是它不会将从 VLAN 中的主机传入的以太网帧转发到同一 VLAN 中的另一台主机。这意味着没有 ARP,没有 ICMP,什么都没有。

这有点违背我们在网络课上学到的一切,但这就是它的工作原理。请耐心等待,因为这不是私有 VLAN 的全部内容。

配置我们的两个主机(主机.3.4)的VLAN称为辅助 VLAN您可以将端口(通常是网关的)配置为有点特殊:此端口将位于另一个 VLAN,即VLAN。两个 VLAN 在交换机的配置中以某种方式链接(配置因供应商而异)。VLAN中的主机将能够与任何主机通信(即交换机将允许转发帧),无论它们位于VLAN 中还是次要VLAN 中。而对于回报框架:在主机二次VLAN -while仍无法搭腔其他-允许发送帧中的主机的 虚拟局域网。

从 IP 的角度来看,两个 VLAN 的所有主机都应该在同一个子网中。

所以我们来了。我们的主机 (10.0.0.3.4) 不能在它们之间通信,但可以与网关 ( 10.0.0.1)通信,并且每个扩展都可以与 Internet 的其余部分通信。

这对于不希望不同客户端进行通信并且不想在大量 /30 网络中浪费 IP 地址的托管服务提供商非常有用。但这不是你想要的。然而。

专用 VLAN 的孪生特性是ARP 代理这只是网关上的一个配置,用于指示它响应源自主机的 ARP 请求.3,并10.0.0.4使用自己的 MAC 地址请求的 MAC。然后网关向 发起它自己的 ARP 请求10.0.0.4这次主机.4看到它(网关在主 VLAN 中,还记得吗?)并做出响应。

这样,网关在您的两个主机之间执行某种合法的中间人,并且可以控制流量。它可能会执行 ICMP 重定向,您可能希望禁用它。

而已。您现在可以控制同一子网中主机之间的流量。好吧,当然,您需要一个具有正确功能的开关!;)

(或者您可以使用两个不同的 VLAN,如 Ron 所述。)

编辑:有关专用 VLAN如何工作的更多信息

主要(例如 VLAN ID 10)和辅助 VLAN(ID 20)具有不同的 802.1q 编号。

来自网关的帧将通过标记为 ID 10 的交换网络。然后交换机会将您的帧转发到中继端口以及 VLAN 1020 中的访问端口,因为设备上配置的主要和辅助 VLAN 之间存在关系。

来自隔离主机的帧将通过标记为 VLAN 20 的网络。它将在中继端口和 VLAN 10 中的访问端口上转发,但不会在 VLAN 20 中的访问端口上转发

交换机之间不涉及通信,因为不需要:这只是局部处理的问题。但建议在所有交换机上使用相同的主要/次要配置,否则会很头疼。

如果您将帧发送到您的主机标记,您将不得不玩allowed vlan一些 VLAN 映射魔术。请参阅供应商的文档。

另外,我只讨论了隔离的辅助 VLAN。还有社区辅助 VLAN,但这是另一次/另一次编辑。

这就是网络的工作原理。同一个二层网络上的主机将使用二层通信;否则是低效和不必要的。网关(路由器)连接网络。主机将检查第 3 层目标地址并将其与自己的地址和掩码进行比较。如果网络不同,它会将流量发送到其配置的网关,这实际上只是 LAN 上的另一台主机。即使您确实成功地将流量发送到网关,网关也会丢弃它,因为目的地在同一个 LAN 上(路由器在网络之间路由,而不是在同一个网络上)。

您可以配置不同的网络 (VLAN),以便从一台主机到另一台主机的流量通过网关从一个网络到达另一个网络。