我有一台 Web 服务器,当我在内部网络上时,我无法通过其公共 IP 地址访问它。如果我在外部网络上,我可以通过其公共地址访问该服务器。此外,当我在内部网络上时,我能够使用其私有 IP 登录到该服务器。
正确的端口已打开(80 和 443)。
我倾向于认为这是我的内部 DNS 服务器的问题。我的 DNS 服务器位于不同的服务器上,并且所有客户端计算机都指向它。
你知道为什么我在内部网络上无法通过公共地址访问该服务器吗?
答案1
这个问题通常有两种解决方案:
水平分割 DNS:LAN 上的内部 DNS 服务器解析
yourwebsite.com
为服务器的内部 IP 地址。真实的权威公共DNS服务器解析的外部公共IP地址yourwebsite.com
。NAT 反射(其他防火墙供应商对此有许多称呼,如 NAT 环回、发夹等):启用后,如果防火墙/路由器将其自己的 IP 视为来自内部机器的数据包中的目标 IP,它会在遵守 DNAT(端口转发)规则之前将源重写为其自身(其 WAN 地址)。
我猜你还没有采取这两种解决方案。
如果你可以选择,我通常倾向于拆分 DNS,因为它允许你在内部有更大的灵活性来测试不同的子域映射到 URL(即*.dev.mycompany.com
),而不必通过以下方式将其暴露给外部:真实的外部的 DNS 条目和/或其他端口转发规则。使用 NAT 反射,您仍然需要添加任何/所有端口转发规则才能使环回正常工作,但您可能不希望这样。
我强烈建议您为您的网络服务器设置一个 DMZ;大多数商业级路由器/防火墙都具有 DMZ 端口,并且已经设置了规则以允许 LAN 到 DMZ、外部到 DMZ,但拒绝 DMZ 到 LAN。
答案2
检查内部 DNS 条目是否解析为外部地址。
nslookup webserver.domain.com
如果不是,您必须让内部 DNS 服务器将服务器的域名指向外部 IP 地址,但前提是您拥有对该域具有权威性的内部 DNS 区域。否则,递归查询很可能会返回与外部请求相同的记录。
如果您不是 DNS 管理员,您可以尝试在您的/etc/hosts
文件中添加一个条目来测试它是否有效。
Web 服务器根据外部请求在该 IP 地址上做出响应,因此听起来它绑定到了正确的 IP,因此不存在可预见的问题。