【发布时间】:2010-10-11 22:13:41
【问题描述】:
我有一个 ASP.NET 网站托管在家里的 IIS 上。在我的家庭网络之外,我可以看到该网站,但在网络内部,它给了我一个 404 错误。我可以以本地主机的身份浏览该站点。这似乎是一个 DNS 问题,只是不知道如何解决它。
【问题讨论】:
-
您是否使用某种 NAT 设备?
-
我家里有一个标准的 DSL 调制解调器来连接互联网。
我有一个 ASP.NET 网站托管在家里的 IIS 上。在我的家庭网络之外,我可以看到该网站,但在网络内部,它给了我一个 404 错误。我可以以本地主机的身份浏览该站点。这似乎是一个 DNS 问题,只是不知道如何解决它。
【问题讨论】:
您可能已将域指向的外部可见 IP 地址实际上是您的路由器或电缆调制解调器的 IP 地址。外部连接将被路由到打开 IIS 的机器,但是当您从网络内部连接时,您将获得路由器自己的 Web 服务器及其管理界面。这不太可能有与您请求的 URL 匹配的页面,因此您会得到 404。
您应该能够通过在您的家庭计算机的主机文件中添加一个条目来修复它,以将您的域映射到启用 IIS 的计算机的内部 IP,覆盖 DNS 条目中的外部 IP。
【讨论】:
这几乎肯定是 NAT 问题。我假设您的 Web 服务器位于 NAT 路由器后面,并且您已将某些端口(可能是 80)从路由器的外部接口转发到服务器机器上的端口 80。我还假设您尝试使用解析为您的外部 IP 的名称(可能是动态 DNS 名称)访问您的网站,或者您尝试使用该外部 IP 直接访问它。这可能不会开箱即用,因为大多数 NAT 路由器只会使端口映射可用于进入路由器外部接口的数据包。
如果上述情况成立,有四种可能的解决方案:
查看路由器的配置并尝试找到类似于“NAT 环回”、“Ext-int 环回”等的内容。这将指示路由器处理来自内部接口并以外部 IP 为目的地的数据包,就像它处理来自外部接口的数据包一样,有效地循环回流量。这将触发端口转发,您的站点将正常工作。并非所有路由器都有此选项,但如果您有此选项,它将是最强大的解决方案。如果您没有,您也可以尝试将其固件更改为支持您的路由器(Tomato、OpenWRT、DD-WRT 等)的免费固件之一。我已成功使用Tomato 处理此类场景。
在路由器后面使用内部 IP,在外面使用外部 IP。
将您正在使用的 DNS 名称添加到您自己的主机文件中,使其与内部 IP 相对应。当从您自己的主机访问名称时,这将自动实现 (3)。您必须对路由器后面的每个主机重复此操作。
在路由器后面运行您自己的 DNS 服务器,使其声明对您的 DNS 记录的权限并将其解析为内部 IP,同时将其他 DNS 查询转发到您的实际名称服务器。
【讨论】: