我遇到了一个问题,我们的一个客户端尝试启动到我们服务器的 TCP 连接,但失败了。
我看到tcpdump
,客户端设备发送了一个SYN
数据包,我们的服务器正确地回复了SYN ACK
.之后,我们的服务器立即收到一个RST
数据包。几秒钟后,该过程将重复。奇怪的是,连接有时会正确建立(大约每 2 天上午 8:30 左右)。
我尝试将数据包重定向到另一台服务器,但该服务器遇到了同样的问题。
今天我尝试以相反的方式连接。我们的客户端当前没有在防火墙中打开端口,但我还是尝试连接以查看会发生什么。我曾经ssh
尝试从不同的机器进行连接,这是我发现的:
从我的个人计算机 (Mac OS X 10.10):ssh: connect to host x.x.x.x port 22: Connection refused
从接收数据包的服务器SYN
(Debian 8):ssh: connect to host x.x.x.x port 22: No route to host
从不同托管中心的另一台服务器(Debian 7):ssh: connect to host x.x.x.x port 22: No route to host
来自一家大公司的另一台服务器(Debian 7):ssh: connect to host x.x.x.x port 22: Operation timed out
如果端口未在防火墙中打开,我从家里的个人计算机得到的响应正是我所期望的,但我对从不同服务器得到的不同输出感到困惑。
从这些机器中的任何一台 Ping 客户端的 IP 都可以正常工作。
我是否可以在这里查看路由问题,即我的SYN-ACK
包裹路由不正确,因此(几乎)永远不会到达客户端?您对如何解决这个问题有什么建议吗?我应该联系客户的 ISP 还是我的服务器提供商?
感谢您的帮助。
更新1:
我对杰夫的问题做了一些进一步的研究。这是我的结果:
IP TTL SYN: 55 IP TTL RST: 59
我目前正在等待客户端授予我访问他的网络的权限,因此我当前无法查看他是否收到SYN-ACK
或是否发送RST
Traceroute:
1 x.x.x.x 25.793 ms 5.516 ms 5.516 ms 2 x.x.x.x 4.140 ms 4.172 ms 4.166 ms 3 x.x.x.x 4.158 ms 4.147 ms 4.139 ms 4 x.x.x.x 9.855 ms 9.877 ms 9.874 ms 5 x.x.x.x 15.506 ms !X 15.753 ms !X 15.970 ms !X
我家电脑的traceroute在最后两跳是相同的。两条跟踪路由都有 5 跳。
服务器端没有防火墙或负载平衡器。
路由表在接收no route to host
.它们主要由默认路由和本地子网路由组成,它们在所有其他情况下都工作正常。
答案1
我没有足够的声誉来提出问题,因此这些问题多于答案,但它们应该为您指明正确的方向,或者允许其他人提供有关该问题的更多见解。
-What is the IP TTL (or hop limit if IPv6) in the SYN and RST?
-What does a capture from the client show?
-Does it receive the SYN-ACK, and does it send the RST?
-What does a traceroute look like?
-How many hops between the server and the client?
-Is there a firewall, load balancer or other network
device fronting (NAT, VIP) the server?
-What do the routing tables look like for the servers
receiving the No Route to Host?
答案2
这一切都归结为配置问题。今天客户允许我访问他的网络,我发现他基本上有两个具有相同 IP 地址的设备,导致他的网络出现路由问题。
更改了 IP 地址之一:已解决。
感谢您的帮助。