1,frp簡(jiǎn)介
frp 是一個(gè)專注于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用,支持 TCP、UDP、HTTP、HTTPS 等多種協(xié)議??梢詫?nèi)網(wǎng)服務(wù)以安全、便捷的方式通過具有公網(wǎng) IP 節(jié)點(diǎn)的中轉(zhuǎn)暴露到公網(wǎng)。
有了內(nèi)網(wǎng)穿透你能干什么?
- 遠(yuǎn)程訪問內(nèi)網(wǎng)的 http/https 服務(wù)
- 遠(yuǎn)程桌面(Windows/Mac)
- 遠(yuǎn)程文件、 SSH
- 小程序開發(fā)
有了內(nèi)網(wǎng)穿透在外訪問家里的電腦、NAS、樹莓派、攝像頭等網(wǎng)絡(luò)設(shè)備或遠(yuǎn)程控制,那都不是事兒~
frp是一個(gè)開源的內(nèi)網(wǎng)穿透應(yīng)用,有客戶端軟件和服務(wù)端軟件,大概工作過程如下:
服務(wù)端運(yùn)行在具有公網(wǎng)IP的服務(wù)器上,比如Linux上,并監(jiān)聽某個(gè)端口,等待客戶端連接。
客戶端運(yùn)行在需要穿透的內(nèi)網(wǎng)機(jī)器上,比如本地電腦上,連接到服務(wù)器之后,服務(wù)器開始監(jiān)聽客戶端需要穿透的指定端口。
外網(wǎng)用戶連接服務(wù)器監(jiān)聽的指定端口,然后服務(wù)器將用戶數(shù)據(jù)轉(zhuǎn)發(fā)到內(nèi)網(wǎng)客戶端,實(shí)現(xiàn)內(nèi)網(wǎng)穿透
frp工作原理
服務(wù)端運(yùn)行,監(jiān)聽一個(gè)主端口,等待客戶端的連接;
客戶端連接到服務(wù)端的主端口,同時(shí)告訴服務(wù)端要監(jiān)聽的端口和轉(zhuǎn)發(fā)類型;
服務(wù)端fork新的進(jìn)程監(jiān)聽客戶端指定的端口;
外網(wǎng)用戶連接到客戶端指定的端口,服務(wù)端通過和客戶端的連接將數(shù)據(jù)轉(zhuǎn)發(fā)到客戶端;
客戶端進(jìn)程再將數(shù)據(jù)轉(zhuǎn)發(fā)到本地服務(wù),從而實(shí)現(xiàn)內(nèi)網(wǎng)對(duì)外暴露服務(wù)的能力。
原理簡(jiǎn)單解釋
服務(wù)器端和客戶端約定通過7000端口通信,客戶端告訴服務(wù)端要監(jiān)聽6000端口(客戶端配置的remote_port =6000),然后外網(wǎng)服務(wù)器就會(huì)監(jiān)聽是否有連接請(qǐng)求:外網(wǎng)服務(wù)器Ip地址:6000,如果有就把連接給客戶端,這樣就可以達(dá)到內(nèi)網(wǎng)穿透的目的。
2,frp下載
準(zhǔn)備一個(gè)阿里云服務(wù)器,準(zhǔn)備安裝frp服務(wù)端,準(zhǔn)備一臺(tái)電腦安裝frp客戶端。所以這里需要下載Linux版本和windows版本
下載地址:https://github.com/fatedier/frp/releases
frp文件說明:https://gitee.com/yijicai/frp
2,解壓安裝
這里frp服務(wù)端安裝在Linux上,frp客戶端安裝在Windows上。
將下載的Linux壓縮包上傳到服務(wù)器上解壓。
tar -xvf frp_0.38.0_linux_amd64.tar.gz
解壓之后目錄結(jié)構(gòu)如下,這里可以選擇把客戶端沒有的程序和配置刪掉,也可不刪。文件中所有顯示frps的都是服務(wù)端文件,顯示frpc的都是客戶端文件。
# 刪除客戶端配置
rm -f frpc*
下載Windows版本的frp解壓到本地,刪除所有服務(wù)端文件。
3,配置使用
frp使用參考:https://www.cnblogs.com/hahaha111122222/category/1171545.html
frps和frpc配置文件參數(shù):https://www.cnblogs.com/hahaha111122222/category/1171545.html
3.1,查看默認(rèn)配置
查看服務(wù)端默認(rèn)配置文件frps.ini
[common]
bind_port = 7000 # 默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
查看客戶端默認(rèn)配置文件frpc.ini
[common]
server_addr = 云服務(wù)器公網(wǎng)IP #frps服務(wù)端所在的公網(wǎng)IP
server_port = 7000 # 默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
[ssh] # frp內(nèi)網(wǎng)穿透通道的名稱,一定要唯一
type = tcp # 連接類型
local_ip = 127.0.0.1 # 本地的地址
local_port = 22 # 穿透到本地內(nèi)網(wǎng)的端口號(hào)
remote_port = 6000 # 本次TCP服務(wù)要監(jiān)聽的端口,就是外網(wǎng)服務(wù)器要監(jiān)聽的端口
3.2,開放端口
阿里云服務(wù)器端口是沒有開放的,所以我們需要先在阿里云安全組中開放7000(frp客戶端和服務(wù)端通信端口),6000(服務(wù)器端要監(jiān)聽的端口),7500(這是frp面板的端口,下面會(huì)提到)這三個(gè)端口。
3.3,配置frp管理面板
frp面板是frp服務(wù)的一個(gè)可視化界面,可以知道有哪些穿透服務(wù)。
編輯服務(wù)端的配置文件
vim frps.ini # linux上編輯服務(wù)端的配置文件
#默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
bind_port = 7000
# 控制臺(tái)配置,frp的web管理控制臺(tái)的用戶名和密碼,7500是默認(rèn)端口(所以前面把7500端口提前放開了),可以通過服務(wù)端ip+7500端口登錄
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
#token = 123456789 #用于驗(yàn)證,為了安全,和客戶端對(duì)應(yīng),服務(wù)端配置了token客戶端也要配置一樣的,這個(gè)配置根據(jù)需要配置,這里就不配了。
編輯客戶端配置文件
只需要配置公網(wǎng)的IP就可以,別的不要改動(dòng)
server_addr = 云服務(wù)器公網(wǎng)IP
3.4,啟動(dòng)
要先啟動(dòng)frp服務(wù)端
./frps -c ./frps.ini & #后臺(tái)啟動(dòng)
nohup ./frps -c ./frps.ini & #后臺(tái)啟動(dòng)
客戶端啟動(dòng)后
再啟動(dòng)frp客戶端
Windows黑窗口使用命令
frpc.exe -c frpc.ini # windown上啟動(dòng)客戶端
客戶端啟動(dòng)后
客戶端啟動(dòng)后,Linux服務(wù)端也顯示了信息
查看面板
frp穿透服務(wù)已經(jīng)成功了,我們?cè)俨榭聪耭rp面板,瀏覽器地址欄輸入:服務(wù)器公網(wǎng)IP+7500
還有一種驗(yàn)證方式:
Linux上輸入命令
ssh 127.0.0.1 -l root -p 6000
遠(yuǎn)程連接
圖片時(shí)網(wǎng)上找的
如果frp客戶端配置在Linux上,遠(yuǎn)程連接
連接:ssh -oPort=6001 test@x.x.x.x
注:test為內(nèi)網(wǎng)機(jī)器的用戶名,x.x.x.x為服務(wù)器的公網(wǎng)IP,連接時(shí)需要輸入內(nèi)網(wǎng)test用戶的密碼
四,配置http穿透
上面的穿透是TCP的一個(gè)簡(jiǎn)單穿透,下面配置http內(nèi)網(wǎng)穿透
4.1有域名配置http穿透
編輯frps.ini文件
在阿里云上把要監(jiān)聽的http端口開放
#默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
bind_port = 7000
# 控制臺(tái)配置,frp的web管理控制臺(tái)的用戶名和密碼,7500是默認(rèn)端口(所以前面把7500端口提前放開了),可以通過服務(wù)端ip+7500端口登錄
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
# 配置http和https服務(wù)要監(jiān)聽的端口,這兩個(gè)端口也要在阿里云安全組上放開,且不能是服務(wù)器已經(jīng)使用的端口
# 為將服務(wù)器的80端口做http,443端口做https,原理就像nginx一樣,可以多個(gè)網(wǎng)站使用這兩個(gè)端口。
vhost_http_port = 80
vhost_https_port = 443
編輯frpc.ini文件
[common]
server_addr = 云服務(wù)器公網(wǎng)IP #frps服務(wù)端所在的公網(wǎng)IP
server_port = 7000 # 默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
[ssh] # frp內(nèi)網(wǎng)穿透通道的名稱,一定要唯一,自定義
type = tcp # 連接類型
local_ip = 127.0.0.1 # 本地的地址
local_port = 22 # 穿透到本地內(nèi)網(wǎng)的端口號(hào)
remote_port = 6000 # 本次TCP服務(wù)要監(jiān)聽的端口,就是外網(wǎng)服務(wù)器要監(jiān)聽的端口
# 自己有域名配置http穿透,要將指定域名解析到frps服務(wù)端的IP上。
[httptest] # frp內(nèi)網(wǎng)穿透通道的名稱,一定要唯一,自定義
type = http # 連接類型
local_ip = 127.0.0.1 # 本地的地址
local_port = 8081 # 穿透到本地內(nèi)網(wǎng)的端口號(hào)
custom_domains = test.yang.com # 填寫你已經(jīng)解析到frps服務(wù)端IP上的域名
# custom_domains = 這里填寫你已經(jīng)解析到frps服務(wù)端IP上的域名,自己每個(gè)穿透對(duì)應(yīng)服務(wù),都可以綁定一個(gè)專屬域名用于訪問,包括使用tcp和udp協(xié)議。然后就可以通過這個(gè)已經(jīng)自定義域域名訪問到自己的對(duì)應(yīng)HTTP服務(wù)。
訪問test.yang.com:80就可以達(dá)到訪問127.0.0.1:8081的目的
有域名的http穿透沒有在客戶端配置remote_port 監(jiān)聽端口信息,監(jiān)聽端口配置到了服務(wù)端vhost_http_port,常規(guī)情況下,frp 服務(wù)器端默認(rèn)定義了 http 和 https 的服務(wù)端口為 80/443,所以配置 http 和 https 是無需配置 remote_port 遠(yuǎn)程端口信息.
另外一種配置方式
有域名的http穿透是通過在frpc.ini中配置custom_domains域名,還有另外一種方式,就是在當(dāng) frp服務(wù)器frps.ini 中配置了 subdomain_host 參數(shù)(配置二級(jí)域名),并為所有用戶提供了子域名服務(wù).那么此時(shí)可以在frpc.ini中使用 subdomain 參數(shù),其參數(shù)值應(yīng)僅為主機(jī)頭 .
例如:服務(wù)器frps.ini提供了subdomain_host= frp.com 的泛域名服務(wù),那么在frpc.ini中設(shè)置 subdomain = nas 就可以使用 nas.frp.com 來穿透本條服務(wù),當(dāng)然主機(jī)頭也是唯一性的,先到先得.此種配置多數(shù)用于 自建frps服務(wù)器 ,方便自己使用一個(gè)域名的泛域名來配置穿透.
4.2,無域名配置http穿透
編輯frps.ini文件
#默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
bind_port = 7000
# 控制臺(tái)配置,frp的web管理控制臺(tái)的用戶名和密碼,7500是默認(rèn)端口(所以前面把7500端口提前放開了),可以通過服務(wù)端ip+7500端口登錄
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
編輯frpc.ini文件
[common]
server_addr = 云服務(wù)器公網(wǎng)IP #frps服務(wù)端所在的公網(wǎng)IP
server_port = 7000 # 默認(rèn)端口7000,就是客戶端和服務(wù)端通信的端口,不是你轉(zhuǎn)發(fā)的那個(gè)端口,如果要改端口,客戶端和服務(wù)端兩邊的配置文件都要改
[httpname] # frp內(nèi)網(wǎng)穿透通道的名稱,一定要唯一,自定義
type = tcp # 連接類型
local_ip = 127.0.0.1 # 本地的地址
local_port = 8082 # 穿透到本地內(nèi)網(wǎng)的端口號(hào)
remote_port = 6000 # 訪問公網(wǎng)IP+6000就可以訪問127.0.0.1:8082了
注意:如果在客戶端配置http請(qǐng)求的域名,一定要在阿里云上配置域名解析,不然請(qǐng)求不成功
五,說明
frp訪問內(nèi)網(wǎng)的流程,frp服務(wù)端和客戶端通過配置約定走公網(wǎng)ip的7000端口,同時(shí)客戶端告訴服務(wù)端需要監(jiān)聽6000的端口,如果出現(xiàn)公網(wǎng)ip+6000的請(qǐng)求,就把連接交給本地內(nèi)網(wǎng)的22端口,請(qǐng)求本地的地址就是127.0.0.1:22,這樣就達(dá)到訪問內(nèi)網(wǎng)的目的。
使用 HTTP 和 HTTPS 協(xié)議時(shí),每一條穿透配置必須至少要有 custom_domain 和 subdomain 中的任意一個(gè)域名參數(shù).否則會(huì)出現(xiàn) custom_domains and subdomain should set at least one of them 錯(cuò)誤提示.而 TCP 協(xié)議可無需配置域名,直接使用 frp 服務(wù)器的域名或者IP.
六,window上設(shè)置frpc客戶端開啟自啟動(dòng)
自啟動(dòng)設(shè)置1:https://blog.cndoor.vip/?p=140
自啟動(dòng)設(shè)置2:https://blog.csdn.net/leadseczgw01/article/details/103298118
1,在frpc.exe目錄下新建一個(gè)文件frpc_start.bat,注意路徑要寫絕對(duì)路徑
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
D:\frp_0.29.0\frpc.exe -c D:\frp_0.29.0\frpc.ini
2,創(chuàng)建自啟動(dòng)任務(wù)文章來源:http://www.zghlxwxcb.cn/news/detail-429935.html
右鍵我的電腦–》管理–》系統(tǒng)工具–》任務(wù)計(jì)劃程序–》創(chuàng)建任務(wù)文章來源地址http://www.zghlxwxcb.cn/news/detail-429935.html
到了這里,關(guān)于frp內(nèi)網(wǎng)穿透服務(wù)使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!