Centos 7 上的 Iptables 在重启后不起作用

Centos 7 上的 Iptables 在重启后不起作用

我在 Centos 7 上,删除了新的防火墙并安装了经典的 iptables 服务。我在里面有一台装有 Debian 8.1 和静态外部 ip 的客户机。

我愿意:

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
iptables -P FORWARD ACCEPT

和:

iptables -t nat -I PREROUTING -d *external_ip* -i enp2s0 -j DNAT --to-destination 192.168.122.72
iptables -t nat -I POSTROUTING -s 192.168.122.72 -o enp2s0 -j SNAT --to-source *external_ip*
iptables -P FORWARD ACCEPT

我的客户系统开始工作并能够上网。

然后我执行 service iptables save,重启主机,我的客户机在网络上不可用。但是当我检查 iptables 规则(iptables -t nat -L --line-numbers)时,我看到我的所有规则都在那里。当我刷新所有 iptables 规则并再次输入它们时 - 它会再次开始工作,直到再次重启。

我的朋友建议用这些规则编写一个 sh 脚本并将其添加到 rclocal,但也许有更好的解决方案?

答案1

如果你为虚拟机编写自己的 NAT 规则,而不是允许 libvirt 管理它们,那么虚拟机所连接的虚拟网络应该设置为路由网络,而不是 NAT 网络。

您可以使用以下方法修复此问题virsh net-edit <network>并进行更改:

  <forward mode='nat'/>

到:

  <forward mode='route'/>

(这完全可以通过防火墙实现;我在生产中已经有一台这样的机器了。)

答案2

如果你想使用firewalld的旧iptables服务,你可以这样做

iptables-save > /etc/sysconfig/iptables

这样,您手动插入的规则就会保存并在启动时应用,您需要确保旧的 iptables 服务在启动时启用。

相关内容