说明
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。如果要用ftp外网穿透,需要使用被动模式。
被动模式(PASV)连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
所以,在使用ftp的时候,不仅需要转发默认的21端口,还需要转发数据端口。
修改ftp服务器配置
考虑到frp转发的情况,所以数据端口最好是固定的,所以这里需要修改ftp服务器的配置,这里以vsftpd服务为例。修改vsftpd.conf
文件,固定被动模式端口范围
vim /etc/vsftpd.vsftpd.conf
# 修改
listen_ipv6=NO
listen=YES
pasv_enable=YES
# 添加
pasv_min_port=50000
pasv_max_port=50002
#配置被动地址,域名和ip二选一
## 配置frp外网的ip
pasv_address=xxx.xxx.xxx.xxx
## 如果动态域名可以配置域名
pasv_addr_resolve=YES
pasv_address=www.xxx.com
这里只开启了50000、50001、50002三个端口,意思就是同时只能有三个用户连接,如果需要更多用户可以配置更多的端口。
修改frp配置
在frp的配置中,需要添加默认端口21和被动数据端口50000、50001、50002四个端口配置
[ftp]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port = 2121
[ftp1]
type = tcp
local_ip = 127.0.0.1
local_port = 50000
remote_port = 50000
[ftp2]
type = tcp
local_ip = 127.0.0.1
local_port = 50001
remote_port = 50001
[ftp3]
type = tcp
local_ip = 127.0.0.1
local_port = 50002
remote_port = 50002