我和我的同事在访问 Heart Internet 的 FTP 服务器时遇到了问题。
我们办公室里有 Mac 和 PC,还有 Linux。我们的机器都无法连接。
从我的 IP 地址运行 nmap 时,端口 21 没有出现。
使用 FileZilla 之类的软件只会返回“连接超时”,就像ftp
在 Linux 机器上一样。
使用 Wireshark 我可以看到对 TCP SYN 数据包的“ICMP 目标不可达(端口不可达)”响应。
我可以通过其他端口访问相同的服务器,可以 ping 服务器,也可以跟踪到服务器的路由。
从我的 IP 来看:
$ telnet ftp20.extendcp.co.uk 21
Trying 79.170.44.20...
telnet: Unable to connect to remote host: Connection refused
从远程服务器:
$ telnet ftp20.extendcp.co.uk 21
Trying 79.170.44.20...
Connected to ftp20.extendcp.co.uk.
Escape character is '^]'.
220 FTP server ready
远程登录到不同的服务器可以正常工作:
$ telnet ftp.mirrorservice.org 21
Trying 212.219.56.184...
Connected to ftp.mirrorservice.org.
Escape character is '^]'.
220-----------------------------------------------------------------------------
220-Welcome to the University of Kent's UK Mirror Service.
220-
220-More information can be found at our web site: http://www.mirrorservice.org/
220-Please send comments or questions to [email protected].
220-----------------------------------------------------------------------------
220
跟踪路由:
$ traceroute ftp20.extendcp.co.uk
traceroute to ftp20.extendcp.co.uk (79.170.44.20), 30 hops max, 60 byte packets
1 home.gateway.home.gateway (192.168.2.254) 0.608 ms 0.904 ms 2.152 ms
2 88.215.57.252 (88.215.57.252) 20.283 ms 21.010 ms 21.254 ms
3 88.215.62.78 (88.215.62.78) 20.983 ms 20.973 ms 21.014 ms
4 88.215.62.230 (88.215.62.230) 27.175 ms 27.348 ms 27.509 ms
5 88.215.62.218 (88.215.62.218) 50.552 ms 49.958 ms 50.975 ms
6 * * *
7 mx02-xe0.0.1-lon.gs.nodefour.net (83.166.164.85) 24.098 ms 26.726 ms 22.204 ms
8 mx01-xe2.0.0-lon.gs.nodefour.net (83.166.164.34) 22.147 ms 22.165 ms 24.208 ms
9 mx02-xe1.2.0-dry.dc2.nodefour.net (83.166.164.38) 35.475 ms 35.532 ms 35.879 ms
10 83.166.164.54 (83.166.164.54) 25.316 ms 34.015 ms 34.401 ms
11 ftp20.extendcp.co.uk (79.170.44.20) 25.529 ms 28.205 ms 26.298 ms
平安:
$ ping ftp20.extendcp.co.uk
PING ftp20.extendcp.co.uk (79.170.44.20) 56(84) bytes of data.
64 bytes from ftp20.extendcp.co.uk (79.170.44.20): icmp_req=1 ttl=53 time=24.3 ms
64 bytes from ftp20.extendcp.co.uk (79.170.44.20): icmp_req=2 ttl=53 time=21.3 ms
64 bytes from ftp20.extendcp.co.uk (79.170.44.20): icmp_req=3 ttl=53 time=24.7 ms
64 bytes from ftp20.extendcp.co.uk (79.170.44.20): icmp_req=4 ttl=53 time=21.5 ms
64 bytes from ftp20.extendcp.co.uk (79.170.44.20): icmp_req=5 ttl=53 time=25.1 ms
Telnet 到不同的端口:
$ telnet ftp20.extendcp.co.uk 22
Trying 79.170.44.20...
Connected to ftp20.extendcp.co.uk.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3
TCPdump 的telnet 79.170.44.20 21
:
$ sudo tcpdump -n -n -v -i eth0 host 79.170.44.20
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:30:27.194966 IP (tos 0x10, ttl 64, id 1237, offset 0, flags [DF], proto TCP (6), length 60)
192.168.2.10.58366 > 79.170.44.20.21: Flags [S], cksum 0x3e9f (incorrect -> 0x00e5), seq 530375445, win 14600, options [mss 1460,sackOK,TS val 18737088 ecr 0,nop,wscale 6], length 0
14:30:27.216103 IP (tos 0xc0, ttl 53, id 12906, offset 0, flags [none], proto ICMP (1), length 88)
79.170.44.20 > 192.168.2.10: ICMP 79.170.44.20 tcp port 21 unreachable, length 68
IP (tos 0x0, ttl 54, id 1237, offset 0, flags [DF], proto TCP (6), length 60)
192.168.2.10.58366 > 79.170.44.20.21: Flags [S], cksum 0x0e94 (incorrect -> 0x00ed), seq 530375445, win 14600, options [mss 1452,sackOK,TS val 18737088 ecr 0,nop,wscale 6], length 0
TCPdumptelnet 79.170.44.20 23
续上文
14:31:23.250970 IP (tos 0x10, ttl 64, id 15043, offset 0, flags [DF], proto TCP (6), length 60)
192.168.2.10.58533 > 79.170.44.20.23: Flags [S], cksum 0x3e9f (incorrect -> 0x4da7), seq 1506485437, win 14600, options [mss 1460,sackOK,TS val 18751102 ecr 0,nop,wscale 6], length 0
14:31:23.273111 IP (tos 0x0, ttl 53, id 0, offset 0, flags [DF], proto TCP (6), length 40)
79.170.44.20.23 > 192.168.2.10.58533: Flags [R.], cksum 0x0e1a (correct), seq 0, ack 1506485438, win 0, length 0
我的 ISP 和 Heart Internet 未报告任何明显问题。
我可以使用哪些工具来确定问题出在哪里?
是否有可能发现在通往服务器的网络路由中连接被拒绝的位置?(例如,如果是我的路由器或他们的防火墙,是否有可能发现是什么拒绝了连接?)
答案1
我们已经排除了从您的网络到 ftp 服务器的传出连接的一般阻止,这很好。下一步可能是跟踪路由;您的网络可能无法访问目标服务器所在的网络块。幸运的是,他们允许traceroute
,因此您的下一步可能是跟踪路由到目的地,看看哪里出了问题。我已粘贴了我的跟踪路由输出以供比较。
[me@risby]$ traceroute ftp20.extendcp.co.uk
traceroute to ftp20.extendcp.co.uk (79.170.44.20), 30 hops max, 60 byte packets
1 192.168.3.1 (192.168.3.1) 0.200 ms 0.113 ms 0.102 ms
2 lns18.inx.dsl.enta.net (188.39.1.30) 23.466 ms 23.318 ms 24.988 ms
3 gi1-8.inx.dist.dsl.enta.net (188.39.1.29) 23.782 ms 24.622 ms 25.546 ms
4 te2-2.interxion.dsl.enta.net (78.33.141.89) 26.186 ms 26.963 ms 26.802 ms
5 te2-3.interxion.core.enta.net (87.127.236.209) 27.554 ms 28.360 ms 29.085 ms
6 te4-2.telehouse-east.core.enta.net (87.127.236.137) 28.818 ms 28.512 ms 28.349 ms
7 * * *
8 mx01-xe2.3.0-lon.gs.nodefour.net (83.166.164.85) 28.397 ms 29.967 ms 30.681 ms
9 mx01-xe2.2.0-lon.gs.nodefour.net (83.166.164.34) 31.404 ms 31.112 ms 32.733 ms
10 mx02-xe1.2.0-dry.dc2.nodefour.net (83.166.164.38) 32.465 ms 33.060 ms 33.776 ms
11 83.166.164.54 (83.166.164.54) 33.529 ms 34.628 ms 34.356 ms
12 ftp20.extendcp.co.uk (79.170.44.20) 34.043 ms 30.541 ms 30.543 ms
查看您是否可以访问目的地上的任何其他内容也很有用;您能粘贴输出吗ping ftp20.extendcp.co.uk
?
编辑:现在我们已经确定您在桌面上使用 Linux,您可以有效地使用它tcpdump
来查看拒绝来自多远。这是tcpdump -n -n -v -i p1p1 host 79.170.44.20
我在执行 a telnet ftp20.extendcp.co.uk 22
(连接)然后执行 a telnet ftp20.extendcp.co.uk 23
(获得 a Connection refused
,应该如此)时的输出:
14:20:40.047720 IP (tos 0x10, ttl 64, id 57773, offset 0, flags [DF], proto TCP (6), length 60)
192.168.3.11.57105 > 79.170.44.20.22: Flags [S], cksum 0x5a67 (correct), seq 2606771394, win 14600, options [mss 1460,sackOK,TS val 6671727 ecr 0,nop,wscale 7], length 0
14:20:40.078615 IP (tos 0x0, ttl 47, id 0, offset 0, flags [DF], proto TCP (6), length 60)
79.170.44.20.22 > 192.168.3.11.57105: Flags [S.], cksum 0xc8ec (correct), seq 28398605, ack 2606771395, win 14480, options [mss 1412,sackOK,TS val 609884153 ecr 6671727,nop,wscale 7], length 0
[packets deleted]
14:20:48.193195 IP (tos 0x10, ttl 64, id 34283, offset 0, flags [DF], proto TCP (6), length 60)
192.168.3.11.57462 > 79.170.44.20.23: Flags [S], cksum 0x1fa0 (correct), seq 2030528683, win 14600, options [mss 1460,sackOK,TS val 6679872 ecr 0,nop,wscale 7], length 0
14:20:48.222609 IP (tos 0x0, ttl 47, id 0, offset 0, flags [DF], proto TCP (6), length 40)
79.170.44.20.23 > 192.168.3.11.57462: Flags [R.], cksum 0xae1d (correct), seq 0, ack 2030528684, win 0, length 0
注意ttl
第一种情况下服务器返回的第一个数据包中的字段是47
。注意第二种情况下ttl
重置数据包 ( ) 中的字段是flags [R.]
还47,这对于来自目标服务器的重置来说是正确且合适的。如果您看到更高的 TTL,则强烈暗示拒绝来自更近的地方。
编辑2:根据你所说的 TTL,看起来该服务器确实决定不接受你的连接。有可能是途中是伪造 TCP 端口不可达,但要做到这一点很困难,而且大多数防火墙工具都不关心(如果我没记错的话,即使是中国的防火墙也未能正确设置拒绝的 TTL)。
至于为什么远程服务器已决定这样做(自动,可能通过 fail2ban?手动,因为下载过多?),谁知道呢?除非你能联系服务器管理员,否则你可能不知道原因。如果你与 ftp20.extendcp.co.uk 有业务关系,请通过这些途径升级。否则,我会耸耸肩,如果有几个文件我迫切需要从该服务器获取或获取,我会使用代理。
答案2
“ICMP 目标无法访问(端口无法访问)”回复的源 IP 是什么?如果它是 ftp 服务器的 IP,则强烈建议(虽然很奇怪)目标服务器确实拒绝您连接到端口 21。因为 99.9% 的防火墙只是丢弃被阻止的数据包,而从不费心返回任何回复。此类 ICMP 错误通常意味着您已成功到达 ftp 服务器,但此端口上没有侦听套接字。鉴于 ftp 服务器已启动,仍然认为他们的 FTP 服务器软件拒绝接受来自您的 IP 的连接是出于某种奇怪的原因。此外,您是否有更改 IP 的选项(仅用于测试)?