【linux】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使用端口转发问题的更多相关文章
- Linux 通过rinetd端口转发来访问内网服务
可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...
- 阿里云ECS linux通过rinetd 端口转发来访问内网服务
一.场景说明: 可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.r ...
- 【Linux】实现端口转发的rinetd
Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上.但是如果需要将流量从专用地址转发到不在您当前网络上的机器上,可尝试另一 ...
- linux centos6 NAT 端口转发
有很多时候我们为了安全,需要将例如数据库服务器放到内网中.但是有些时候又系统给外网开一个端口,这时就可以利用外网的服务器进行一个端口转发.今天我们以centos6 为例进行端口转发配置. 首先vi / ...
- rinetd 一个linux下的端口转发工具
inux下使用iptables实现端口转发,配置较为复杂,使用rinetd工具可以实现快速配置和修改端口转发. 例:本机ip:1.1.1.1 需要实现访问本机的8080端口,自动转发到2.2.2.2 ...
- 〖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. ...
- Linux:ssh端口转发详解
ssh是个多用途的工具,不仅可以远程登录,还可以搭建socks代理.进行内网穿透,这是利用它的端口转发功能来实现的. 所谓ssh端口转发,就是在ssh连接的基础上,指定 ssh client 或 ss ...
- Windows和linux下的端口转发
利用VPN,实现无公网IP或内网服务器的服务 @@@code netsh interface portproxy add v4tov4 listenport=8887 connectaddress=1 ...
- 【工具】rinetd 使用教程(linux 下的端口转发工具 )
日期:2019-07-30 20:00:36 更新: 作者:Bay0net 介绍:使用 rinetd 来转发某端口的流量. 0x01. 安装 官网 RINETD 安装方法很简单,一条语句就 OK 了. ...
随机推荐
- java伪代码 大道至简第一章
import.java.大道至简.*; //一·编程的精义 import.java.编程的精义.*; public class BIANCHENGDEJINGYI { if(愚公死了) 愚公的儿子,孙 ...
- 【vue】中 $parent 和 $children 的使用方法
<div id="app"> A{{msg}} <my-button :msg="msg"></my-button> < ...
- struts2简单入门-参数传递的三种方式
三种方式的简单说明 属性传递 把参数定义为属性提供get/set方法. 使用情况 参数少,不需要共享. 演示代码 public class LoginAction extends ActionSupp ...
- Liunx/RHEL6.5 Oracle11 安装记录
1.创建用户组 groupadd oinstall #创建用户组oinstall groupadd dba #创建用户组dba useradd -g oinstall -g dba -m oracle ...
- Shiro入门 - 通过ini文件进行授权
shiro-permission.ini #用户 [users] #admin的密码是111111,此用户具有role1.role2两个角色 admin=111111,role1,role2 zhan ...
- tomcat源码之connector启动过程
connector源码部分 构造函数 生命周期启动 启动endPoint 启动accepter 线程执行方法 SocketProcessor启动
- Javascript入门(四)条件控制语句
一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...
- 使用服务器参数文件(SPFILE)管理初始化参数
传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...
- CF1098B/CF1099E Nice table
题目地址:CF1098B/CF1099E Nice table 显然,a nice table需要满足如下条件: 要么,每行都由两个字符交替组成,相邻两行的字符均不相同 要么,每列都由两个字符交替组成 ...
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
14.1.解释 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. main(),客户 IProject,产品接口 CProject,产品类 IIterator,迭代 ...