![Proxmox 上 nat 后面的 VM 无法从内部网络访问端口](https://linux22.com/image/792952/Proxmox%20%E4%B8%8A%20nat%20%E5%90%8E%E9%9D%A2%E7%9A%84%20VM%20%E6%97%A0%E6%B3%95%E4%BB%8E%E5%86%85%E9%83%A8%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%E7%AB%AF%E5%8F%A3.png)
问题是,我能够从外部(公共互联网)访问 NAT 后面的本地网络中的特定机器的端口 25,但无法 hotmail-com.olc.protection.outlook.com[104.47.51.225]:25
从本地机器访问公共机器上的端口 25。
网络图如下:
从 Proxmox 服务器到 OPNsense 路由器是 maquerade 的规则
iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o enp0s31f6 -j MASQUERADE
已iptables
通过以下方式创建从 Proxmox 服务器到 OPNSense 路由器的端口转发 ->
iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to-destination 10.10.10.10:25
也可以通过 Web 界面从 OPNSense 路由器连接到本地计算机。当我尝试从网络外部远程登录到端口 25 时,一切正常,数据包被转发到正确的计算机,也可以通过其他端口正确接收电子邮件。
但是,当尝试从本地计算机 telnet 到端口 25 上的另一个公共 smtp 服务器时,无法连接并超时...
端口 25 上的传出连接也是允许的,因为我可以直接从 Proxmox 服务器通过端口 25 远程登录到公共服务,但不能从 OPNSense(NAT)后面的本地机器远程登录到公共服务……
我是不是遗漏了什么?
答案1
我不知道为什么,但解决方案是为PREROUTING规则提供一个接口(-i):
iptables -t nat -A PREROUTING -i enp0s31f6 -p tcp --dport 25 -j DNAT --to-destination 10.10.10.10:25
这样它就起作用了。有人能更好地解释一下为什么它以这种方式工作,并且在不提供 (-i) 规则时它不起作用吗?