解决Debian下iptable重启后规则丢失
最近折腾完成pve的虚拟机环境后,也部署了几个虚拟机,昨天给软路由升级一下硬盘。升级完成后,重新开机后完成硬盘的分区,并把硬盘虚拟给了群晖。今天发现登录不上群晖的IP,经过好几次排查,检查发现iptebles的规则已经全部没有了。没办法只好重新设置一次,防止下次重启后再丢失NAT规则,我尝试使用以下方法。
使用iptables保存机制
在设置好了iptables规则后,下次重启后还是会被清除,所以我们需要把它保存起来,使用 iptables-save
命令来进行备份。
- 保存现有iptables规则到
/etc/iptables-rules
1 | iptables-save > /etc/iptables-rules |
- 重启后恢复iptables规则
修改网卡文件,当网卡重启的时候自动执行恢复命令
1 | vim /etc/network/interfaces |
- 找到网卡eth0的那一节,在节后末尾加上载入恢复命令
1 | pre-up iptables-restore < /etc/iptables-rules |
- 查看备份规则
1 | cat /etc/iptables-rules |
- 清理当前iptables规则,⚠️ 注意要在已经备份完成的时候进行删除
1 | iptables -F |
- 重启当前主机,看会不会重置规则
1 | iptables -L -n --line-numbers |
iptables的规则会在重启或者开机的时候,会自动载入规则,新增iptables规则后建议也执行 iptables-save
。
直接写在网卡配置文件
表达 | 含义 |
---|---|
pre-up | 网卡启用前的动作 |
up | 启用时候的动作 |
post-up | 启用后的动作 |
pre-down | 关闭前的动作 |
down | 关闭时动作 |
post-down | 关闭后动作 |
- 编辑网卡文件,在末尾写上相关iptables规则
1 | vim /etc/network/interfaces |
- 直接写在网卡的配置,每次重启的时候就自动加载规则
1 | post-up echo 1 > /proc/sys/net/ipv4/ip_forward |
这个方法有两个弊端
每条转发规则都要配置2行,分别是post-up时添加规则和post-down时删除规则。好像不写
post-down
也没有事情,应该是防止多条规则覆盖。特别是使用了iptables-persistent
这个软件包。修改转发规则后,必须执行
service networking restart
重启网卡才能使修改生效。而重启网卡会导致整机瞬间断网,如果有需要保持长连接的业务,会受到严重影响。
最终我选择第一个方法,第二个方法在测试的时候,修改了网卡文件然后重启了网卡,但是iptables规则并没有生效,要重启母鸡才可以。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自钧言极客
评论 ()
TwikooGiscus