V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
skinny
V2EX  ›  问与答

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

  •  
  •   skinny · 2021-11-13 14:28:09 +08:00 · 826 次点击
    这是一个创建于 887 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2021-11-14 16:07:54 +08:00
    skinny
        1
    skinny  
    OP
       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
        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
    lcdtyph
        3
    lcdtyph  
       2021-11-13 15:34:28 +08:00 via iPhone   ❤️ 1
    nf_nat 这个内核模块加载了吗
    skinny
        4
    skinny  
    OP
       2021-11-13 15:46:06 +08:00
    @lcdtyph 太感谢了!!!手动加载这个模块后可以了!!!
    xarthur
        5
    xarthur  
       2021-11-13 20:57:24 +08:00 via iPhone
    我软路由上跑到是最新的 Debian 11 没遇见过这个问题。
    skinny
        6
    skinny  
    OP
       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
        7
    xarthur  
       2021-11-14 13:15:05 +08:00 via iPhone
    @skinny 确实很奇怪,你在哪个平台上用的?
    skinny
        8
    skinny  
    OP
       2021-11-14 15:39:14 +08:00
    @xarthur cloudcone
    xarthur
        9
    xarthur  
       2021-11-14 16:07:54 +08:00 via iPhone
    @skinny 那可能是你的供应商提供的发行版有什么魔改了,我直接装的官方 X86 镜像没什么问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5223 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:43 · PVG 11:43 · LAX 20:43 · JFK 23:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.