远程文件共享/搭建网盘:利用FRP将本地的FTP服务映射到公网
FRP(Fast Reverse Proxy)Github项目:https://github.com/fatedier/frp/
FRP独立页面:https://gofrp.org/
FRP帮助文档:https://gofrp.org/docs/
参考博客:
https://blog.csdn.net/shile/article/details/74392125
https://blog.csdn.net/deng_xj/article/details/89120458
操作时请注意本地数据安全性、 传输保密性和公网服务器安全。
原理图:
说明:
PS表示公网服务器,拥有其他设备都可访问的ip地址,这里用了阿里云服务器,OS=Cent7.3;
LF表示本地文件服务器,需要能访问互联网,以与PS建立FRP关系、传输FTP到用户的数据,这里使用FileZilla Server;
LG表示LF的网关,需要给LF提供固定的本地ip地址,例如通过dhcp为LF分配局域网地址192.168.1.17;
CL表示受到服务的设备,如手机、PC,需要与PS之间有可靠的连接。
一、在LF本地确认好FTP服务器的配置。
1、用LG为LF分配固定局域网地址(local_ip),如192.168.1.17。
2、 在LF中为FTP被动模式开放专属端口,与FTP默认的端口(20和21)分开,如50000-50002:
3、上述的被动模式IPv4地址写本地地址192.168.1.17。
4、注意开放LF设备的端口:20,21,50000~50002。
例如通过Windows firewall.cpl高级选项的入站规则:
二、建立LF和PS的FRP地址、端口映射关系。
1、在PS上的FRP配置、部署:
(1)云主机获取编译好的FRP包:
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
tar -zxvf frp_0.36.2_linux_amd64.tar.gz
frp的工具和配置文件包括:(nohup.out不算)
在PS端,我们主要关心frps和frps.ini。(s即表示frp Server)
(2)配置frps.ini:
# FRP Server Config
# '#' pound sign is Line Comment
# common这个分栏名称不能乱写
[common]
# 7091是PS与LF约定好的、PS开放的frp连接端口,frps程序通过这个端口与frpc程序进行frp连接 bind_port = 7091
# dashboard相关的域是frps管理页面入口
# port指定了管理页面通过http访问的端口,在浏览器入口是aaa.bbb.ccc.ddd:7092
dashboard_port = 7092
# dashboard user 和 pwd 是进入管理页面的用户名和密码 dashboard_user = ADMIN dashboard_pwd = PASSWORD
# token域适用于frp版本0.36.2,用来使frpc和frps建立简单的身份认证,其他版本未验证
# 网上第三方获得的配置文件有privilege_token域,但是在0.36.2中未找见 token = VERY_SECURE_TOKEN
(3)阿里云后台管理:开放端口7091、7092、7096和50000、50001和50002:
说明:
7091是PS中保证frp正常工作的最根本端口;
7092是frps管理页面的http Web端口;
7096是frp工具将LF本地FTP端口映射成的外部可见的FTP端口(在LF端进行指定);
50000、50001和50002是LF本地的FTP被动端口,也是要映射的FTP端口。
(4)关闭PS的firewalld.service和iptables.service。
如果您不熟悉iptables用法,可以将这两个服务关掉,防止端口被PS操作系统Ban掉。
2、在LF上的FRP配置、部署:
(1)获取和PS端相同版本的frp工具。(LF上的frpc选择了Win64版本)
(2)配置frpc.ini:
# FRP Client Config
[common] server_addr = aaa.bbb.ccc.ddd server_port = 7091 token = VERY_SECURE_TOKEN # 将LF本地192.168.1.17:21端口映射为公网aaa.bbb.ccc.ddd:7096端口
[ftp21] type = tcp local_ip = 192.168.1.17 local_port = 21 remote_port = 7096
# 将LF本地192.168.1.17:50000端口映射为公网aaa.bbb.ccc.ddd:50000端口(FTP PASV被动模式指定使用本地50000端口) [ftp1] type = tcp local_ip = 192.168.1.17 local_port = 50000 remote_port = 50000 [ftp2] type = tcp local_ip = 192.168.1.17 local_port = 50001 remote_port = 50001 [ftp3] type = tcp local_ip = 192.168.1.17 local_port = 50002 remote_port = 50002
注意到LF本地配置FTP时已经开启了LF设备的50000~50002端口。
三、启动FRP服务,并检查FRP工作状态。
PS端执行:
./frps -c ./frps.ini
LF端执行:
.\frpc.exe -c .\frpc.ini
现在在终端信息应该当可以看见PS和LF开始进行监听、frp配置的端口得到代理。
PS端的终端输出信息形如:
LF端的终端输出形如 :
在PS端查看frp程序运行状态:
ps auxf | grep frp
检查PS的端口开放状态(需要运行起来frps之后再进行检测):
四、用户CL使用FTP客户端连接。
1、FTP客户端的配置。
如果CL和LF在同一个局域网下,使用PORT主动模式连接aaa.bbb.ccc.ddd,端口7096;
如果CL和LF不在同一个局域网,使用PASV模式进行连接,地址和端口一样。此时,在CL的FTP客户端配置PASV模式的参数为“使用FTP服务器对外的IP”,而不要配置成“回退成主动模式”。