首页/系统/Linux 内核与性能调优速查/conntrack 命令查看跟踪表
网络栈调优98 条

conntrack 命令查看跟踪表

conntrack-tools 提供表内容、计数与事件流: 排查 NAT、丢连接、表容量问题时按条件过滤查看。

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 中执行,否则看到的条目与目标业务无关。

易错点

  • -E 事件流不设时限持续滚动,刷屏且难以定位具体问题
  • 忽略命名空间隔离,在宿主上查询容器内的跟踪表
  • 跟踪表满时只调大上限而不评估内存占用与超时时间
  • 在条目量大的网关上执行无过滤的全量输出,拖慢排查并干扰运行

数据来源与参考

  • man conntrack(8) conntrack-tools
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌