神秘的防火墙?诊断受阻传入连接的检查表

神秘的防火墙?诊断受阻传入连接的检查表

我在联想 Thinkpad T420s 上运行用于开发的 Web 服务器,但无法从三个独立的设备(分别是台式机、iPad 和手机)连接到它。

笔记本电脑和其他设备连接到运行 DD-WRT 的路由器(台式机有线,其他设备无线)。我已经确定了以下内容:

为遇到本地服务器问题的人提供的检查表

  • 服务器正在运行并监听连接(通过 http 到本地主机进行测试)。
  • netstat -a -n -b 显示某些东西正在监听正确的端口。
  • Windows 防火墙在公共、私有和域网络上被完全禁用。
  • 主机的 IP 是静态的。
  • 主机上的其他服务器也不起作用(我尝试了端口 8000、1515 上的服务器,并且测试了 ping)。
  • 在另一台(台式)机器上,我能够托管服务器并响应来自我的手机的 ping。有趣的是,我也能够从笔记本电脑和 iPad 访问桌面服务器,但首先通过手机发出请求“唤醒”服务器后,仅需一秒钟。(这对笔记本电脑上的服务器不起作用。)

除了常规的修复方法之外,我还尝试了许多其他方法:

为尝试过上述所有方法的人准备的检查清单

Wireshark 报告

我的问题有两个:

  1. Thinkpad T420s 上是否存在某些特定的东西可以秘密阻止传入连接?
  2. 最好的方法是什么系统地弄清楚为什么传入连接没有得到响应?(请参阅上面的答案)

任何帮助都将不胜感激。我已经没有主意了!

更新:现在可以了,但不知道为什么。希望这份清单对任何试图本地访问 Web 服务器的人都有用。

答案1

  1. 有许多软件防火墙和 DD-WRT 路由器功能可能会阻止传入连接。AP 隔离和禁用防火墙是我最先提出的两个建议。我的下一步是进一步检查路由器设置。我的直觉告诉我,如果您的笔记本电脑和台式机有有线连接,那么两者之间就可以正常工作。

  2. 一个用于系统地排除连接问题的绝佳工具是数据包嗅探器,例如 wireshark。此时,您正在猜测网络上正在发生什么。然后切换各种设置,希望确认猜测。既然可以亲眼看到,何必猜测呢?数据包捕获将为您提供正在发生的事情的实时读数。您可能会发现 TCP SYN 数据包从未到达服务器,或者它确实到达了服务器,但没有发出响应。或者,这可能是完全不同的问题,例如名称/ip/arp 解析问题。嗅探器本身无法解决任何问题,但它应该可以让您更好地了解现在正在发生的事情。

尝试解释数据包捕获一开始可能会有些令人生畏,请尝试专注于基础知识并忽略更复杂的部分。

Wireshark 协议分析器

编辑:现在您已经添加了数据包捕获截图,只是想跟进一下。发生的事情更加清晰。使用像 wireshark 这样的工具的挑战之一是了解协议应该看起来像。由于 HTTP 建立在正常的 TCP 连接之上,因此您在此处看到的是在端口 1515 上设置 TCP 连接的一系列失败。您看不到 HTTP 的原因是 TCP 连接在客户端和服务器之间的对话进行到这一步之前就失败了。我将通过前两次尝试的数据包编号向您介绍它:

数据包(204).150 -> .151 [SYN]“您好,我想连接到端口 1515”

数据包(207).151 -> .150 [RST,ACK]“未监听。这里没有端口 1515。关闭好吗?”

数据包(208).150 -> .151 [SYN]“您好,我想连接到端口 1515”

数据包(209).151 -> .150 [RST,ACK]“未监听。这里没有端口 1515。关闭好吗?”

ETC...

TCP 对话中的 RST 标志是强制关闭。它比正常结束对话的 FIN 标志更粗鲁。这通常意味着要么有防火墙阻止了端口 1515,要么没有任何东西在监听端口 1515。我更常见到 [RST, ACK] 来自没有服务监听该端口的服务器,而防火墙往往只是 RST 或黑洞(无响应)流量。

现在它已经正常工作了,请再进行一次捕获,以便您可以看到成功连接的样子。它应该是这样的:

.150 -> .151 [SYN] “您好,我想连接端口 1515”

.151 -> .150 [SYN,ACK]“已确认,这是我的缓冲区大小”

.150 -> .151 [ACK]“对我有用”

.150 -> .151 [ACK][HTTP/GET] “通过 HTTP 请求 html”

.151 -> .150 [ACK][HTTP/1.1 200 OK] “这是您请求的 html”

基于 TCP ACK 的一系列 HTTP 对话

.150 -> .151 [FIN]“感谢服务器,我已完成所有操作,请关闭连接”

.151 -> .150 [ACK, FIN]“我同意我们应该关闭连接”

相关内容