我在家里的实验室中发现 TCP 三次握手存在奇怪的网络行为。
设置是从我在一个网络上的 Windows 10 主机开始,通过 pfSense,然后进入另一个网络上的 Ubuntu VM。防火墙全部关闭,或设置为 ANY-ANY - 为了进行健全性检查,日志显示没有触发防火墙阻止规则。
- 如果我尝试连接到不同子网中主机上的侦听 TCP 服务,我会发送 SYN,接收 SYN-ACK,但 ACK 永远不会返回。这是使用 Wireshark 直接监控我的 Win10 主机的结果。
- 如果我使用 scapy 中的原始套接字创建数据包(使用这在我使用 Apache 软件基金会 (Apache 软件基金会) 编写的这个脚本之后,我没有遇到任何网络连接问题 —— 我可以进行完整的三次握手,而且确实可以使用该脚本下载网页。
- 此问题似乎仅发生在子网之间;通过我的 pfSense 进行路由。但是,鉴于我可以在 scapy 中手动制作数据包,我的直觉是这不是 pfSense 级别的问题,因为似乎是我的主机没有发送 ACK。
- 如果目标机器位于同一子网,则我看不到任何异常行为。
- Windows 防火墙已完全关闭。
对于熟悉网络的人来说,这个问题听起来很熟悉吗?我还应该尝试其他方法吗?
答案1
对我来说,这最终导致启用了 TCP 校验和卸载(pfSense 上似乎默认启用)。我猜我的 NIC 不支持它,所以它发送了校验和错误的数据包。我在 pfSense 中禁用了它,一切都按预期运行。