iptables:filter 和 mangle 有什么区别

pla*_*nor 3 linux routing iptables iproute

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

首先我添加了ip规则:

sudo ip rule add fwmark 1 prohibit
Run Code Online (Sandbox Code Playgroud)

(“禁止”仅用于测试,稍后我将其更改为某个路由表。)

然后我开始标记包裹:

sudo iptables -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)

但是电脑仍然可以访问192.168.1.0/24网络。

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

sudo iptables -t mangle -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)

它有效并且连接被阻止。

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

nin*_*alj 5

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

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

详情在net/ipv4/netfilter/iptable_mangle.cnet/ipv4/netfilter/iptable_filter.c