在 Ubuntu 里,iptables 规则默认不会自动保存,重启后就会丢失。要用下面几种方式之一来保存和恢复。
iptables-save / iptables-restore(推荐,通用)sudo iptables-save > /etc/iptables/rules.v4
如果是 IPv6:
sudo ip6tables-save > /etc/iptables/rules.v6
如果
/etc/iptables/目录不存在,先创建:
sudo mkdir -p /etc/iptables
创建或编辑 systemd 服务(Ubuntu 16.04+ 通用):
sudo nano /etc/systemd/system/iptables-restore.service
内容如下:
[Unit]
Description=Restore iptables rules
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
ExecStart=/sbin/ip6tables-restore /etc/iptables/rules.v6
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable iptables-restore
sudo systemctl start iptables-restore
netfilter-persistent(Ubuntu 官方推荐 ✅)sudo apt update
sudo apt install iptables-persistent
安装过程中会提示是否保存当前规则,选 Yes。
sudo netfilter-persistent save
规则会保存到:
/etc/iptables/rules.v4
/etc/iptables/rules.v6
sudo netfilter-persistent reload
✅ 开机自动加载,无需额外配置
以前用 iptables-save + /etc/network/interfaces 的 post-up,现在基本不用了。
| 场景 | 推荐方式 |
|---|---|
| Ubuntu 16.04+ | ✅ iptables-persistent |
| 手动控制 | iptables-save / restore |
| 脚本/自动化 | systemd 方式 |
如果你愿意,可以告诉我:
lsb_release -a)我可以给你最合适的一套完整配置。