当我使用telnet时出现“无法连接到主机”的错误提示

4

我在Azure中有两个虚拟机,它们具有不同的公共IP地址:

10.10.1.9
10.10.1.6

当我从服务器10.10.1.6执行以下命令进行telnet时,出现错误:

telnet 10.10.1.9 2181
Trying 10.10.1.9...
telnet: connect to address 10.10.1.9: No route to host

当我在10.10.1.9端执行tcpdump时,我得到了以下日志:

#tcpdump -i eth0 port 2181
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:55:35.530270 IP 10.10.1.6.55910 > 10.10.1.9.eforward: Flags [S], seq 1018543857, win 14600, options [mss 1418,sackOK,TS val 181360935 ecr 0,nop,wscale 7], length 0

同时,我在从10.10.1.6到10.10.1.9进行telnet时,在10.10.1.6端也进行了tcpdump。

tcpdump -i eth0 port 2181
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:55:57.970696 IP 10.10.1.6.55910 > 10.10.1.9.eforward: Flags [S], seq 1018543857, win 14600, options [mss 1460,sackOK,TS val 181360935 ecr 0,nop,wscale 7], length 0

使用tcpdump在10.10.1.9上进行arp操作

#tcpdump -i eth0 port 2181 or arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
08:00:18.356153 IP 10.10.1.6.55944 > 10.10.1.9.eforward: Flags [S], seq 3337054296, win 14600, options [mss 1418,sackOK,TS val 181643770 ecr 0,nop,wscale 7], length 0
08:00:42.294801 ARP, Request who-has 10.10.1.6 tell 10.10.1.9, length 28
08:00:42.295859 ARP, Reply 10.10.1.6 is-at 12:34:56:78:9a:bc (oui Unknown), length 28

在10.10.1.6上使用tcpdump

tcpdump -i eth0 port 2181 or arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
08:00:40.805565 IP 10.10.1.6.55944 > 10.10.1.9.eforward: Flags [S], seq 3337054296, win 14600, options [mss 1460,sackOK,TS val 181643770 ecr 0,nop,wscale 7], length 0
08:00:45.805204 ARP, Request who-has 10.10.1.9 tell 10.10.1.6, length 28
08:00:45.805721 ARP, Reply 10.10.1.9 is-at 12:34:56:78:9a:bc (oui Unknown), length 28
08:02:04.752283 ARP, Request who-has 10.10.1.9 tell 10.10.1.6, length 28
08:02:04.753141 ARP, Reply 10.10.1.9 is-at 12:34:56:78:9a:bc (oui Unknown), length 28

运行顺序:首先在10.10.1.9和10.10.1.10上运行了tcpdump,然后尝试从10.10.1.10进行telnet。

在10.10.1.9上运行arp -a:

#arp -a
? (10.10.1.7) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.4) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.1) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.8) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.10) at <incomplete> on eth0
? (10.10.1.11) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.6) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.5) at 12:34:56:78:9a:bc [ether] on eth0

arp -a on 10.10.1.6

#arp -a
? (10.10.1.1) at 12:34:56:78:9a:bc [ether] on eth0
? (10.10.1.10) at <incomplete> on eth0
? (10.10.1.9) at 12:34:56:78:9a:bc [ether] on eth0

提前感谢。


你能够 ping 10.10.1.9 吗? - 0x6773
是的,我能够ping通它。我也能使用不同的端口22进行telnet连接。 - Nilotpal
也许端口号为2181telnet服务没有运行。 - 0x6773
如果它没有在2181端口运行,我就不会得到tcpdump日志了。但它正在运行。 :( - Nilotpal
  1. 地址不是公共的。
- user207421
该消息可能会引导你产生误解 - 因为你可以进行 ping,很可能是类似 iptables 的防火墙阻止了它。 - Vincent Gerris
1个回答

4
tcpdump记录显示,10.10.1.9收到了来自10.10.1.10的数据包,但无法回复...结果10.10.1.10端出现了“无法路由至主机”的错误。如果确实从10.10.1.10到10.10.1.9没有路由,你应该会得到“无法路由至主机”的错误提示,而不仅仅是因为从10.10.1.10发送到10.10.1.9的数据包没有得到回复。也就是说,只有在10.10.1.10不能将数据包发往10.10.1.9时,才会出现“无法路由至主机”的错误提示!现在,可能运行在10.10.1.10上的操作系统正在变得愚蠢,并返回EHOSTUNREACH(“无法路由至主机”),而不是例如ETIMEDOUT(“操作超时”),如果它从初始SYN没有收到SYN + ACK返回,则出现这种情况。或者在tcpdump记录期间,从10.10.1.10到10.10.1.9确实存在一条路由。
23:46:30.003480 IP 10.10.1.10.42946 > 10.10.1.9.eforward: Flags [S], seq 2823099523, win 14600, options [mss 1418,sackOK,TS val 74982205 ecr 0,nop,wscale 7], length 0

发送了数据包,但10.10.1.9无法或决定不用SYN+ACK回复初始的SYN。当10.10.1.10重新传输SYN时,再也无法向10.10.1.9发送数据包,并报告“主机不可达”的错误信息。 如果可以重现此问题,建议在两个主机上运行tcpdump以查看更多详细信息。可以尝试使用以下命令:
tcpdump -i eth0 port 2181 or arp

所以,例如,如果其中一个主机上的另一个主机的ARP条目超时,并且后续尝试重新ARP另一个主机的MAC地址失败,那么这将显示出来。(在此假设10.10.1.10和10.10.1.9之间没有路由器,因此,“无法到达主机”实际上意味着“没有主机的ARP条目”)。
(另一种可能性是,在其中一个主机上或其他主机上有某种“数据包过滤器”/防火墙,处理某些端口与其他端口不同,因此连接到22端口是可能的但连接到2181端口不可能)。

1
我运行了以下命令:04:28:32.354804 ARP,请求谁有10.10.1.10,告诉10.10.1.9,长度为28 04:28:32.355507 ARP,回复10.10.1.10的MAC地址是12:34:56:78:9a:bc(OUI未知),长度为28...............我能够从10.10.1.9和10.10.1.10都获得ARP回复。 - Nilotpal
1
那么,如果您在两台计算机上运行tcpdump命令,当telnet失败时,10.10.1.10上会显示什么?(假设此时两个主机上的tcpdump命令仍在运行,并且您已经显示了它产生的所有输出。) - user862787
1
在机器10.10.1.10上执行以下命令: #tcpdump -i eth0 arp tcpdump:输出被抑制,使用-v或-vv进行完整协议解码 在eth0上监听,链路类型为EN10MB(以太网),捕获大小为65535字节 04:32:49.721119 ARP,请求who-has 10.10.1.10告诉10.10.1.10,长度为28 04:32:49.722099 ARP,回复10.10.1.10是12:34:56:78:9a:bc(oui未知),长度为28 - Nilotpal
1
服务器是新的,完全没有数据包过滤/防火墙!!!我需要紧急帮助,因为我完全找不到任何方法!!! - Nilotpal
1
已经编辑了帖子并附上了ARP输出。实际上,我们昨天删除了10.10.1.10虚拟机,并创建了一个新的10.10.1.6虚拟机。10.10.1.6是使用Azure中10.10.1.10的镜像创建的。此外,这些机器具有不同的公共IP地址。目前在帖子中我写的是10.10.1.10以避免混淆。但在此之后,我将会说10.10.1.6!! - Nilotpal
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接