最近折腾完成pve的虚拟机环境后,也部署了几个虚拟机,昨天给软路由升级一下硬盘。升级完成后,重新开机后完成硬盘的分区,并把硬盘虚拟给了群晖。今天发现登录不上群晖的IP,经过好几次排查,检查发现iptebles的规则已经全部没有了。没办法只好重新设置一次,防止下次重启后再丢失NAT规则,我尝试使用以下方法。
使用iptables保存机制
在设置好了iptables规则后,下次重启后还是会被清除,所以我们需要把它保存起来,使用 iptables-save
命令来进行备份。
- 保存现有iptables规则到
/etc/iptables-rules
iptables-save > /etc/iptables-rules
- 重启后恢复iptables规则
修改网卡文件,当网卡重启的时候自动执行恢复命令
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 | 关闭后动作 |
- 编辑网卡文件,在末尾写上相关iptables规则
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规则并没有生效,要重启母鸡才可以。
最新评论
我现在基本都不是用QQ了,电脑没装,手...
我成为了范例 😃
看起来很完美。
1ro.cn 还收不,怎么联系不到人
你的feed貌似有点问题。你看下。`v...
哈哈哈,路过。看到了