我目前在专用网络上有一组四个虚拟主机,第五个主机运行 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 表,并选择在将来使用它进行通信。
如果是这样的话,我不知道如何反驳。我相信我的静态路由会优先于系统做出的任何其他决定。我想进一步研究,但实际上我不确定在哪里可以解决这个问题,因为我不确定为什么不遵守我的静态路由。
有人可以提供有关为什么我的静态路由只遵守我的初始跟踪路由的见解,以及我将如何强制静态路由到网关以进行相同子网通信?
**编辑:** 我应该补充一点,这个设置是为了实验,所以我不仅限于在现实世界中是个好主意的东西。