我正在使用 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.c
和net/ipv4/netfilter/iptable_filter.c
。
答案2
也许 MARK 目标只能与 Mangle Table 一起使用,而不能与其他目标一起使用。查看这。