使用公网IP访问内网IP

使用公网IP访问内网IP

我有一个带有公共 IP 地址 ( 201.206.x.x) 的 DSL 调制解调器,并且在我的内部网络中有一个 Web 服务器 ( 192.168.0.50)。

我设置了调制解调器将对端口 80 的请求转发到我的 Web 服务器,因此,如果我201.206.x.x从我的网络外部访问,它会显示我的网页,如果我192.168.0.50从我的网络内部的计算机访问,也会发生同样的情况。

现在,问题是当我尝试201.206.x.x从我的内部网络访问时,浏览器会尝试连接到 DSL 调制解调器配置,而不是将我的请求重定向到我的 Web 服务器。

我必须在调制解调器中更改哪些设置才能设置此重定向?

答案1

问题在于数据包重写通常只能在穿越防火墙时进行。一般来说,当请求来自请求将被重写的同一网络时,路由器无法执行必要的重写。解决此问题的常见方法是将 Web 代理放置在网络外部,使请求通过防火墙循环回来。

我怀疑您的具体问题是您想通过其 DNS 主机名访问该网站。您可以使用“水平分割”DNS 来处理这个问题,这样它就会注意请求的来源并做出适当的回答:如果请求来自您的网络内部,它会将 192.168.0.50 分配给来自您网络的请求,并将公共 IP 分配给其他所有人。

这些建议中的任何一个都可以在您的网络之外的任何主机上实现,例如(免费)Amazon EC2 微型实例。

答案2

我想说,当 @Insyte 谈到该问题是 DNS 解析问题时,他/她发现了一些问题......这意味着问题在于数据包重写(再次阅读 @Insyte 的帖子以了解该解释)。

假设您有以下设置:

  1. 公共 IP:201.206.x.y
  2. 私有 IP:192.168.0.50
  3. 对 IP 上的所有 80(如果使用 SSL,则为 443)端口进行端口转发201.206.x.y192.168.0.50

然后,当您在内部网络中时,在浏览器中输入以下内容:

http://www.yourwebsite.com

然后就会出现错误。因此,解决方案是:破解你的 hosts 文件。

在 Windows 上,转到C:\windows\system32\drivers\etc\hosts (注意,该文件没有扩展名)。在 Linux 上,该文件位于/etc/hosts

如果您在记事本中打开该文件,则可以看到用于覆盖 DNS 的任何条目。如果您希望更新该文件,则需要以管理员权限打开记事本(或您用于编辑文件的任何程序)——否则您无法保存该文件。

将其添加到您的主机文件:

192.168.0.50 www.yourwebsite.com

然后重启浏览器,输入 URL,然后就可以了!它开始工作了。这意味着,您的浏览器不依赖 DNS 来将您的域名解析为 IP。相反,我们将覆盖它并说:浏览器直接访问我的内部 IP 来获取该域名,而不需要向 DNS 询问 IP 地址

如果您在办公室,那么您可以让所有需要访问此内部网站的人破解他们的主机文件,或者如果您有一个内部 DNS,那么您可以在其中添加一个条目。

另一个想法是拥有一个内部代理服务器(用于所有网络浏览等),然后破解代理服务器上的 hosts 文件。这意味着你的浏览器会说,代理,你能帮我获取资源吗http://www.mywebsite.com代理说当然,因为我被告知要忽略该域名的 DNS,所以我只需提供已在 hosts 文件中硬编码的 IP

答案3

这是一些路由器处理从内部地址发往其公共地址的流量时常见的问题 - 它们不遵循与来自网络外部的请求相同的端口转发规则。您需要在路由器中查找的是NAT 反射。这将允许路由器处理公共 IP 的内部请求,以使用相同的端口转发规则,就像请求来自网络外部一样。

答案4

也许问题在于允许远程管理。

相关内容