这类问题我又碰上了一次。CentOS 7.9 上用 iptables 手工加了 DNAT 规则,测试正常,reboot 之后规则全没了,/etc/sysconfig/iptables 文件根本不存在,systemctl status iptables 显示 unit not found。

第一反应是「用的是 iptables -I 临时插入,重启自然不会保留」,验证下来不成立。

原因不止一个,得分开看。系统默认用 firewalld,iptables-services 没有安装;规则只写进了内核,没有 save 到配置文件;装了 iptables-services 但服务没有 enable。

动手时先确认当前规则和保存文件状态

iptables-save | head -30 && ls -l /etc/sysconfig/iptables

接着安装并启用持久化服务

yum install -y iptables-services && systemctl enable iptables

随后把当前规则落盘

iptables-save > /etc/sysconfig/iptables

剩下的就是重启后核对规则还在

systemctl restart iptables && iptables -S | grep DNAT

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

改完先别撤,确认这几项。reboot 之后 iptables -S 仍能看到 DNAT 规则,端口转发正常,systemctl is-enabled iptables 返回 enabled。

这里还有个坑。firewalld 和 iptables-services 同时开会互相覆盖,只能二选一;云上还要确认安全组和实例内规则方向一致。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189