跳转到“输出”链时 nftables 错误

跳转到“输出”链时 nftables 错误

我试图migrateiptables脚本到nftables.在此脚本中,我想要redirect一些传出 tcp/udp 流量到本地代理(不包括某些子网)。iptables脚本有效as expected(ip 已更改):

iptables -t nat -N PROXY

iptables -t nat -A PROXY -d 1.1.1.1/32 -j RETURN
iptables -t nat -A PROXY -d 1.0.0.1/32 -j RETURN

iptables -t nat -A PROXY -p tcp -d 1.0.0.0/8 -j REDIRECT --to-ports 3127
iptables -t nat -A PROXY -p udp -d 1.0.0.0/8 -j REDIRECT --to-ports 3127

iptables -t nat -A OUTPUT -p tcp -d 1.0.0.0/8 -j PROXY

但改编后的nftables脚本给出了error

Error: Could not process rule: Operation not supported
add rule nat OUTPUT ip daddr { 1.0.0.0/8 } ip protocol { tcp, udp } jump PROXY
                                                                         ^^^^^

这是nftables我要改编的脚本:

nft add table nat

nft add chain nat PROXY { type nat hook prerouting priority -1\; }
nft add chain nat OUTPUT { type nat hook output priority -1\; }

nft add rule nat PROXY ip daddr { 1.1.1.1/32, 1.0.0.1/32 } return
nft add rule nat PROXY ip daddr { 1.0.0.0/8 } ip protocol { tcp, udp } redirect to :3127

nft add rule nat OUTPUT ip daddr { 1.0.0.0/8 } ip protocol { tcp, udp } jump PROXY

一些注意事项:

  • 在运行每个脚本之前,所有表/链/规则集都会被刷新/删除
  • 运行lsmod | grep ^nf显示所有内核模块均已加载(据我所知)
  • 一切都由 root 执行

谢谢。

编辑:

nft list ruleset给出这个结果:

table ip nat {
        chain PROXY {
                type nat hook prerouting priority filter - 1; policy accept;
                ip daddr { 1.0.0.1, 1.1.1.1 } return
                ip daddr 1.0.0.0/8 ip protocol { tcp, udp } redirect to :3127
        }

        chain OUTPUT {
                type nat hook output priority filter - 1; policy accept;
        }
}

由于错误,最后一条规则未附加。

uname -a:Linux 蜜罐 6.1.7-1-MANJARO #1 SMP PREEMPT_DYNAMIC 1 月 18 日星期三 22:33:03 UTC 2023 x86_64 GNU/Linux

答案1

查看 NFTables 配置,您可以看到nft add chain nat PROXY { type nat hook prerouting priority -1\; }包含预路由钩子的行,我在 IPTables 配置中找不到该钩子 ( iptables -t nat -N PROXY)。

因为有一个钩子,所以不可能跳转到它。

没有钩子的配置应该可以工作:

nft add table nat

nft add chain nat PROXY
nft add chain nat OUTPUT { type nat hook output priority -1\; }

nft add rule nat PROXY ip daddr { 1.1.1.1/32, 1.0.0.1/32 } return
nft add rule nat PROXY ip daddr { 1.0.0.0/8 } ip protocol { tcp, udp } redirect to :3127

nft add rule nat OUTPUT ip daddr { 1.0.0.0/8 } ip protocol { tcp, udp } jump PROXY

当您从 IPTables 迁移到 NFTables 时,我强烈建议您查看原子规则替换本机脚本环境(/etc/nftables.conf) NFTables 提供。

相关内容