编辑:根据以下答案,这个问题是错误的。问题不是由于端口转发,而是尝试通过我们的公共 IP 访问本地网络上的服务器首先。看来你只能使用支持NAT 环回(或“发夹弯”),这是一个相当不明显的特征,通常很难确定您是否拥有它。
这篇 MikroTik 维基文章帮助我理解了这个问题(尽管我无法证明它的准确性......)
我有一个个人网站,托管在我放在鞋柜里的服务器上。我已将域名配置为指向家庭网络的公共 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 地址时,有没有办法确定我的超时请求被发送到哪个设备?或者有什么直接的解决方案?
答案1
希望这能为您指明正确的方向。当您使用家庭网络时,您不需要端口转发。这取决于您使用的防火墙。您可以执行重定向,即仅将流量重定向到服务器,或者仅使用内部 DNS 来提供服务器的内部 LAN IP。我从未让重定向正常工作。
当内部 LAN IP 尝试访问内部 IP 时,某些防火墙将允许重定向到 IP。有些防火墙认为这是一种安全风险,因此不允许这样做。大多数(如果不是全部)防火墙都不允许循环路由。例如,从 WAN 出去,再回到 WAN。
如果可能的话,在路由器中也可以,或者如果您正在运行 DNS 服务器,您只需为该主机添加一条记录,您的问题就解决了。对于调试:nslookup 可以提供帮助 nslookup .com <私有 IP 地址将为您提供本地 IP。而 nslookup .com 将为您提供另一个。
您向 ISP 提出的要求超出了他们的工作范围。编辑:抱歉,我在我的防火墙中看到它被称为 NAT 反射。