我有一台运行 Proxmox VE 的主机。
我设置了 3 个虚拟网桥vmbr[0-2]
来满足我的网络需求:vmbr0
直接在具有公共 IP 的虚拟机的主接口上运行,vmbr1
允许 NATed 虚拟机,并且vmbr2
是仅主机网络。假设我的主要公共 IP 是 12.34.56.78。
为了使 NAT 正常工作,我设置了以下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 的网络服务器。
我最初认为POSTROUTING
上述指令足以使发夹式 NAT 发挥作用。
读过经典从本地网络环回到转发的公共 IP 地址 - Hairpin NAT以及关于同一变体的多个其他答案,我尝试过:
在主机上临时设置
-P [INPUT|FORWARD|OUTPUT] ACCEPT
,检查是否由某些过滤规则导致添加到规则集,在当前规则
-A POSTROUTING -d 192.168.1.101 -p tcp --dport 80 -j MASQUERADE
之前和之后尝试POSTROUTING
但它仍然不起作用。
有想法吗?
谢谢。
答案1
要执行发夹 NAT 方法,您需要输入以下命令。
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