nftables输出规则添加语法求助:计数8.8.8.8数据包失败
解决nftables统计发往8.8.8.8数据包的问题
我太懂这种被nftables模糊文档折腾的无奈了——明明是个简单的统计需求,照着示例敲却报错,还找不到原因。咱们一步步梳理,搞定这个问题:
先排查你可能踩的坑
常见的错误原因包括:
- 没提前创建对应的表和链就直接加规则
- 用了错误的网络族(比如
inet而非针对IPv4的ip) - hook位置选错了(比如用了
input而不是output,毕竟你要统计发出去的包) - 用了过时的语法(比如旧版本里的
ip dst,现在主流是ip daddr)
正确的操作步骤
1. 创建统计用的表和链
nftables的规则必须依附在表和链里,先建基础结构:
# 创建IPv4过滤表 nft add table ip filter # 创建output钩子的自定义链,优先级设为0(不影响其他规则) nft add chain ip filter stats_chain { type filter hook output priority 0; policy accept; }
这里的hook output是关键,因为我们要统计本机发往8.8.8.8的出站数据包。
2. 添加统计规则
现在可以加带counter的规则了:
nft add rule ip filter stats_chain ip daddr 8.8.8.8 counter
counter模块会自动统计匹配到的数据包数量和字节数。
3. 验证规则生效
执行以下命令查看规则和统计数据:
nft list table ip filter
然后你可以ping一下8.8.8.8:
ping -c 5 8.8.8.8
再重新执行nft list table ip filter,就能看到counter的数值已经增加了。
额外提示
如果需要让规则重启后依然生效,可以把当前规则集导出到配置文件:
nft list ruleset > /etc/nftables.conf
然后启用并设置nftables服务开机自启(不同发行版命令略有差异,比如Debian/Ubuntu用systemctl enable --now nftables)。
内容的提问来源于stack exchange,提问作者Mark Howard
相关产品推荐
相关产品推荐

