在 Ubuntu 上 iptables 变慢(慢速) 通常不是网络本身的问题,而是 规则管理方式、模块加载或系统配置 导致的。下面按「常见原因 → 表现 → 解决办法」系统说明。
iptables 是 逐条匹配 的:
iptables -L -n -v
✅ 解决:
ipsetnftables(推荐)执行:
iptables -L
如果 很慢,但:
iptables -L -n
很快 → 就是 DNS 问题。
iptables 默认会尝试把 IP 反解为域名。
✅ 解决:
-n-n)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
iptables-save / restore 不频繁很多人 一条条执行 iptables 命令,尤其脚本里:
iptables -A ...
iptables -A ...
每次都 reload netfilter → 非常慢
✅ 正确方式:
iptables-restore < rules.txt
Ubuntu 20.04+:
iptables == iptables-nft
部分旧规则在 nft 层效率差
✅ 检查:
iptables --version
如果是:
iptables v1.x (nf_tables)
✅ 建议:
nftiptables-legacyupdate-alternatives --config iptables
Ubuntu 默认 UFW:
ufw status
UFW 会:
✅ 解决:
-j LOG
LOG 非常慢( especially 高 PPS)
✅ 解决:
NFLOG + ulogdDocker 会:
✅ 解决:
iptables=false + 自定义网络nft list ruleset
优点:
# 是否 DNS 慢
iptables -L vs iptables -L -n
# 规则数量
iptables -L -n | wc -l
# conntrack
cat /proc/sys/net/netfilter/nf_conntrack_count
# 版本
iptables --version
如果你愿意,可以告诉我:
iptables -L -n 输出规模我可以直接给你针对性优化方案。