编辑:根据下面的答案,问题是错误的。问题不是由于端口转发,而是首先尝试通过我们的公共 IP 访问本地网络上的服务器。看来您只能使用支持NAT 环回(或“发夹”)的路由器来执行此操作,这是一个非常模糊的功能,通常很难确定您是否拥有它。
这篇 MikroTik wiki 文章帮助我理解了这个问题(尽管我无法证明它的准确性......)
我有一个个人网站,它托管在我放在鞋柜里的服务器上。我已将我的域名配置为指向我的家庭网络的公共 IP 地址,并在路由器上设置了端口转发,以便将请求转发到服务器。
一切都按预期工作,除非我在家里的 Wi-Fi 上。也就是说,当我在朋友家或连接到我的移动热点时,我可以在浏览器中访问 https://<my-domain>.com,它工作正常。我可以ssh <my-domain>.com
,而且效果也很好。我什ssh <my-public-ip-address>
至可以,这也有效。
但是当我在家里的 Wi-Fi 上时,它根本不起作用。网页只是继续尝试加载,直到超时(没有 DNS 错误)。与 ssh 相同。我想最大的谜团是它ssh <my-public-ip-address>
不起作用(虽然很自然,但ssh <my-server's-LAN-ip-address>
工作正常),这让我相信路由器没有对来自本地网络的请求进行端口转发。
关于如何更好地诊断问题的任何提示?我已经和我的 ISP (Spectrum) 打了十几次电话,但他们没有给我一个明确的答案。当我尝试 ssh 到我的公共 IP 地址时,有什么方法可以确定将我的超时请求发送到哪个设备?或者有什么直接的解决方案?
希望这能为您指明正确的方向。当您在家庭网络上时,您不需要端口转发。取决于您使用的防火墙。您可以进行重定向,仅将流量重定向到服务器,或者仅使用内部 DNS 来提供服务器的内部 LAN IP。我从来没有让重定向正常工作。
当内部 LAN IP 尝试访问内部 IP 时,某些防火墙将允许重定向到 IP。有些人认为这是一种安全风险并且不允许这样做。大多数(如果不是全部)都不允许循环路由。以广域网为例,再以广域网为例。
如果可能也在路由器中,或者如果您正在运行 DNS 服务器,您可以为该主机输入一条记录,您的问题就解决了。对于调试: nslookup 可以提供帮助 nslookup .com <private IP address 会给你本地 IP。nslookup .com 会给你另一个。
您向 ISP 提出的要求超出了他们的工作范围。编辑:对不起,我在我的防火墙中看到它被称为 NAT 反射。