NFQUEUE 之后如何执行 REDIRECT

NFQUEUE 之后如何执行 REDIRECT

有一套行之有效的规则:

iptables -A FORWARD -i $lan_if -o $nat_if -j NFQUEUE --queue-num 0
iptables -A FORWARD -i $nat_if -o $lan_if -j NFQUEUE --queue-num 0
iptables -t nat -A PLACEMENT -o $nat_if -j MASQUERADE

然而在 NFQUEUE 之后它需要 REDIRECT,我添加了一条规则:

iptables -A FORWARD -i $lan_if -o $nat_if -j NFQUEUE --queue-num 0
iptables -A FORWARD -i $nat_if -o $lan_if -j NFQUEUE --queue-num 0

iptables -t nat -A PREROUTING -p tcp -s $pc_ip -j REDIRECT --to-port 8081

iptables -t nat -A PLACEMENT -o $nat_if -j MASQUERADE

但是 NFQUEUE 停止工作,这是因为 PREROUTING 发生在 NFQUEUE 之前。

如何使流量首先经过 NFQUEUE,然后再经过 REDIRECT?

尝试用 PREROUTING 替换 FORWARD 失败:

iptables -I INPUT -i $lan_if -m conntrack --ctstate DNAT -j NFQUEUE --queue-num 0

iptables -t mangle -A PREROUTING -i $lan_if -j NFQUEUE --queue-num 0

不是那样的

对于数据包,您需要构建以下路由:

  1. 从 $lan_if 接口,数据包应该进入 NFQUEUE --queue-num 0 队列(监控)
  2. 此后,数据包应该转到 REDIRECT --to-port 8081 (代理)

我想找到一个有效的示例代码,其中 NFQUEUE 在 REDIRECT 之前工作

也许我需要以某种方式将流拆分成按顺序执行的不同队列。我不擅长使用 iptables,所以我不知道如何正确执行。

答案1

根据IPTables结构:https://en.wikipedia.org/wiki/Netfilter#/media/File:Netfilter-packet-flow.svg

PREROUTINGfilter链在表链之前处理FORWARD。因此该规则首先执行。

要使用NFQUEUEbefore处理数据包REDIRECT,必须将跳转至放在规则之前的链NFQUEUE中。PREROUTINGREDIRECT

但是,您使用的应用程序NFQUEUE可能会因此设置而产生不同的效果。

相关内容