在 Ubuntu 中,iptables 规则重启后丢失,根本原因通常只有一个:
iptables 本身不会自动持久化规则,系统重启后内核中的 netfilter 规则会被清空。
下面分点说明原因和解决方案。
iptables-save / iptables-restore,但不会自动执行netfilter-persistentsudo apt update
sudo apt install iptables-persistent
安装过程中会提示是否保存当前规则,选 Yes
sudo netfilter-persistent save
sudo systemctl enable netfilter-persistent
规则文件位置:
/etc/iptables/rules.v4
/etc/iptables/rules.v6
保存:
sudo iptables-save > /etc/iptables.rules
恢复(加到启动脚本):
iptables-restore < /etc/iptables.rules
例如加到:
/etc/rc.local
⚠️ Ubuntu 新版本默认没有 rc.local
Ubuntu 默认后端可能是 nftables
查看:
sudo update-alternatives --list iptables
如果是:
/usr/sbin/iptables-nft
说明你在用 nft 后端,但 iptables 命令依然可用,netfilter-persistent 仍然适用。
❌ “我写了iptables命令,应该会保存”
✅ 不会,必须显式保存
❌ “写在 bashrc / profile 里”
✅ 只对用户登录生效,不适用于系统网络启动
❌ “Docker 自动加的规则也会保存”
✅ Docker 规则是动态的,重启由 Docker 自己重建
Ubuntu 中 iptables 重启丢失,是因为规则没有持久化;用
iptables-persistent保存并启用即可解决。
如果你愿意,我可以: