我完全被难住了,也没有太多的线索可以参考,所以我希望有人能指出哪里出了问题。
我已经成功运行了 DNS 服务器和 Web 服务器,它们都位于路由器后面的独立机器上。我的域名服务器指向包含 a 记录的 DNS 服务器。路由器将所有 DNS 流量(从端口 53 进入)发送到 DNS 服务器,并将所有 HTTP 流量(端口 80 和 443)路由到 Web 服务器。
多年来一切都运行良好……直到突然间它不工作了。现在,每当我尝试查看我托管的任何网站时,它都不起作用。“页面加载时,与服务器的连接被重置”。
当我尝试从网络内部查看网站时,我的每个域名都指向路由器。
奇怪的是,如果我从任何地方查看配置为使用 SSL 的网站,它就可以正常工作,所以它似乎只是一个端口 80 问题。
我最近在网络服务器 (Windows Server 2008) 上安装了 SP2,除此之外,我确信没有其他变化。路由器上的 NAT 表全部正确。
我不明白!如有任何建议,我将不胜感激。
答案1
您需要确定哪个部分不起作用。将“浏览网页”分解为各个部分:
- 解析 DNS
- 连接到 IP
- 接收响应
因此,首先您需要验证 DNS 解析是否正确。理想情况下,这应该从您网络之外的机器(我假设您正在向外部客户提供页面)进行。
其次,首先在内部通过 telnet 连接到端口 80。对我来说,这是:
greeblesnort@greeblesnort:~$ telnet 172.18.1.100 80
Trying 172.18.1.100...
Connected to 172.18.1.100.
Escape character is '^]'.
GET / <<<<<<<<<<<<<<type this and hit <ENTER> twice
HTTP/1.0 301 Found <<<<<<<<<<<<this, while a "bad" response, *is* a response from the web server
如果成功(服务器响应有效),则表明服务器正在该端口上响应。如果您比较挑剔,可以使用:
GET /index.htm HTTP/1.0
将 index.htm 替换为您的服务器默认使用的页面。这应该会返回一个有效的页面:
HTTP/1.1 404 Not Found
Content-Type: text/html
Server: Microsoft-IIS/7.0
x-info: result=success;server=web01;build={IIS}
Date: Fri, 18 Sep 2009 21:56:47 GMT
Connection: close
Content-Length: 12579
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
...
现在,如果您可以从外部执行此操作并接收任何类型的有效服务器响应,则问题出在服务器本身(代码或配置)上。
第三,您需要验证您的服务器是否能够将其响应传回给客户。这可能更多地是 SLB 设置的问题,因为 NAT、服务器和虚拟都是不同的地址,并且服务器可以通过与请求发送地址不同的地址 (异步路由) 向客户传回信息。
希望这能有所帮助。如果你提供更多信息,我相信我们中的一些人会愿意帮助你验证外部的东西……
编辑:好吧,如果 91.135.5.118 是正确的分辨率,那么两个名称服务器的 DNS 似乎都没有问题。
但是,当我尝试时:
[greeblesnort@fjdx421 greeblesnort]$ telnet www.enfotext.com 80
Trying 91.135.5.118...
Connected to cust118-dsl91-135-5.idnet.net (91.135.5.118).
Escape character is '^]'.
GET /index.htm HTTP/1.0
它超时了。
这通常会让我建议您与您的 ISP 讨论他们可能阻止入站端口 80 请求的问题。但是,如果他们允许所有其他看似开放的端口,那么这样做就有点愚蠢了。
我进行了数据包捕获,只是为了查看网络上发生了什么,结果发现您的服务器实际上从未完成 TCP 握手。它似乎收到了初始 SYN,返回了 SYN/ACK,我发送了最终 ACK,而您的服务器一直尝试重新发送 SYN/ACK。
我打赌会转移到上游或您服务器上的防火墙配置。
答案2
从您的机器上打开命令提示符并输入 nslookup。这将显示您正在使用的 DNS 服务器,输入 debug。这样您就知道正在解析什么以及哪个 DNS 服务器正在解析它,然后您可以从那里获取它并更新记录或条目(如果需要)。
答案3
服务器的内部 IP 地址与路由器上的外部 IP 地址不同,对吗?因此,当您尝试从内部计算机连接到 www.whatever.com 时,它会尝试连接到外部 IP 地址。大多数路由器无法正确处理这种情况。
因此,您需要做的是覆盖内部计算机的 DNS,以便内部计算机使用您的 Web 服务器的内部 IP 地址。
快速而简单的解决方法是修改每台内部计算机上的 hosts 文件 (Windows:C:\windows\system32\drivers\etc\hosts;Linux:/etc/hosts),以包含 Web 服务器的内部 IP 地址。
另一种方法是运行另一个内部 DNS 服务器,该服务器会提供服务器的内部 IP 地址。然后将所有内部系统配置为使用此 DNS 服务器。
答案4
已解决:非常愚蠢的问题,不知何故路由器已重新配置为允许从互联网访问控制面板,因此它显然试图获取指向外部 IP 的所有端口 80 流量。
感谢您提供的所有帮助!