为什么 pfSense 会忽略 arp 请求?

网络工程 arp 感知
2021-07-31 06:55:20

我将 pfSense 2.4.3p1 配置为透明防火墙。它在具有两个vtnet半虚拟化适配器的虚拟机中运行

  • WAN ( vtnet0) 连接到包含网关、DNS 和 DHCP 服务器的“远端”网络
  • LAN ( vtnet1) 连接到包含客户端的“近端”网络

防火墙将明确加入两个网段的广播域,使它们都在 192.168.1.1/24 内。NAT 被禁用。pf将被启用,但现在它正在通过所有流量,同时我调试其他问题。存在包含成员 WAN 和 LAN 的网桥,分配给接口 LANBR。

我尝试了几种配置,但似乎没有一个有工作桥:

  • 广域网有DHCP IP,其他没有IP:广域网收到IP,可以ping通192.168.1.1的网关,但局域网客户端无法访问防火墙或网关
  • LANBR 具有 DHCP IP:无法从 WAN 接口获取 IP
  • LAN 具有 DHCP IP:无法从 WAN 接口获取 IP

在任何情况下,LAN 上的客户端都无法 ping WAN 上的主机。在客户端尝试 ping 192.168.1.1 时运行 tcpdump 显示 ARP 请求来自客户端,被 pfSense 忽略,传递到 WAN,并且没有返回响应:

在客户端

ping 192.168.1.1

Pinging 192.168.1.1 with 32 bytes of data:
Reply from 192.168.1.163: Destination host unreachable.
Reply from 192.168.1.163: Destination host unreachable.

在防火墙上

tcpdump -e -i vtnet0 -n -t arp

0a:... > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.windows, length 28
0a:... > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.windows, length 28
0a:... > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.windows, length 28
0a:... > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.windows, length 28

这尤其奇怪,因为 pfSense 肯定知道该主机:

arp -a
? (192.168.1.1) at 0c:... on vtnet0 expires in 1170 seconds [ethernet]

这是怎么回事?

2个回答

存在包含成员 WAN 和 LAN 的网桥,分配给接口 LANBR。

网桥是 L2 设备,仅对 IP 寻址感兴趣,目的是配置/管理网桥本身。要用作网桥,它不需要 IP 地址。

任何作为网桥成员的端口都不应该对拥有/获得 IPv4 或 IPv6 地址感兴趣,并且设备的配置逻辑应该阻止这种情况。


编辑(评论后):

似乎 pfsense 的网桥 IP 地址可能处于活动状态的概念比我预期的要灵活一些;网桥的 IP 地址可能位于成员端口或虚拟网桥接口上。

尽管如此,我还是建议避免将网桥的 IP 地址分配给任何成员接口——这在一定程度上抵消了网桥是什么以及它应该如何工作。交换机端口也没有 IP 地址,如果交换机(只不过是多端口桥接器)有 IP 地址,则它位于 SVI(交换机虚拟接口)上,同时排除了配置“路由端口”的可能性在当代 L3 交换机上。

因此,我坚持我的建议(如下)只在虚拟网桥接口上运行网桥的 IP。


如果在所有的桥的IP地址应该是LANBR接口上[1]; 如果它工作正常,则该地址可以从网桥的任何成员端口访问,如果成员接口上的 L2 防火墙策略或网桥本身允许。

话虽如此 - 如果没有流量通过网桥(无论它是否有 IP),那么就会有一些东西阻止它。默认的 L2 防火墙策略,也许,尤其是关于广播?DHCP 是基于广播的,首先...


编辑(评论后):

引自:https : //www.netgate.com/docs/pfsense/interfaces/interface-bridges.html

默认情况下,流量在成员接口上过滤,而不是在桥接口本身上过滤。通过在“系统可调参数”选项卡上的“系统”>“高级”下切换 net.link.bridge.pfil_member 和 net.link.bridge.pfil_bridge 的值,可以更改此行为。将它们分别设置为 0 和 1,则将仅在桥上执行过滤。

我觉得里面有提示。L2 过滤规则(或删除规则)必须考虑桥接和/或桥接成员端口的给定过滤模式。


[1] 但是,通过 DHCP 分配该地址可能会很棘手;给定的 DHCP 客户端可能有一些问题或需要一些帮助来确定用于 DHCP 请求的客户端标识符或 MAC 地址和网卡。首先一定要尝试静态寻址,IP 地址在同一子网内,但在 DHCP 范围之外。

事实证明,需要将半虚拟化网络端口置于混杂模式。一旦完成,一切都会按预期进行。