我知道将rp_filter
其设置为 1 后,linux 会检查路由表以查看输入数据包是否“属于”该网络(如果不属于则将其丢弃)。
那么这究竟是什么时候发生的?它会查找哪个路由表?
- 它是否使用路由策略
ip rule
? - 什么时候会发生与 iptables 链相关的问题?如果我
fwmark
在 iptablesPREROUTING
链中设置,并为该 fwmark 设置路由策略,它会使用不同的路由表吗?
答案1
根据我从https://serverfault.com/a/932206/491739以及我自己的实验:
- 是的,它确实使用基于策略的路由(
ip rule
)。 iptables
这是基于以下示例规则起作用的事实而发生的(我可以看到在数据包最终被丢弃之前记录的数据包):iptables --append PREROUTING --in-interface tun12 --match set --set ROUTE_TO_VPN_IPSET src \ --table mangle -j LOG --log-prefix "Mark from VPN: "
然而,内核fwmark
在寻找反向路由时会忽略,正如我从https://serverfault.com/a/932206/491739,并最终丢弃使用fwmark
而不是明确 IP 地址路由的流量的返回数据包。
笔记那https://serverfault.com/a/932206/491739确实包含一些关于如何启用内核来尊重fwmark
(即,设置src_valid_mark
使用策略路由数据包的接口的选项)的想法,我无法测试它,因为我的路由器上的内核似乎不支持它。