diff --git a/src/opnsense/mvc/app/library/OPNsense/Firewall/Rule.php b/src/opnsense/mvc/app/library/OPNsense/Firewall/Rule.php index ded6144ef..79c749674 100644 --- a/src/opnsense/mvc/app/library/OPNsense/Firewall/Rule.php +++ b/src/opnsense/mvc/app/library/OPNsense/Firewall/Rule.php @@ -255,9 +255,11 @@ abstract class Rule } } elseif (!empty($interfaces[$network_name]['if'])) { $rule[$target] = "({$interfaces[$network_name]['if']}:network)"; - if ($rule['ipprotocol'] == 'inet6' && $this instanceof FilterRule && $rule['interface'] == $network_name) { - /* historically pf(4) excludes link-local on :network to avoid anti-spoof overlap */ - $rule[$target] .= ',fe80::/10'; + if ($rule['ipprotocol'] == 'inet6' && $rule['interface'] == $network_name) { + if ($this instanceof FilterRule && empty($rule['gateway']) && empty($rule['reply'])) { + /* historically pf(4) excludes link-local on :network to avoid anti-spoof overlap */ + $rule[$target] .= ',fe80::/10'; + } } } elseif (Util::isIpAddress($rule[$tag]['network']) || Util::isSubnet($rule[$tag]['network'])) { $rule[$target] = $rule[$tag]['network'];