PREROUTING 区分 INPUT 和 FORWARD 数据包

Cra*_*een 5 iptables

我想REDIRECT在 NATPREROUTING链中执行 iptables规则,将连接重定向到端口 80 以转到 8080。但我只想对输入数据包(发往本机)而不是转发数据包(发往例如互联网)。

PREROUTING链中的规则中,有没有办法区分发往这台机器的数据包和正在转发的数据包,并以不同的方式处理它们?

以不需要在规则中枚举特定接口或 IP 地址的方式执行此操作是理想的,因为这不太灵活(例如,如果接口或 IP 地址更改,则需要更新 iptables 会更复杂规则)。

Cra*_*een 4

我刚刚遇到这个addrtype模块,它似乎能够根据目标地址是否是本地地址来区分传入的数据包。所以这可以用来区分输入和转发数据包。

例如:

iptables -A PREROUTING -t nat -p tcp --dport 80 -m addrtype --dst-type LOCAL -j REDIRECT --to-port 8080
Run Code Online (Sandbox Code Playgroud)

对于 nftables,等效的似乎是fibmodule。但我还没有测试过这个。

nft add rule ip nat prerouting tcp dport 80 fib daddr . iif type local redirect to :8080
Run Code Online (Sandbox Code Playgroud)