在VM主机和发夹式NAT上桥接networking

我有一台主机运行Proxmox VE。

我设置了3个虚拟网桥vmbr[0-2]来处理我的networking需求: vmbr0直接在具有公有IP的虚拟机的主接口上运行, vmbr1允许vmbr1虚拟机,而vmbr2是仅主机networking。 假设我的主要公开IP是12.34.56.78。

为了使NAT工作,我build立了以下iptables规则集:

 -A PREROUTING -d 12.34.56.78 -i vmbr0 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 192.168.1.101 # and other rules like this one for different ports to different local IPs -A POSTROUTING -s 192.168.10.0/24 -o vmbr0 -j SNAT --to-source 12.34.56.78 

现在让我们说,我有一个虚拟机在vmbr1与IP 192.168.1.102。

本机无法使用公共IP 12.34.56.78访问192.168.1.101的networking服务器。

我最初以为上面的POSTROUTING指令足以让发夹式NAT工作。

阅读规范回送转发公共IP地址从本地networking – 发夹NAT和多个其他答案在同一个变种,我试过了:

  • 在主机上临时设置-P [INPUT|FORWARD|OUTPUT] ACCEPT ,以检查是否可能由某些过滤规则引起

  • -A POSTROUTING -d 192.168.1.101 -p tcp --dport 80 -j MASQUERADE到规则集,在当前POSTROUTING规则之前和之后尝试

但仍然不起作用。

想法?

谢谢。

要做发夹NAT方法,你需要input下面的命令。

 iptables -t nat -A PREROUTING -d 12.34.56.78 -i vmbr1 -p tcp -m multiport --dports 80,443 -j DNAT \ --to-destination 192.168.1.101 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o vmbr1 -d 192.168.1.254 -p tcp \ --dport 80 -j SNAT --to-source 192.168.1.101