1. 程式人生 > >frp linux下配置執行

frp linux下配置執行

群暉NAS+frp發揮更大作用
Posted by SunnyRx on October 21, 2016
原文地址:http://www.sunnyrx.com/2016/10/21/simple-to-use-frp/

該文章於2018年7月7日將frp版本從0.13.0更新到0.20.0,下文針對frp 0.20.0配置。

NAS沒有公網IP是一件很不方便的事情,尤其是在國內的網路環境,學校和小區內的使用者通常都沒有公網IP。為了解決這個問題,則需要內網穿透,而內網穿透的方法有很多種,例如使用花生殼ngrok等,該文章要介紹的是使用frp讓群暉實現內網穿透。

實際上frp有官方的中文文件,上面的內容已經非常詳盡,對相關操作比較熟悉的人可以直接閱讀官方的中文文件。

什麼是frp

frp 是一個高效能的反向代理應用,可以幫助您輕鬆地進行內網穿透,對外網提供服務,支援 tcp, http, https 等協議型別,並且 web 服務支援根據域名進行路由轉發。

準備

在使用frp之前,需要一臺有公網IP的伺服器(下文稱外網主機),一臺需要實現內網穿透的機器(下文稱內網主機),SSH工具,以及一個域名(如果只是建立SSH反向代理則不需要域名)。

該文章中筆者所使用的伺服器是朋友推薦的Vultr伺服器,雖然伺服器是在國外,但勝在頻寬夠,有需要的朋友可以註冊一個。而需要實現內網穿透的機器則是筆者用上網本搭建的黑群暉。SSH工具使用的是Xshell 5

。而域名筆者則是使用自己個人網站的域名。

開始使用

根據機器的作業系統,在Release頁面中找到對應的frp程式,然後分別在外網主機和內網主機中下載它。

下面的所示範用的frp程式版本是以筆者的伺服器為主的。

外網主機

SSH連線上外網主機後,使用wget指令下載frp。

wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz

使用tar指令解壓tar.gz檔案

tar -zxvf frp_0.20.0_linux_amd64.tar.gz

使用cd指令進入解壓出來的資料夾

cd frp_0.20.0_linux_amd64/

外網主機作為服務端,可以刪掉不必要的客戶端檔案,使用rm指令刪除檔案。

rm -f frpc
rm -f frpc.ini

接下來要修改伺服器配置檔案,即frps.ini檔案。使用vi指令對目標檔案進行編輯。

vi frps.ini

開啟frps.ini後可以看到預設已經有很多詳細的配置和示範樣例,該文章僅以達到內網穿透為目的,所以這裡選擇刪掉或註釋掉裡面的所有內容,然後根據群暉的情況,按照官方的中文文件新增以下配置。(這裡的操作都使用vi命令,關於vi命令的使用方式這裡不作詳細介紹,可以自行搜尋相關使用方法。)

[common]
bind_port = 7000
vhost_http_port = 8080

[common]部分是必須有的配置,其中bind_port是自己設定的frp服務端埠,vhost_http_port是自己設定的http訪問埠。

儲存上面的配置後,使用以下指令啟動frp服務端。(如果需要在後臺執行,請往下翻閱關於後臺執行的部分。)

./frps -c ./frps.ini

服務端的工作就到此結束了。

客戶端

客戶端前面的操作和服務端是一模一樣的,這裡不一一解釋。

wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
tar -zxvf frp_0.20.0_linux_amd64.tar.gz
cd frp_0.20.0_linux_amd64
rm -f frps
rm -f frps.ini
vi frpc.ini

客戶端的配置如下

[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[nas]
type = http
local_port = 5000
custom_domains = no1.sunnyrx.com

[web]
type = http
local_port = 80
custom_domains = no2.sunnyrx.com

上面的配置和服務端是對應的。

[common]中的server_addr填frp服務端的ip(也就是外網主機的IP),server_port填frp服務端的bind_prot

[ssh]中的local_port填群暉的ssh埠。

[nas]中的type對應服務端配置。local_port填群暉的DSM埠。custom_domains為要對映的域名,記得域名的A記錄要解析到外網主機的IP。

[web]同上,local_port填群暉的web埠。這裡建立了兩個http反向代理是為了分別對映群暉兩個重要的埠,500080,前者用於登入群暉管理,後者用於群暉的Web StationDS Photo

儲存配置,輸入以下指令執行frp客戶端。(同樣如果需要在後臺執行,請往下翻閱關於後臺執行的部分。)

./frpc -c ./frpc.ini

此時在服務端會看到"start proxy sucess"字樣,即連線成功。

現在可以用SSH通過外網主機IP:6000和群暉建立SSH連線。通過瀏覽器訪問no1.sunnyrx.com:8080開啟群暉nas的管理頁面,訪問no2.sunnyrx.com:8080開啟群暉Web Station的網站,DS Photo app可以連線no2.sunnyrx.com:8080進入DS Photo管理。

讓frp在後臺執行

雖然現在frp運作起來了,內網穿透也實現了,但這還是不夠的。此時如果斷開與服務端或者客戶端的SSH連線(比如關掉了Xshell)也就中止了frp的執行。

保持frp執行是關鍵是讓服務端的frp和客戶端的frp在後臺執行,這裡提兩個方法供參考,一個是使用screen指令,另一個是使用nohup指令。由於群暉的系統預設是沒有screen指令的,這裡也不提供安裝screen的方法,所以推薦群暉直接使用nohup

其實服務端也直接用'nohup'就好了。

使用screen讓frp在後臺執行

下面的示範是執行服務端的frp,客戶端就不示範了,前面提過群暉的系統沒有screen指令。

首先使用screen指令建立一個會話。

screen -dmS frp

然後進入這個會話。

screen -r frp

最後使用執行frp的指令,在後面加上" &"。(如果之前斷開了SSH連線,記得用cd指令進入frp的目錄先。)

./frps -c ./frps.ini &

這樣就讓frp在後臺運行了。

使用nohup指令

nohup指令的使用方法相對簡單,只需要在nohup後面加上frp的執行指令即可。下面示範的指令是執行frp客戶端。(同樣,如果之前斷開了SSH連線,記得用cd指令進入frp的目錄先。)

nohup ./frpc -c ./frpc.ini &

這樣就成功讓frp在後臺運行了。