最近折腾完成pve的虚拟机环境后,也部署了几个虚拟机,昨天给软路由升级一下硬盘。升级完成后,重新开机后完成硬盘的分区,并把硬盘虚拟给了群晖。今天发现登录不上群晖的IP,经过好几次排查,检查发现iptebles的规则已经全部没有了。没办法只好重新设置一次,防止下次重启后再丢失NAT规则,我尝试使用以下方法。
使用iptables保存机制
在设置好了iptables规则后,下次重启后还是会被清除,所以我们需要把它保存起来,使用
iptables-save
命令来进行备份。
-
保存现有iptables规则到
/etc/iptables-rules
iptables-save > /etc/iptables-rules
修改网卡文件,当网卡重启的时候自动执行恢复命令
vim /etc/network/interfaces
-
找到网卡eth0的那一节,在节后末尾加上载入恢复命令
pre-up iptables-restore < /etc/iptables-rules
cat /etc/iptables-rules
-
清理当前iptables规则,⚠️ 注意要在已经备份完成的时候进行删除
iptables -F
iptables -X
iptables -Z
iptables -L -n --line-numbers
iptables的规则会在重启或者开机的时候,会自动载入规则,新增iptables规则后建议也执行
iptables-save
。
直接写在网卡配置文件
表达
|
含义
|
pre-up
|
网卡启用前的动作
|
up
|
启用时候的动作
|
post-up
|
启用后的动作
|
pre-down
|
关闭前的动作
|
down
|
关闭时动作
|
post-down
|
关闭后动作
|
vim /etc/network/interfaces
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o esn5 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o ens5 -j MASQUERADE
# iptables NAT
post-up iptables -t nat -A PREROUTING -p tcp -m multiport --dport 113 -j DNAT --to-destination 10.10.10.10:22
post-up iptables -t nat -A PREROUTING -p tcp -m multiport --dport 1000:1099 -j DNAT --to-destination 10.10.10.10
post-up iptables -t nat -A PREROUTING -p tcp -m multiport --dport 223 -j DNAT --to-destination 10.10.10.11:22
post-up iptables -t nat -A PREROUTING -p tcp -m multiport --dport 1100:1199 -j DNAT --to-destination 10.10.10.11
这个方法有两个弊端
-
每条转发规则都要配置2行,分别是post-up时添加规则和post-down时删除规则。好像不写
post-down
也没有事情,应该是防止多条规则覆盖。特别是使用了
iptables-persistent
这个软件包。
-
修改转发规则后,必须执行
service networking restart
重启网卡才能使修改生效。而重启网卡会导致整机瞬间断网,如果有需要保持长连接的业务,会受到严重影响。
最终我选择第一个方法,第二个方法在测试的时候,修改了网卡文件然后重启了网卡,但是iptables规则并没有生效,要重启母鸡才可以。
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《解决Dabian下iptable重启后规则丢失》
文章链接:
https://www.jinjun.top/415.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
上一篇
Debian 10安装Proxmox VE 开NAT机器
下一篇
Debian 10 升级Debian 11 笔记