conntrack 命令是什么
conntrack 来自 conntrack-tools,用于查看内核连接跟踪表的内容、计数与事件流。NAT 转换异常、新建连接失败、跟踪表接近容量上限时,都需要靠它确认条目状态与水线。它是排查状态防火墙与 NAT 网关问题的核心工具,也可以配合 -E 实时观察连接建立与销毁。
基本信息
| 条目总数 | conntrack -C |
|---|---|
| 列出条目 | conntrack -L,可加协议与状态条件过滤 |
| 统计信息 | conntrack -S,按协议与错误类型给出计数 |
| 事件流 | conntrack -E,实时输出新建或销毁的条目 |
| 容量指标 | net.netfilter.nf_conntrack_max 与 /proc/sys/net/netfilter/nf_conntrack_count |
典型使用场景
- NAT 网关排查:确认某地址端口映射是否存在对应条目
- 连接建立失败:判断是否因跟踪表满而丢弃新连接
- 连接数容量评估:对比当前条目数与上限的水线
- 疑难会话定位:按源地址、目的端口过滤出目标条目
- 实时观测:用 -E 观察某台客户端与服务的连接建立与回收
查看与统计
查看与统计
conntrack -C # 当前跟踪表条目总数
conntrack -L -p tcp --state ESTABLISHED | head # 只看已建立的 TCP 条目
conntrack -S # 按协议与错误类型的统计
conntrack -E -e new -o timestamp # 实时观察新建条目
cat /proc/sys/net/netfilter/nf_conntrack_count # 当前条目数,与上限对照常用过滤条件
| 条件 | 含义 | 用法示例 |
|---|---|---|
| -p | 按协议过滤 | -p tcp、-p udp |
| --state | 按连接状态过滤 | --state ESTABLISHED |
| -s / -d | 按源或目的地址过滤 | -s 10.0.0.5 |
| --dport | 按目的端口过滤 | --dport 443 |
| -e | 事件类型过滤 | -e new 只看新建 |
排查顺序
- 先看总量与水线,判断是否接近容量上限
- 再用过滤条件缩小到目标地址或端口
- 需要确认瞬态问题时启用 -E 事件流并限定观察时间
- 结合 conntrack -S 的异常计数,判断是否存在丢条目或表满
在条目量很大的网关上执行无过滤的全量输出会造成明显开销,也会刷屏影响判断;始终先用 -C 看规模,再用条件过滤定位。
跟踪表属于网络命名空间,容器场景下必须在对应的 netns 中执行,否则看到的条目与目标业务无关。