conntrack-tools 用法

conntrack-tools 是管理和监控 Linux 内核连接跟踪(Connection Tracking)表的瑞士军刀。它不仅是一个查看工具,还提供了强大的运维能力,可以用来排查网络问题、实现防火墙的高可用等。

下面我们来深入看看它的安装和核心用法。

📥 安装与内核模块准备

conntrack 命令通常需要单独安装:

  • Debian/Ubuntu : sudo apt install conntrack conntrackd nfct
  • RHEL/CentOS : sudo yum install conntrack-tools

使用前,需确保内核已加载连接跟踪及相关 Netlink 模块:

bash 复制代码
# 加载 nf_conntrack 与 netfilter netlink 模块
sudo modprobe nf_conntrack
sudo modprobe nf_conntrack_netlink

🔧 核心组件解析 (conntrack, conntrackd, nfct)

这个工具集主要包含三个部分:

  • conntrack :命令行管理工具,用来跟内核的连接跟踪表"对话",执行查看、删除、监听等操作。
  • conntrackd :用户态守护进程,主要用于实现防火墙的高可用(HA)。它可以在多台机器间同步连接跟踪表,实现状态化的主备切换。
  • nfct :较新的工具,目前主要用于管理连接跟踪的超时策略(cttimeout),未来可能替代 conntrack。

🛠️ conntrack 核心命令详解

conntrack 是日常运维中最常用的部分。

基础命令 (-L, -C, -D, -F)
功能 命令格式
列出所有连接 sudo conntrack -L
统计当前连接数 sudo conntrack -C
删除单个连接条目 sudo conntrack -D -p tcp --orig-src 10.0.0.1 --orig-dst 10.0.0.2 --orig-sport 12345 --orig-dport 80
清空整个连接表 sudo conntrack -F
conntrack -L 输出解读

conntrack -L 的输出信息量大,掌握它的含义是排查问题的基础:

text 复制代码
tcp      6 431999 ESTABLISHED src=192.168.1.100 dst=10.0.0.1 sport=5432 dport=3306 src=192.168.1.100 dst=10.0.0.1 sport=5432 dport=3306 [ASSURED] mark=0 use=2
  • 协议 & 状态 :tcp 和 ESTABLISHED 表示这是一个已建立的 TCP 连接。

  • 超时 :431999 是此条目的剩余存活时间(秒)。若不活跃,条目将在此时间后自动删除。

  • 二层元组 :src/dst/sport/dport 描述了一个完整的网络流。特别注意,一条记录会包含两次,分别代表原始方向 和期望回复方向的信息。

    运行 NAT 时尤其要注意:原始方向记录客户端发出的包;而期望回复方向会显示转化后的地址,便于调试。

  • 标志 :[ASSURED] 表示"确信"该连接是活跃的,条目不会被过早回收。

    • 若无此标识 :conntrack 可能尚不能100%确认该连接的状态,比如可能是一个新连接或收到了非 SYN 的 TCP 包(如 mid-stream pickup)。

高级过滤 (-p, -s, -d, --dst-nat)

你可以通过参数过滤信息,让输出更聚焦:

  • 按协议过滤 :sudo conntrack -L -p tcp
  • 按源/目IP过滤 :sudo conntrack -L -s 192.168.1.100 -d 10.0.0.1
  • 查看 NAT 条目 :sudo conntrack -L --dst-nat 192.168.1.100
实时事件监控 (-E)

-E 参数可以实时输出连接状态变更事件,对动态追踪非常有用:

bash 复制代码
sudo conntrack -E

它会显示每条连接从 [NEW] 建立到 [DESTROY] 销毁的全过程。


🚀 conntrackd 实现高可用

conntrackd 通过用户态守护进程,将主防火墙的连接表状态实时同步至备机。一旦主机宕机(通过 Keepalived 等检测),备份防火墙无缝接管,避免了已建立连接的 TCP 会话中断。其核心同步算法通常包括"无跟踪 (notrack)"和"完全容错 (FTFW)"等方式,需要精心配置。

⚙️ 性能调优:避免连接跟踪表爆炸

若服务器高负载时出现 "nf_conntrack: table full, dropping packet" 的内核日志,通常表明跟踪表已满。可在 conntrack 操作外,直接通过 sysctl 调优内核参数:

bash 复制代码
# 查看当前最大连接数与使用率
sysctl net.netfilter.nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count

# 扩大最大连接数(需保留约1/4-1/8容量给bucket)
sudo sysctl -w net.netfilter.nf_conntrack_max=524288
sudo sysctl -w net.netfilter.nf_conntrack_buckets=131072

# 长期配置写入 /etc/sysctl.conf

🤔 conntrack vs nfct

简单总结一下 conntrack 和 nfct 这两个工具的区别:

  • conntrack:功能全面,覆盖所有连接跟踪操作(查看、删除、监听等),是目前成熟的通用工具。
  • nfct:功能聚焦,当前主要用于管理超时策略(类似 nft 风格的语法),未来目标可能是完全替代 conntrack。
相关推荐
东鹏特饮3 分钟前
本机状态监控页面html
运维·css·html·css3
zhongerzixunshi13 分钟前
落实等保要求,筑牢信息系统安全防线
安全
2501_9159214319 分钟前
KXBuild CI 实操,Windows/Linux 服务器接入 Jenkins 打包 iOS IPA
服务器·windows·vscode·ios·ci/cd·个人开发·敏捷流程
Gauss松鼠会22 分钟前
GaussDB 整体架构解析
运维·服务器·网络·数据库·sql·架构·gaussdb
一技安身29 分钟前
MySQL 8.4.13 LTS 通用二进制包(Linux免安装版)完整教程
linux·mysql·adb
迷途之人不知返33 分钟前
【动态库与静态库】-3-静态链接与加载
linux
Gauss松鼠会42 分钟前
GaussDB 中 gsql 与 DBeaver(JDBC)客户端工具查询时间不一致:原因、排查与处理
运维·服务器·数据库·sql·gaussdb·经验总结
谙弆悕博士1 小时前
debian快速换源
linux·运维·windows·debian·下载·换源·网络问题
.道阻且长.1 小时前
Linux基本开发工具:编译器gcc/g++
linux·运维·服务器·职场和发展
Industio_触觉智能1 小时前
瑞芯微RK系列调试工具与量产测试手册-上|串口日志打通与JTAG兜底调试
linux·sdk·jtag·瑞芯微·调试工具·rk3576·量产调试