内网无法访问公网IP

内网无法访问公网IP

我有一个家庭网络,其中的路由器充当互联网接入网关。在这个网络中,我有一个服务器,提供许多服务,所有服务都通过 DNAT 映射到路由器内部。

当我从网络外部访问我家的公网IP时,路由器会正确地将请求重定向到内部服务器;然而,当我从房子内部访问时,路由器会将这些连接解释为是给他自己的,例如,如果我询问公网IP 的80端口上的http服务,就会显示路由器的配置页面。

怎么了?

答案1

您正在尝试解决一个不存在的问题。只需使用您的内部 IP,这将导致数据包永远不会到达您的路由器(可能是路由器上的交换机,但不是路由器本身)。这样做在各方面都更好。以下是一些好处:

  • 您将可以访问您喜欢的任何端口(不仅仅是您在路由器中设置的端口)。
  • 您不会因为只在内部使用的服务的 NAT 条目而浪费路由器内存。
  • 您会发现记住内部 IP 变得容易得多,并且除非您告诉它,否则它永远不会改变。
  • 每个数据包将进行更少的跳跃,并且每次跳跃都会在一个交换机上,因此速度会非常快。
  • 数据包不会碰到路由器在解析数据包时设置的障碍。即使您的网络状况不佳,这也会为您带来更快的速度。
  • 您的服务器将视您的 PC 为一个独特的设备;如果您选择使用外部代理来解决此问题,那么您将始终被视为来自该代理。
  • 如果您的服务支持它,那么它可以使用外部设备无法使用的一整套协议。DHCP、WINS、真实 UDP 广播……仅举几例。
  • 所有与子网划分相关的附加安全性。

我确信还有更多原因,因为这是应该这样做的方式。此外,您可以轻松修改主机文件或 DNS 服务器以为其命名,而无需担心动态 DNS 类型的服务。

更新

有些人将这个问题解释为询问如何让笔记本电脑在网络内部和另一个网络上的工作方式相同。在我看来,这是一个完全不同的问题,大大扩大了问题的范围。我没有看到任何提及这是网络内部和外部的同一台计算机(或除 IP 之外的任何计算机)。现在我们需要询问诸如您如何连接、如何解析主机名等问题。最后,没有一个答案可以自动解决所有情况。

如果你愿意运行一个小脚本在您连接到其他网络后,我可以提供一个相当可靠的简单答案。

首先,创建一个小的批处理脚本:

ping -n 1 some.local.ip.addy
if errorlevel 1 goto :isremote
cp /Y %WINDIR%\System32\Drivers\etc\hosts.local %WINDIR%\System32\Drivers\etc\hosts
goto :eof
:isremote
cp /Y %WINDIR%\System32\Drivers\etc\hosts.remote %WINDIR%\System32\Drivers\etc\hosts

更改some.local.ip.addy为本地网络上的实际 IP。确保该 IP 始终可用(只要路由器 IP 可以响应 PING 请求,它就可以正常工作)。

然后创建一个本地 hosts 文件 ( %WINDIR%\System32\Drivers\etc\hosts.local) 并将其放入其中:

192.168.0.2 my-service.mynet.dyndns.org
192.168.0.3 my-service2.mynet.dyndns.org

使用您的实际服务器 IP。这很简单,我会添加仅在网络内部工作的条目。

然后创建一个远程主机文件(%WINDIR%\System32\Drivers\etc\hosts.remote)。将其留空,我们现在不需要它,但以后你可能会用到它。

然后设置一个dyndns.org帐户名称mynet.dyndns.org,并确保将其设置为通配符。当然,DynDNS 只是数百个选项之一动态 DNS 主机

现在,在网络之间移动后,只需运行脚本,瞧,外面的一切工作方式与里面一样,并且(只要您正确转发端口并使用正确的主机名)您只需要使用my-service.mynet.dyndns.orgmy-service2.mynet.dyndns.orgmynet.dyndns.org:24829来获取各种服务。如果该服务支持虚拟主机,那么它将知道如何处理该my-service.部分。您的路由器很可能只会传递它,因此您还需要为那些不知道如何处理 vhost 部分的服务提供端口(当然,其中大多数在客户端都有一个默认端口,因此您通常只需输入即可mynet.dyndns.org)。

如果您的本地网络上有 DNS 服务器,则无需脚本即可实现相同的操作,但如果有,那么您可能已经知道如何操作了。如果没有,那么确实值得单独提出一个问题。

答案2

如果您想在网络内部测试您的服务,并获得与网络外部用户类似的体验,则必须在路由器中创建 NAT 条目。

在路由器配置中搜索 NAT 设置并添加条目。附件是 AT&T 路由器中如何执行此操作的屏幕截图:

  1. 导航至 NAT 选项卡
  2. 选择您正在使用的服务或端口。
  3. 选择将处理该请求的服务器的设备名称。

单击此处查看 AT&T 路由器配置图像

相关内容