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
  • 协议 & 状态tcpESTABLISHED 表示这是一个已建立的 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

简单总结一下 conntracknfct 这两个工具的区别:

  • conntrack:功能全面,覆盖所有连接跟踪操作(查看、删除、监听等),是目前成熟的通用工具。
  • nfct:功能聚焦,当前主要用于管理超时策略(类似 nft 风格的语法),未来目标可能是完全替代 conntrack
相关推荐
IT界的老黄牛1 小时前
MySQL 磁盘告警 1.2TB:从衣柜原理到 gh-ost 卧底,一次释放 540GB 的实战复盘
运维·数据库·mysql
AI周红伟1 小时前
周红伟:OpenClaw安全防控:OpenClaw+Skills+私有大模型安全部署、实操和企业应用实操
大数据·人工智能·深度学习·安全·copilot·openclaw
每日综合1 小时前
自托管安全吗?UKey Wallet拆解4大风险盲区
安全
ZenosDoron1 小时前
Linux/Unix 系统中用于创建链接的命令ln
linux·运维·unix
勤劳的进取家1 小时前
传输层基础
运维·开发语言·学习·php
IDO读书1 小时前
CentOS 7 安装 xampp-linux-1.8.1.tar.gz 详细步骤(解压、启动、验证)
linux
wuminyu1 小时前
专家视角看Lambda表达式的原理解析
java·linux·c语言·jvm·c++
搬码后生仔1 小时前
【navicat不安装sql server直接远程连接服务器数据库】
运维·服务器·数据库
tingting01191 小时前
dns域名信息收集
linux·服务器·前端