博主头像

人間になりたい!!!!!


皖ICP备2025096275号

Linux 路由运维: 旧版 iptables 规则兼容性问题报警原因及解决方案

前言

博主在使用基于 OpenWrtX-wrt 系统时, 注意到了防火墙页面有关于旧版 iptables 规则兼容性问题的报警, 于是乎着手研究引发问题的原因以及解决方案. 这篇文章即为博主的研究结果

造成问题的根本原因

博主使用的系统具体版本是 X-WRT-docker 25.04_b202506151427 Plucky. 可以注意到, 系统内是带有 Docker 环境的. 而 Docker 本身会默认管理 iptables 的规则, 但新版 OpenWrt 系统已经将防火墙组件全面转移到了 nftables. 这也就导致了 Docker 所管理的 iptables 的旧版规则与 nftables 的新版规则产生了兼容性问题.


解决方案

1. 备份当前防火墙规则

# 分别备份 iptables v4 和 v6 的规则
iptables-save > /root/iptables-backup.v4
ip6tables-save > /root/iptables-backup.v6
# 备份 nftables 规则
nft list ruleset > /root/nftables-backup.rules

2. 迁移 iptables 规则到 nftables 规则

# 创建 nftables 工作目录
mkdir /etc/nftables
# 分别转换 ipv4 与 v6 的规则
iptables-restore-translate -f iptables-backup.v6 > /etc/nftables/migrated-rules.v6
iptables-restore-translate -f iptables-backup.v4 > /etc/nftables/migrated-rules.v4

3. 整合规则并测试

# 将转换后的规则合并到现有 nftables 规则中
cat /etc/nftables/migrated-rules.v4 >> /etc/nftables.conf
cat /etc/nftables/migrated-rules.v6 >> /etc/nftables.conf
# 检查语法是否正确
nft -c -f /etc/nftables.conf
# 重新加载 nftables 规则
nft flush ruleset
nft -f /etc/nftables.conf

4. 处理 Docker 防火墙策略

# 编辑 Docker 配置文件
vim /etc/docker/daemon.json
# 添加以下内容
{
  "iptables": false
}
# 重启 Docker
/etc/init.d/docker restart

5. 验证和测试

验证防火墙页面是否不再报错, 检查系统日志和相关业务是否工作正常. 如正常, 证明修改已经生效. 如不正常, 则需回滚修改.

# 回滚修改
iptables-restore < /root/iptables-backup.v4
ip6tables-restore < /root/iptables-backup.v6

结语

鉴于此次错误的发生, 作为 Linux 路由运维人员, 我们应该定期审查规则, 清除不需要的旧规则, 保证防火墙规则整洁, 并优化规则结构, 保证规则的高效与低出错率.


本人并非专业 Linux 运维人员, 如有出错和遗漏, 欢迎各位大佬指出, 我将虚心接收各位的指教

Linux 路由运维: 旧版 iptables 规则兼容性问题报警原因及解决方案
https://blog.nanami.tech/archives/91/
本文作者 NanamiAdmin
发布时间 2025-08-31
许可协议 CC BY-NC-SA 4.0
发表新评论