FtpServer穿透内网访问配置踩笔记

引言

FtpServer是服务器文件远程管理常用方式。

以前在局域网配置Ftp服务器以及使用公网上的Ftp服务均未碰到问题,固未对Ftp传输进行深入了解。

然而,最近在配置一台内网Ftp服务器提供外部访问服务时,却碰过了问题,折腾了几番,方才搞定。为了避免遗忘和提供他人借鉴,特此记录。

FTP配置应用踩坑

为了给一个台内网服务器上发布的Web应用提供远程维护,在同一台服务器上架设了Ftp服务器。

Ftp服务器采用的FileZille,使用的UTF-8编码版本。

采用的绿色版本,注册为Windows服务。

通过配置管理工具,配置了访问用户和访问目录及相关权限。相应配置采用默认设置。

按自己的经验,Ftp服务使用21端口和20端口,设置了服务器的防火墙策略,放行了TCP上的20、21端口。

在内网访问时,出现了能成功连接服务器,但列出文件目录失败,开启了本地防火墙,允许Ftp客户端通讯后,本地Ftp访问成功。

到此,以为Ftp配置成功。不料通过外网进行访问时,仍旧出现列出文件目录失败的情况。

经过上网查询研究,终于搞清Ftp服务通讯传输的机制,针对Ftp传输机制,配置服务器的被动模式支持使用固定的端口并在防火墙中放行,配置路由器Nat映射支持被动模式数据端口中(外网端口和内网端口需相同),Ftp客户端采用被动模式,问题解决。

FTP服务器模式

FTP协议采用TCP传输协议

主动模式:

客户端(自动分配端口N,N>1024)->连接服务器配置的命令端口(默认21)

连接成功后,客户端分配端口N+1做为本地数据传输端口

客户端开启TcpServer,侦听本地数据传输端口(通常N+1),

客户端通过命令连接通道,发送PORT协议,告诉服务器本地数据端口

服务器使用数据端口(默认20),连接客户端的数据通讯端口

此模式下,由于客户端数据连接端口不固定,难以处理网关和防火墙的拦截问题。

在客户端为NAT子网的情况下,服务器无法穿透客户端的网关设备连接到客户端。

在第1步中,客户端的命令端口与FTP服务器的命令端口建立连接,并发送命令“PORT 1027”。然后在第2步中,FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中,FTP服务器发起一个从它自己的数据端口(20)到客户端先前指定的数据端口(1027)的连接,最后客户端在第4步中给服务器端返回一个"ACK"。

  主动方式FTP的主要问题在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

被动模式:

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

  在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

  

在第1步中,客户端的命令端口与服务器的命令端口建立连接,并发送命令“PASV”。然后在第2步中,服务器返回命令"PORT 2024",告诉客户端(服务器)用哪个端口侦听数据连接。在第3步中,客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接。最后服务器在第4 步中给客户端的数据端口返回一个"ACK"响应。

服务器被动模式端口配置

服务器端采用FileZilla Server(UTF-8编码版本)

在服务器被动模式设置中,将端口范围指定为一个端口,如上图3720-3720,也可以是一个范围。对路由器/防火墙中添加此端口的NAT映射和访问规则。

早期Ftp协议中,并未规定传输数据的编码格式,导致不同客户端工具和服务器通讯时,会出现目录/文件名乱码问题,后来为解决这个问题,扩展标准协议中,定义了客户端和服务端问询/确认编码格式的协议,用于解决此问题。

防火墙访问配置

外网端口映射配置

配置路由器上外网端口到FtpServer服务端口的映射。

两个端口,命令端口和数据传输端口。

本项目中,服务器命令端口使用的21,外网端口采用的3721(将外网3721映射到发布FTP服务器的21端口)

服务器数据端口使用的3720,外网端口采用的3720(此处两个端口必须相同,否则不能正常传输文件)

Ftp客户端配置

本项目中,使用的FtpClient工具为FileZilla,版本3.7.3(32bit)

在配置中选择传输模式为被动模式。

进行远程连接测试(需要外部网络电脑远程FTP访问),OK,打完收工。

FtpServer穿透内网访问配置踩笔记的更多相关文章

  1. apache ftpserver外网访问配置

    apache ftpserver搭建ftp服务非常简单,若只是内网访问,几乎不需要配置,直接启动即可.但若需要外网访问,则需要注意以下几点. 1.若是外网访问,主动模式是不行的,因为客户端报告给服务器 ...

  2. 1.使用frp穿透内网

    1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还  但是今天在弄nginx得时候发现 ngrok ...

  3. centos7下使用n grok编译服务端和客户端穿透内网

    (发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...

  4. frp端口映射穿透内网

    前言 frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP.UDP.HTTP.HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发. Github: ...

  5. frp穿透内网使用vsftpd服务

    本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp. 一.内网穿透神器frp frp 是一个专注于内网穿透的高性能的反向 ...

  6. ECS上nginx搭建反向代理通过内网访问阿里云OSS服务

    对于付不起钱的小伙计,为了给公司省钱,想尽一切招数.今天就来分享一个使用阿里云OSS存储搭配CDN使用的网站服务器部署方法. 简介 阿里云OSS 阿里云提供的一种文件存储方案,和我们以前接触的百度云B ...

  7. n2n网络穿透内网

    目录 前言 配置 网络拓扑: 公网服务器的配置 公司电脑的配置 家里笔记本的配置 注意事项 使用n2n网络 n2n的各edge之间传输数据 补充:NAT类型 后记 前言 在家里的时候比较经常需要对公司 ...

  8. 利用iptables的NAT代理实现内网访问外网

    利用NAT代理实现内网访问外网 背景及原理 若局域网中的两台计算机只能有一台能够访问外网,而这两台计算机之间能相互通信,那么可以配置能访问外网的那台服务器实现路由器的功能,即实现其他机器的NAT转换, ...

  9. iptables内网访问外网 ε=ε=ε=(~ ̄▽ ̄)~

    介绍 iptables概述: netfilter/iptables : IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成. netfilter/iptables 关 ...

随机推荐

  1. SQL语句中in not in exits not exits用法比较

    exists (sql 如果返回结果集为真) not exists (sql 如果没有返回结果集为真) 如下: 表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 ...

  2. C++走向远洋——33(静态成员的应用)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:time.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  3. KEMET新型电容器推动了电动汽车技术的发展

    前言:KEMET成立于1919年,总部位于佛罗里达州劳德代尔堡,是全球领先的高端电子组件供应商,KEMET为客户提供业内最广泛的电容器技术选择,以及不断扩大的机电设备,电磁兼容性解决方案和超级电容器. ...

  4. 一起了解 .Net Foundation 项目 No.11

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Microsoft Web ...

  5. 微信小程序开发,如何优雅地兼容

    小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容. 关于单个 API 如何兼容,微信官方提供了兼容文档,因此我们这里不再赘述.下面主要讨论在整个项目如 ...

  6. 前端实现html转pdf方法总结

    最近要搞前端html转pdf的功能.折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区.经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各 ...

  7. 编写简单i18n库

    i18n是什么?i18n(其来源是英文单词internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称. 前言 第一次接触多语言是用野生java ...

  8. 原生js中的常用方法的写法

    1.js深度克隆的方法 //第一种 function deepClone(obj){ var str,newObj = obj instanceof Array? [] : {}; if(typeof ...

  9. 基于sklearn的metrics库的常用有监督模型评估指标学习

    一.分类评估指标 准确率(最直白的指标)缺点:受采样影响极大,比如100个样本中有99个为正例,所以即使模型很无脑地预测全部样本为正例,依然有99%的正确率适用范围:二分类(准确率):二分类.多分类( ...

  10. 无损卡尔曼滤波UKF(3)-预测-生成Sigma点

    无损卡尔曼滤波UKF(3)-预测-生成Sigma点 1 选择创建Sigma点 A 根据 已知上一个时间戳迭代出来的 后验状态 x_{k|k} 和后验协方差矩阵 P_{k|k} 他们代表当前状态的分布. ...