我想匹配来自服务器的每个流量,但它位于同一接口。
MAC 88:7e:25:d3:90:0b > ens19 > table 147
所以我制定了这个nftables
规则
table ip filter { # handle 3
chain input { # handle 1
type filter hook input priority filter; policy accept;
iif "ens19" ether saddr 88:7e:25:d3:90:0b meta mark set 0x00000093 # handle 2
iif "ens19" ether saddr 08:05:e2:04:ce:b3 meta mark set 0x00003417 # handle 3
}
}
以及指定路由表的 ip 规则
ip rule add from all fwmark 0x93 lookup 147
ip rule add from all fwmark 13335 lookup 147
ip -6 rule add from all fwmark 0x93 lookup 147
ip -6 rule add from all fwmark 13335 lookup 147
但我用它tshark
来查看它是否有效,它显示没有传入的包,并且我无法 ping 该地址。所以匹配收入流是有问题的。
如果我使用
from all iif ens19 lookup 147
代替
ip -6 rule add from all fwmark 0x93 lookup 147
ip -6 rule add from all fwmark 13335 lookup 147
nftables
它有效,所以我的规则一定有问题。
有谁知道为什么?
答案1
hook input
专门用于本地主机是最终目的地的数据包 – 它只能到达后路由决策已经做出,因为 netfilter 就是这样知道哪些数据包通过“钩子输入”链处理以及哪些数据包通过“钩子转发”链处理。所以到那时,你的政策规则就不再重要了。
相反,我认为你需要hook prerouting
(并且可能需要priority raw
?)。