Important notices
Before you add a new report, we ask you kindly to acknowledge the following:
Describe the bug
I am migrating an existing bridge-based VLAN setup from an older OPNsense installation.
The setup follows the documentation for a layer-2-bridge as described here: https://docs.opnsense.org/manual/how-tos/lan_bridge.html
Given a bridge consisting of two VLAN interfaces:
- vlan0.12.30 (parent: lagg0(igc1,igc2))
- vlan1.0.30 (parent: ax0)
The bridge itself has an IPv4 address for routing.
The devices behind both vlans can communicate with all other subnets and vice versa (Layer 3, routing involved). But the devices behind vlan0.12.30 cannot communicate with the devices in the same subnet behind vlan1.0.30 and vice vesa (Layer 2, bridging use case).
The surprising part is that the bridge behaves like a transparent Layer-2 bridge for ARP, but requires an explicit Layer-3 pass rule for forwarding IP traffic between bridge members. This is unexpected because no routing is involved.
To Reproduce
Bridge filtering sysctls are set:
net.link.bridge.pfil_bridge=1
net.link.bridge.pfil_member=0
net.link.bridge.pfil_local_phys=0
Steps to reproduce the behavior:
- Setup a bridge as described
- Connect one client device to vlan0.12.30
- Connect another client device to vlan1.0.30
- arping from device 1 to device 2 --> passed
- ping from device 1 to device 2 --> blocked (default deny / state violation)
Expected behavior
Following the given documentation, I expected a layer-2-bridging, not only for ARP but also for IP. IIRC this was the behavior in the older OPNSense setup, what I unfortunately cannot test anymore.
Describe alternatives you considered
Workaround
Adding the following firewall rule on the BRIDGE interface immediately restores forwarding:
- Action: Pass
- Interface: bridge30
- Source: bridge30 net
- Destination: bridge30 net
- Resulting pf rule: pass in log quick on bridge30 inet from (bridge30:network) to (bridge30:network) keep state
Relevant log files
Packet captures show:
- lagg0: ICMP Echo Request visible
- vlan0.12.30: ICMP Echo Request visible
- bridge30: ICMP Echo Request visible
- vlan1.0.30: NO ICMP packet
- ax0: NO ICMP packet
Additional context
Has bridge filtering semantics changed recently?
If this is intentional, I think the documentation (e.g. https://docs.opnsense.org/manual/how-tos/lan_bridge.html) should explicitly mention that bridge-local traffic must be permitted by firewall rules on the bridge interface when pfil_bridge=1.
If it is not intentional, this may be a regression.
Environment
Software version used and hardware type if relevant, e.g.:
OPNsense 26.4.1 Business Edition
FreeBSD 14.3-RELEASE-p15
DEC740
Important notices
Before you add a new report, we ask you kindly to acknowledge the following:
Describe the bug
I am migrating an existing bridge-based VLAN setup from an older OPNsense installation.
The setup follows the documentation for a layer-2-bridge as described here: https://docs.opnsense.org/manual/how-tos/lan_bridge.html
Given a bridge consisting of two VLAN interfaces:
The bridge itself has an IPv4 address for routing.
The devices behind both vlans can communicate with all other subnets and vice versa (Layer 3, routing involved). But the devices behind vlan0.12.30 cannot communicate with the devices in the same subnet behind vlan1.0.30 and vice vesa (Layer 2, bridging use case).
The surprising part is that the bridge behaves like a transparent Layer-2 bridge for ARP, but requires an explicit Layer-3 pass rule for forwarding IP traffic between bridge members. This is unexpected because no routing is involved.
To Reproduce
Bridge filtering sysctls are set:
net.link.bridge.pfil_bridge=1
net.link.bridge.pfil_member=0
net.link.bridge.pfil_local_phys=0
Steps to reproduce the behavior:
Expected behavior
Following the given documentation, I expected a layer-2-bridging, not only for ARP but also for IP. IIRC this was the behavior in the older OPNSense setup, what I unfortunately cannot test anymore.
Describe alternatives you considered
Workaround
Adding the following firewall rule on the BRIDGE interface immediately restores forwarding:
Relevant log files
Packet captures show:
Additional context
Has bridge filtering semantics changed recently?
If this is intentional, I think the documentation (e.g. https://docs.opnsense.org/manual/how-tos/lan_bridge.html) should explicitly mention that bridge-local traffic must be permitted by firewall rules on the bridge interface when pfil_bridge=1.
If it is not intentional, this may be a regression.
Environment
Software version used and hardware type if relevant, e.g.:
OPNsense 26.4.1 Business Edition
FreeBSD 14.3-RELEASE-p15
DEC740