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”,而不要配置成“回退成主動模式”。