相关资料:

1.【ssh】端口转发

2.【ftp】主动模式和被动模式

先说结论:用端口转发无法解决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客户端与服务器无法互联时,无法通过端口转发来解决。

【linux】ftp使用端口转发问题的更多相关文章

  1. Linux 通过rinetd端口转发来访问内网服务

    可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...

  2. 阿里云ECS linux通过rinetd 端口转发来访问内网服务

    一.场景说明: 可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.r ...

  3. 【Linux】实现端口转发的rinetd

    Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上.但是如果需要将流量从专用地址转发到不在您当前网络上的机器上,可尝试另一 ...

  4. linux centos6 NAT 端口转发

    有很多时候我们为了安全,需要将例如数据库服务器放到内网中.但是有些时候又系统给外网开一个端口,这时就可以利用外网的服务器进行一个端口转发.今天我们以centos6 为例进行端口转发配置. 首先vi / ...

  5. rinetd 一个linux下的端口转发工具

    inux下使用iptables实现端口转发,配置较为复杂,使用rinetd工具可以实现快速配置和修改端口转发. 例:本机ip:1.1.1.1 需要实现访问本机的8080端口,自动转发到2.2.2.2 ...

  6. 〖Linux〗iptables端口转发(11.11.136.80:5552 <==> 10.10.136.1:8055/11.11.136.1:8055)

    环境: pc1: 10.10.72.1 (network: 10.10.72.0/22) pc2: 地址1: 10.10.136.1 (nework: 10.10.136.0/22) 地址2: 11. ...

  7. Linux:ssh端口转发详解

    ssh是个多用途的工具,不仅可以远程登录,还可以搭建socks代理.进行内网穿透,这是利用它的端口转发功能来实现的. 所谓ssh端口转发,就是在ssh连接的基础上,指定 ssh client 或 ss ...

  8. Windows和linux下的端口转发

    利用VPN,实现无公网IP或内网服务器的服务 @@@code netsh interface portproxy add v4tov4 listenport=8887 connectaddress=1 ...

  9. 【工具】rinetd 使用教程(linux 下的端口转发工具 )

    日期:2019-07-30 20:00:36 更新: 作者:Bay0net 介绍:使用 rinetd 来转发某端口的流量. 0x01. 安装 官网 RINETD 安装方法很简单,一条语句就 OK 了. ...

随机推荐

  1. java伪代码 大道至简第一章

    import.java.大道至简.*; //一·编程的精义 import.java.编程的精义.*; public class BIANCHENGDEJINGYI { if(愚公死了) 愚公的儿子,孙 ...

  2. 【vue】中 $parent 和 $children 的使用方法

    <div id="app"> A{{msg}} <my-button :msg="msg"></my-button> < ...

  3. struts2简单入门-参数传递的三种方式

    三种方式的简单说明 属性传递 把参数定义为属性提供get/set方法. 使用情况 参数少,不需要共享. 演示代码 public class LoginAction extends ActionSupp ...

  4. Liunx/RHEL6.5 Oracle11 安装记录

    1.创建用户组 groupadd oinstall #创建用户组oinstall groupadd dba #创建用户组dba useradd -g oinstall -g dba -m oracle ...

  5. Shiro入门 - 通过ini文件进行授权

    shiro-permission.ini #用户 [users] #admin的密码是111111,此用户具有role1.role2两个角色 admin=111111,role1,role2 zhan ...

  6. tomcat源码之connector启动过程

    connector源码部分 构造函数 生命周期启动 启动endPoint 启动accepter 线程执行方法 SocketProcessor启动

  7. Javascript入门(四)条件控制语句

    一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...

  8. 使用服务器参数文件(SPFILE)管理初始化参数

    传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...

  9. CF1098B/CF1099E Nice table

    题目地址:CF1098B/CF1099E Nice table 显然,a nice table需要满足如下条件: 要么,每行都由两个字符交替组成,相邻两行的字符均不相同 要么,每列都由两个字符交替组成 ...

  10. 设计模式C++学习笔记之十四(Iterator迭代器模式)

      14.1.解释 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. main(),客户 IProject,产品接口 CProject,产品类 IIterator,迭代 ...