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. Redis(2)——跳跃表

    一.跳跃表简介 跳跃表(skiplist)是一种随机化的数据结构,由 William Pugh 在论文<Skip lists: a probabilistic alternative to ba ...

  2. GoLand2019.03破解与汉化

    1.准备工作 (请认真的做好准备工作,否则中途可能会操作失败.) GoLand是JetBrains公司发布的商业版的GO语言编辑器(收费的),本屌目前还没钱购买正版,所以本次教程是以Windows平台 ...

  3. Murata村田研发向左,制造向右

    前言:Murata村田自1944 年在日本京都创立,是陶瓷无源电子元件.无线连接模块和电源转换技术产品设计和制造领域的全球领导者. Murata 一直在为社会的进步和电子行业的革命贡献自己的力量. 在 ...

  4. Javascript学习笔记-基本概念-操作符

    1.一元操作符 (1)递增和递减操作符 只能操作一个值的操作符叫一元操作符. var age = 29; ++age; var age = 29; --age; var age = 29; var a ...

  5. MVC08

    1. c# 索引器(indexer) using System; using System.IO; namespace IO { class Program { ]; static void Main ...

  6. redis01

    1.redis 1)cookie与session session本质上也是cookie,cookie携带session返回给服务端 redis是一个存储数据库 redis读写快速,使用简单,常用于存储 ...

  7. Ios/Android h5 唤起本地APP

    纠结两天(浏览器中唤起本地APP),一直找不到解决方案,今天总算基本搞定. ps:吐槽一下 魔窗那篇文章,为什么就不直接把js代码开源开源,混淆后的代码看得我好恼火 参考文章:魔窗解决方案.京东解决方 ...

  8. Python爬虫抓取微博评论

    第一步:引入库 import time import base64 import rsa import binascii import requests import re from PIL impo ...

  9. ASP.NET Core 中间件自定义全局异常处理

    目录 背景 ASP.NET Core过滤器(Filter) ASP.NET Core 中间件(Middleware) 自定义全局异常处理 .Net Core中使用ExceptionFilter .Ne ...

  10. windows下安装spark-python

    首先需要安装Java 下载安装并配置Spark 从官方网站Download Apache Spark™下载相应版本的spark,因为spark是基于hadoop的,需要下载对应版本的hadoop才行, ...