iptables:filter 和 mangle 之间有什么区别

iptables:filter 和 mangle 之间有什么区别

我正在使用 iptables 来标记包并希望根据标记进行路由。

首先我添加了ip规则:

sudo ip rule add fwmark 1 prohibit

(“禁止”只是为了测试,稍后我会将其更改为某些路由表。)

然后我开始标记包裹:

sudo iptables -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1

但计算机仍然可以访问192.168.1.0/24网络。

经过很长时间的谷歌搜索和挣扎,我尝试:

sudo iptables -t mangle -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1

它有效,但连接被阻止。

在第一种情况下,使用过滤器的默认表。所以我的问题是mangle表和filter表有什么区别?在什么情况下应该使用哪一种?据我了解,在路由策略之前都会查阅所有这些表,那么为什么过滤表不能正常工作呢?

答案1

mangle用于破坏(修改)数据包,而filter仅用于过滤数据包。

这样做的结果是LOCAL_OUT,在遍历表并获得过滤决策之后,mangle可以尝试重做路由决策,假设过滤决策不是丢弃或以其他方式控制数据包,通过调用ip_route_me_harder,而filter只是返回过滤决策。

详细信息请参见net/ipv4/netfilter/iptable_mangle.cnet/ipv4/netfilter/iptable_filter.c

答案2

也许 MARK 目标只能与 Mangle Table 一起使用,而不能与其他目标一起使用。查看

相关内容