我试图migrate
从iptables
脚本到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 提供。