我正在使用 rdesktop 通过 RDP 连接到 Windows 7 桌面。我使用的命令是:rdesktop -g 1800x1000 win3.int.mtak.nl
。在客户端(Ubuntu 13.04,rdesktop 1.7.1)重新启动后,我第一次运行此命令时收到错误:
ERROR: win3.int.mtak.nl: unable to connect
当我立即运行该命令时,它工作正常。我连接到其他主机时没有遇到任何问题。我还尝试过host win3.int.mtak.nl
使用 rdesktop 进行连接,它返回了正确的 IP 地址。当我尝试从另一个 Windows 客户端连接时,它没有给出任何错误。
我使用 strace 发现了以下内容:
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
syscall_307(0x4, 0x7ffff081f360, 0x2, 0x4000, 0, 0x1c, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5) = 0x2
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [120]) = 0
recvfrom(4, "Y\324\205\200\0\1\0\1\0\2\0\2\4win3\3int\4mtak\2nl\0\0\1"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 120
poll([{fd=4, events=POLLIN}], 1, 4981) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [80]) = 0
recvfrom(4, "\361\326\205\200\0\1\0\0\0\1\0\0\4win3\3int\4mtak\2nl\0\0\34"..., 1928, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 80
close(4) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(3389), sin_addr=inet_addr("10.100.0.63")}, 16) = -1 EHOSTUNREACH (No route to host)
尽管存在到主机的路由,系统仍会给出 EHOSTUNREACH 无法访问错误:
mtak@frisbee:~$ netstat -rnv
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.137.1 0.0.0.0 UG 0 0 0 eth0
10.100.0.0 10.100.1.1 255.255.255.0 UG 0 0 0 tun0
[other output omitted]
总结一下:
- 对于子网中仅有一台主机,连接时出现 EHOSTUNREACH 错误
- 我可以在第一次尝试时连接该子网中的其他主机
- 这仅在我第一次尝试连接时或等待很长时间后才会发生。
- 后续连接尝试均能正常进行
RDP 服务器与子网中的所有其他服务器一样在 VMware ESX 上运行。网络接口没有特定设置。