温馨提示×

ubuntu iptables为何慢速

小樊
50
2026-10-09 20:49:44
栏目: 智能运维

在 Ubuntu 上 iptables 变慢(慢速) 通常不是网络本身的问题,而是 规则管理方式、模块加载或系统配置 导致的。下面按「常见原因 → 表现 → 解决办法」系统说明。


一、最常见原因

1️⃣ iptables 规则过多(线性匹配)

iptables 是 逐条匹配 的:

iptables -L -n -v
  • 规则成百上千
  • 每条包都从头匹配到尾
  • 延迟明显上升

✅ 解决:

  • 合并规则
  • 使用 ipset
  • 使用 nftables(推荐)

2️⃣ DNS 反向解析(非常常见)

执行:

iptables -L

如果 很慢,但:

iptables -L -n

很快 → 就是 DNS 问题。

iptables 默认会尝试把 IP 反解为域名。

✅ 解决:

  • 永远加 -n
  • 或禁用 reverse DNS(无法全局关,只能习惯用 -n)

3️⃣ conntrack 表过大

Ubuntu 默认启用 nf_conntrack

cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

如果:

count ≈ max

→ 连接跟踪瓶颈

✅ 解决:

sysctl -w net.netfilter.nf_conntrack_max=1000000

并优化:

net.netfilter.nf_conntrack_tcp_timeout_established=3600

4️⃣ 使用 iptables-save / restore 不频繁

很多人 一条条执行 iptables 命令,尤其脚本里:

iptables -A ...
iptables -A ...

每次都 reload netfilter → 非常慢

✅ 正确方式:

iptables-restore < rules.txt

二、Ubuntu 特定问题

5️⃣ Ubuntu 用 nftables 兼容层

Ubuntu 20.04+:

iptables == iptables-nft

部分旧规则在 nft 层效率差

✅ 检查:

iptables --version

如果是:

iptables v1.x (nf_tables)

✅ 建议:

  • 新系统直接用 nft
  • 或安装 iptables-legacy
update-alternatives --config iptables

6️⃣ UFW 后台自动重载

Ubuntu 默认 UFW:

ufw status

UFW 会:

  • 定期 reload
  • 规则复杂时卡顿

✅ 解决:

  • 不用 UFW,直接 iptables
  • 或精简 UFW 规则

三、性能相关内核问题

7️⃣ 大量日志规则

-j LOG

LOG 非常慢( especially 高 PPS)

✅ 解决:

  • 减少 LOG
  • 使用 NFLOG + ulogd

8️⃣ 虚拟环境(Docker / K8s)

Docker 会:

  • 插入大量 iptables 规则
  • 每个容器一条

✅ 解决:

  • 限制 Docker 规则
  • 使用 iptables=false + 自定义网络

四、推荐现代化方案(强烈)

✅ 使用 nftables

nft list ruleset

优点:

  • 哈希匹配
  • 规则快几个数量级
  • Ubuntu 官方推荐

五、快速自检清单

# 是否 DNS 慢
iptables -L vs iptables -L -n

# 规则数量
iptables -L -n | wc -l

# conntrack
cat /proc/sys/net/netfilter/nf_conntrack_count

# 版本
iptables --version

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • iptables -L -n 输出规模
  • 是否在 Docker / K8s 环境
  • 慢的是「命令执行慢」还是「网络转发慢」

我可以直接给你针对性优化方案。

0 踩