我测试过 Debian 10/11 两个系统,都不行都报错,但无论是系统安装包自带 manpage 还是 netfilter 官方 manpage 都说支持,而且都有实际例子,可是就是不能成功创建链,报错位置基本就是说不能在 inet 下创建 nat 链。
测试命令如下:
nft add table inet nat
# 下面命令会报错,不同版本大同小异,总之不行
nft 'add chain inet nat prerouting { type nat hook prerouting priority 0 ; policy accept ; }'
nft 'add chain inet nat postrouting { type nat hook postrouting priority 100 ; policy accept ; }'
#用下面的方法一样报错
cat > test.rules << EOF
table inet nat {
chain prerouting {
type nat hook prerouting priority 0 ; policy accept ;
}
chain postrouting {
type nat hook postrouting priority 100 ; policy accept ;
}
}
EOF
nft -f test.rules
我还在 GitHub 上搜过,很多人就是那么用的,早的两年前就这样用了。
上次我遇到这种无力吐槽的问题还是 ip route 命令和 ifquery 命令……
1
skinny OP 不能 append 了,nftables 官方 wiki 说:Since Linux kernel 5.2, there is support for performing stateful NAT in inet family chains.
但是我的 Debian 11: uname -r 输出 5.10.0-9-amd64 还是没法理解? BUG ? |
2
dndx 2021-11-13 14:55:19 +08:00
我在树莓派上一直是用的 `inet` 的 `nat` 没遇到问题,怀疑是你的内核版本不够高。
Linux 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux |
3
lcdtyph 2021-11-13 15:34:28 +08:00 via iPhone 1
nf_nat 这个内核模块加载了吗
|
5
xarthur 2021-11-13 20:57:24 +08:00 via iPhone
我软路由上跑到是最新的 Debian 11 没遇见过这个问题。
|
6
skinny OP @xarthur 我这次在 Debian 11 遇到这个问题太古怪了,因为我也没搜到哪里有说需要手动加载这个模块,以我以往经验来看这不太正常,但我按楼上说的手动加载后又确实可以了,然后我重新启动后重试看看,重新启动后 lsmod | grep nf 查看已加载内核模块,只有 nf_tables 相关(因为只有默认空表),但是我再次在没有手动加载 nf_nat 内核模块的前提下重新创建 inet nat 表和链却又可以了,nft 命令自动加载了相关模块……难道 systemctl enable/start nftables.service 后必需重新启动?涨经验了。
|