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. Docker 运行容器 CentOS7 使用systemctl 启动报错 Failed to get D-Bus connection: Operation not permitted

    原系统:Centos 7 Docker 版本:1.12.6 操作:安装并运行 Tomcat 问题:在创建好容器之后,并且进入系统运行启动tomcat [root@cd11558d3a22 /]# sy ...

  2. 【JavaScript】DOM之Document对象

    JS(JavaScript) 一.Document对象 1.Document对象是什么 Document对象 是DOM的基本规范也是重要的对象之一,以访问,更新页面内容的属性和方法通过conslie. ...

  3. 关于 InnoDB 锁的超全总结

    有点全的 InnoDB 锁 几个月之前,开始深入学习 MySQL .说起数据库,并发控制是其中很重要的一部分.于是,就这样开起了 MySQL 锁的学习,随着学习的深入,发现想要更好的理解锁,需要了解 ...

  4. GitHub 热点速览 vol.10:疫情下的 GitHub

    作者:HelloGitHub-小鱼干 摘要:如果说上周的 GitHub 是股市附体 star 低迷不振,那么本周的 GitHub 像极了受到疫情影响而未开学的高校们,新生 GitHub 项少,能上 G ...

  5. 复盘MySQL分页查询优化方案

    一.前言 MySQL分页查询作为Java面试的一道高频面试题,这里有必要实践一下,毕竟实践出真知. 很多同学在做测试时苦于没有海量数据,官方其实是有一套测试库的. 二.模拟数据 这里模拟数据分2种情况 ...

  6. ant tree 展开key的集合

    这次有个功能 ant的tree 展开 点击子节点 新增节点之后 数据能够照常展开 有几种方法 我能想到的 因为ant 有个expanded 只要设置为true就能展开了,但是这边有个陷阱,就是仅仅设置 ...

  7. 小白学 Python 数据分析(15):数据可视化概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  8. 黑科技神器-uTools

    Hello,各位小伙伴们好,又到周末了,小黑哥给大家分享一款神器:『utools』. 官网地址:https://u.tools/ uTools 是一个极简.插件化.跨平台的现代桌面软件.通过自由选配丰 ...

  9. node打开本地应用程序

    1.打开浏览器 最简单的方法: const cp = require('child_process') cp.exec('start http://127.0.0.1:8889/'); // 自动打开 ...

  10. vue-cli实现最简单的全选、全不选、反选功能。不容错过呦!!!!!话不多说直接上代码。。。。

    <template> <div class="hello"> <input type="button" name="al ...