相关资料:
先说结论:用端口转发无法解决ftp客户端与服务器的连接问题,原因是ftp的data端口不固定,不能把所有>1024的端口都做端口转发
有如下三台机器:
1. ftp服务器 F (ftp)
2. 端口转发用的跳板机 J (jump)
3. 客户端 C (client)
其中,C要请求F的数据,但C无法连接F,F可以连接C,我们无法控制F,但可以控制J和C。J与F,C都可以连接,故作为中间跳板。
在C上建立端口转发,C的2221端口映射F的21端口,即映射FTP的CMD端口
ssh -g -f -N -L 2221:<A>:21 username@<B> -22
注意:这里必须有-g 即开放转发给所有ip使用。
原因:如果没有-g,则C会监听 127.0.0.1:2221,如果访问<C>:2221则会被拒绝,而后面进行步骤⑦时会ftp的data通道会试图连接127.0.0.1上的端口,导致错误。
使用-g后,就可以访问<C>:2221了
在建立端口转发后,采用主动模式的ftp连接过程如下图所示:
①ftp客户端像转发端口2221请求建立cmd连接
②<C>:2221 通过 <J>:22 转发请求
③<J>:22向ftp的cmd端口发送请求
④ftp的cmd端口响应<J>:22
⑤跳板返回响应
⑥<C>:2221返回响应 至此ftp的命令通道连接成功
⑦出问题的是在这一步,建立data通道时,ftp服务器企图绕过J,直接与C连接。这是不可以的。
原因:
ftp实际上是与J建立了cmd连接,此时J告知ftp直接连接C,ftp发现cmd和data通道连接不同的ip自然会拒绝。
所以主动模式是行不通的。那看被动模式:
采用被动模式时,⑦的方向反过来了。需要C的data端口访问F的data端口,但C的data端口不固定,所有>1024的都有可能,数量过大,不能都建立转发。
所以,被动模式也是不行的.......
至此:得到结论,当ftp客户端与服务器无法互联时,无法通过端口转发来解决。