关于iptables nat表数据包与字节计数器统计范围及TCP连接计数的技术咨询
关于iptables nat表数据包与字节计数器统计范围及TCP连接计数的技术咨询
嘿,我来帮你拆解这两个问题:
一、NAT规则的数据包/字节计数器统计范围
先看你给出的这条DNAT规则输出:
pkts bytes target prot opt in out source destination 60 3680 DNAT all -- wan0 any anywhere 1.2.3.4 to:2.3.4.5
这里的pkts和bytes计数器,统计的是匹配这条DNAT规则并被执行NAT操作的数据包——也就是从wan0接口进入、目标地址为1.2.3.4的入站流量,不会包含经过NAT后从内部服务器返回给客户端的出站数据包。
要明确:NAT表的规则计数器是按「规则匹配触发」来统计的,不同类型的NAT规则对应不同方向的流量:
- DNAT规则一般挂载在
PREROUTING链,只统计需要做目标地址转换的入站数据包; - SNAT规则一般挂载在
POSTROUTING链,只统计需要做源地址转换的出站数据包;
返回流量会走对应的反向规则(或由连接跟踪自动处理),不会再触发这条DNAT规则的计数。
二、如何统计TCP连接数
你提到想统计TCP连接(会话)数量,但iptables -t nat -v -L给出的是数据包计数,和连接数完全不是一个概念——一个TCP会话可能包含几十个甚至上百个数据包,计数器只算匹配规则的包数,没法直接换算成连接数。
更靠谱的方式是用连接跟踪工具conntrack(Ubuntu 20.04默认应该已安装,未安装的话可以用apt install conntrack补上):
- 统计所有TCP连接数:
conntrack -C -p tcp - 统计已建立的TCP连接数(更贴合实际有效会话数):
conntrack -L -p tcp --state ESTABLISHED | wc -l
连接跟踪会记录每个TCP会话的完整状态,用它统计的连接数是准确的,比看NAT数据包计数器靠谱多了。
备注:内容来源于stack exchange,提问作者rwfbc
相关产品推荐
相关产品推荐

