请问你们的 Linux 系统的 nftables 到底能不能加 inet 簇的 nat 表和链?

2021-11-13 14:28:09 +08:00
 skinny

我测试过 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 命令……

949 次点击
所在节点    问与答
9 条回复
skinny
2021-11-13 14:54:14 +08:00
不能 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 ?
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
lcdtyph
2021-11-13 15:34:28 +08:00
nf_nat 这个内核模块加载了吗
skinny
2021-11-13 15:46:06 +08:00
@lcdtyph 太感谢了!!!手动加载这个模块后可以了!!!
xarthur
2021-11-13 20:57:24 +08:00
我软路由上跑到是最新的 Debian 11 没遇见过这个问题。
skinny
2021-11-14 09:22:54 +08:00
@xarthur 我这次在 Debian 11 遇到这个问题太古怪了,因为我也没搜到哪里有说需要手动加载这个模块,以我以往经验来看这不太正常,但我按楼上说的手动加载后又确实可以了,然后我重新启动后重试看看,重新启动后 lsmod | grep nf 查看已加载内核模块,只有 nf_tables 相关(因为只有默认空表),但是我再次在没有手动加载 nf_nat 内核模块的前提下重新创建 inet nat 表和链却又可以了,nft 命令自动加载了相关模块……难道 systemctl enable/start nftables.service 后必需重新启动?涨经验了。
xarthur
2021-11-14 13:15:05 +08:00
@skinny 确实很奇怪,你在哪个平台上用的?
skinny
2021-11-14 15:39:14 +08:00
@xarthur cloudcone
xarthur
2021-11-14 16:07:54 +08:00
@skinny 那可能是你的供应商提供的发行版有什么魔改了,我直接装的官方 X86 镜像没什么问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/815127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX