我有一个防火墙,在 1 个物理接口上有 3 个 IP 别名。这 3 个接口之间的数据包会被丢弃(ICMP、HTTP 或其他任何接口)。我们追踪到这些数据包在 FORWARD 规则中被标记为 INVALID,并根据以下规则被丢弃:
chain FORWARD {
policy DROP;
# connection tracking
mod state state INVALID LOG log-prefix 'INVALID FORWARD DROP: ';
mod state state INVALID DROP;
mod state state (ESTABLISHED RELATED) ACCEPT;
}
(也就是说,我们看到了INVALID FORWARD DROP
日志dmesg
)
这可能是什么原因造成的?
答案1
在桥接模式下使用 macvlan 而不是 IP 别名,并保持物理接口处于 promisc 模式。
例如
- eno1 是您想要使用的接口。
- 然后创建 macvlan1@eno1、macvlan2@eno1 和 macvlan3@eno1。
- 保持 eno1 处于混杂模式。
请参阅下面的顺序来创建 macvlan 接口。
# /sbin/ip link add link eno1 macvlan1 type macvlan mode bridge
# /sbin/ip addr add 192.168.1.1/24 dev macvlan1
# /sbin/ip link set macvlan1 address aa:bb:bb:dd:ee:ff up
请参阅以下命令为 eno2 打开混杂模式
# /sbin/ip link set eno1 promisc on
答案2
该INVALID
状态表示数据包未与已知连接关联(并且也未启动新连接)。我能想到的唯一原因是某些东西正在清除连接跟踪表、表溢出或条目超时太快。您可以使用 检查连接跟踪表的大小,sudo conntrack -L | wc -l
并使用 检查最大条目数cat /proc/sys/net/netfilter/nf_conntrack_max
。