我在 Centos 上安装了 KVM,有一个 VM
主机 ip:192.168.1.108,客户机 ip:192.168.100.227,局域网:192.168.1.4/24
这是我所做的一切:
我已经禁用了防火墙并安装了 iptables-services
systemctl disable firewalld
yum install iptables-services
systemctl enable iptables.service
这是我的规则
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.4/22 -d 192.168.1.108 --dport 8000 -j DNAT --to-destination 192.168.100.227:8888
iptables -t nat -A POSTROUTING -p tcp --dport 8888 -d 192.168.100.227 -j SNAT --to 192.168.100.1
iptables -I FORWARD -m state -d 192.168.100.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
最后保存我的 iptable 规则(使用超级用户)
/usr/libexec/iptables/iptables.init save
(也尝试过“service iptables save”)
在 /etc/sysconfig/iptables-config 中
IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"
现在一切正常,我可以通过 192.168.1.108:8000 访问我的 python 服务器(托管在虚拟机的 8888 端口上),但重启后 iptables 仍然启用,但这个规则
iptables -I FORWARD -m state -d 192.168.100.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
不再起作用。我必须再次添加它才能访问我的 python 服务器。
有没有其他方法可以进行此端口转发(也许使用 FirewallD)或者我遗漏了什么?
答案1
我认为您的问题来自保存 ipables 配置。为了澄清起见,您可以尝试 cat 文件:/etc/sysconfig/iptables 来检查文件内容,以便知道 iptables 是否已成功保存service iptables restart
。顺便说一句,我认为您应该尝试以下方法来保存 iptables 规则:iptables-save > /etc/sysconfig/iptables
答案2
由于我一个月前遇到过类似的问题,我的解决方法是使用 restore 命令从 etc/network/interfaces 加载我的 iptable 规则:
iptables-恢复 < /etc/iptables.rules
每次我重新启动 iptables 时,都会保留 iptables.rules 中包含的所有更新。