使用FileZilla搭建公网访问的ftp服务器(Frp/花生壳)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: FTP 是一种基于 TCP 的应用层协议,它不支持 UDP 协议。 FTP 工作在一种特殊的服务机制上,它使用两个端口,一个 ‘数据’ 端口和一个 ‘命令’ 端口(也称为控制端口)。 通常情况下,端口 21 用作命令端口,端口 20 用作数据端口。一、主动模式和被动模式

FTP 是一种基于 TCP 的应用层协议,它不支持 UDP 协议。 FTP 工作在一种特殊的服务机制上,它使用两个端口,一个 ‘数据’ 端口和一个 ‘命令’ 端口(也称为控制端口)。 通常情况下,端口 21 用作命令端口,端口 20 用作数据端口。


一、主动模式和被动模式

1、主动模式

客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(21端口),发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端开放N+1端口,发送 PORT N+1 命令到FTP服务器,告诉服务器客户端采用主动模式以及开放的端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口N+1连接,发送数据。

客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(21端口),发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端开放N+1端口,发送 PORT N+1 命令到FTP服务器,告诉服务器客户端采用主动模式以及开放的端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口N+1连接,发送数据。

001ab7839c2593b7da36f444b042e7c2.png

2、被动模式

为了解决服务器主动发起到客户端连接会被阻止的问题。被动模式工作的前提是客户端明确告知 FTP 服务器它使用被动模式。FTP客户端使用N(N>1023)端口连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再通过N+1端口连接到服务器开放的端口进行数据传输。

c74c394735a12d124f3037dc8ede56f8.png

3、区别

显然两者的区别就在于建立数据传输连接的方式。


主动模式的连接发起方为服务器端,服务器使用20号端口主动去连接客户端的N+1端口建立数据连接;


然而当客户端位于NAT之后,服务器是无法主动与其建立连接的


被动模式连接发起方为客户端,在客户端与21端口建立联系之后服务器端告诉客户端自己使用的数据端口号,让客户端自己来连接,这样就解决了服务端无法主动连接客户端的问题。

二、搭建FTP服务器

首先我们需要先安装FileZilla Server

安装完成后界面中为出现警告

0d30368aeebb769cf3fa1f6c2903a4b3.png

这里的意思是当前环境位于NAT之后,所以需要使用被动模式(passive mode)运行并在路由器上设置端口转发;warning中的意思是FTP服务没有启用TLS模式,所以用户登录信息是不安全的。


在上文中我们讲到了被动模式解决了客户端位于NAT之后,服务器端无法直接连接其的情况下采用被动模式让客户端来连接服务器端即可。但是如果我们的服务器端也是位于NAT之后,那么其实客户端也无法连接到服务器端。(正如下图提示所说)那我们还需要将我们服务器FTP服务的端口暴露到公网中供客户端可以连接,这里我们就才用到内网穿透的方式来解决NAT的问题(相关知识可参考内网穿透7480dfa7971635ef5f1ea684f5c7c077.png的原理和实现方式)

这里我们需要设置自定义端口和填入外网IP的地址

端口即为进行内网穿透的端口号,ip地址则填写公网的ip

如果我们拥有公网ip,则可以使用frp进行端口转发,如果没有则可以使用花生壳等内网穿透工具。

三、使用FRP实现

关于Frp的使用可以参考文章使用frp端口实现内网穿透

在完成了基础的配置后,我们只需要在客户端的frpc.ini中增加两个配置

[ftp_cmd]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port = 6001
[ftp_data]
type = tcp
local_ip = 127.0.0.1
local_port = 15779
remote_port = 15779

第一个即为TCP服务所监听的21号端口及其在公网上的映射


由于我们使用被动模式,所以还需要另外设置一个进行数据通信的端口


local即内网进行数据通信的端口,remote即映射到公网的端口,此处与File Zilla中的端口都保持一致


之后使用公网IP+[ftp_cmd]中的remote_port即可连接TCP服务


记得需要在防火墙中放行这些端口!

四、使用花生壳实现

花生壳的使用同理,区别就是它会为你提供一个公网ip,不需要你自己拥有,而因此你也无法自定义使用哪个端口进行通信,而是尤其自动进行分配

我们同样创建两个映射,一个是21号端口的映射

1b07e8432741f7ba5d93761f065dfbee.png

另一个我们先随便现在内网端口中填写一个端口号,如下

ce10ae9839e3154a0d3eb5112dfefdd3.png

随后它会为我们分配公网的端口号

d992e333b49e328555427b7d239057dc.png

我们再对这个映射进行编辑,将内75c6e3d62bb72a5c0ff0b5e8bd2e00a4.png网端口与分配的外网端口保持一致

在得到这个端口号后再去file zilla中填写被动模式中的自定义端口范围。


即如果自己有公网ip则可以使用frp自己设置开放哪个端口进行数据通信,没有的话则用花生壳这样的工具提供的公网和分配的端口,得到端口和公网地址之后再返回去file zilla中设置ip和端口

五、其他设置

禁用ip检查bcb199d75bff82d35daf9984368e617b.png

设置证书(点击生成新证书后填写相关信息即可)

a1a1166a2a86e6429259367b0fa169c0.png

配置用户组

添加用户,设置密

1766bc453b9cc0081c1b64ad69ee4310.png

设置共享文件夹和访问权限

0a6fa14a263088cb7468ab02d91e85f9.png

六、设置开机自启动

服务器端(linux)自启动

客户端(windows)自启动

相关文章
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks常见问题之dataworks连接FTP服务器失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
8天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
1月前
|
网络协议 安全 网络架构
无需公网IP联机Minecraft,我的世界服务器本地搭建教程
无需公网IP联机Minecraft,我的世界服务器本地搭建教程
|
1月前
|
网络协议 Ubuntu Linux
如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问
如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问
|
1月前
|
存储 网络协议 安全
如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!
如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!
|
1月前
|
网络协议 关系型数据库 PHP
如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器
如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器
|
1月前
|
存储 PHP 数据库
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
|
1月前
|
Linux 网络安全 文件存储
如何本地部署Jellyfin影音服务器并实现在公网访问
如何本地部署Jellyfin影音服务器并实现在公网访问
|
1月前
|
Ubuntu 网络协议 Java
在Android平板上使用code-server公网远程Ubuntu服务器编程
在Android平板上使用code-server公网远程Ubuntu服务器编程
|
1月前
|
网络协议 Linux 数据安全/隐私保护
本地电脑搭建SFTP服务器,并实现公网访问
本地电脑搭建SFTP服务器,并实现公网访问