我正在尝试使用 iptables 根据数据包到达的设备(而不是其原始 IP 地址或端口等)来标记传入的数据包,但还没有找到让其工作的方法。
具体来说,我可以设置一个过滤器来计算每个传入的数据包(并且运行正常):
iptables -F -t mangle
iptables -A PREROUTING -t mangle -j MARK --set-mark 1
iptables -nvL
Chain PREROUTING (policy ACCEPT 185 packets, 41507 bytes)
pkts bytes target prot opt in out source destination
185 41507 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK set 0x1
但是,仅捕获来自 eth2 的数据包的过滤器似乎从未被触发(尽管所有流量都来自那里):
iptables -F -t mangle
iptables -A PREROUTING -t mangle -i eth2 -j MARK --set-mark 1
iptables -nvL
Chain PREROUTING (policy ACCEPT 101 packets, 19288 bytes)
pkts bytes target prot opt in out source destination
0 0 MARK all -- eth2 * 0.0.0.0/0 0.0.0.0/0 MARK set 0x1
从在线指南等来看,这种行为很可能是 iptables 工作方式的逻辑结果:为了解决这个问题,人们尝试使用 IMQ(在 IMQ 被放弃之前):然后转而使用 IFB。但文档线索似乎毫无进展。
所以我的问题是:如果使用 IFB 是解决这个问题的正确方法,那么通过设备标记传入流量的等效 IFB 方式会是什么样的?
或者,有没有办法将通过给定接口进入的流量分类为一组不同的领域之一?例如 eth0 --> realm_10、eth1 --> realm_11 等。这种方法似乎也应该有效,但我(再次)还没有找到任何实用的文档。