目錄
- 一、遇到的問題
- 二、材料
- 三、步驟
- 1. 服務器配置
- A. 部署Go語言環境
- B. 安裝frp
- C. 開埠
- D. 通過Dashboard查看服務端連接情況
- 2. 客戶機α配置(需求1)
- A. 部署Go語言環境
- B. 安裝frp
- 3. 訪問端配置(需求1)
- A. 檔案訪問
- B. 遠程桌面連接
- 4. 客戶機β配置(需求2)
- 5. 訪問端配置(需求2)
- 四、一些心得
一、遇到的問題
- 有一臺閑置的阿里云服務器,想折♂騰Ta一下,
- 老家(有IPv6地址但懶得申請公網IP)有一臺撿來的、在跑Windows Server的NAS,想拿來跟愛人一起當個網盤用,需要能夠遠程桌面連接,且異地訪問存在上面的檔案,同時最好能分用戶訪問,畢竟有些東西不方便愛人看到(不是,此為需求1,
- 大佬@lny161224需要在移動端設備上通過SSH訪問位于家里(無IPv6且不方便申請公網IP)電腦上的Ubuntu虛擬機,此為需求2,
二、材料
- 擁有公網IP的服務器一臺(運行在CentOS 7.6下),
- 內網中的電腦,下稱客戶機α(需求1)和客戶機β(需求2),
- 想要訪問內網的電腦/移動設備,下稱訪問端,
三、步驟
1. 服務器配置
A. 部署Go語言環境
-
下載安裝包
進入Go官方網站,選擇Linux標簽,單擊“Download Go for Linux”按鈕下載安裝包, -
上傳安裝包
將安裝包上傳至服務器,此處我使用了Xshell附帶的Xftp插件將安裝包上傳至/usr/local/下, -
安裝Golang組件
清除先前安裝的Golang組件,并在root用戶解壓安裝包,此處我解壓到了/usr/local/go/目錄,rm -rf /usr/local/go cd /usr/local tar -xzf go1.16.2.linux-amd64.tar.gz -
添加環境變數
添加/usr/local/go/bin至PATH環境變數,在/etc/profile的最后一行添加以下內容:export PATH=$PATH:/usr/local/go/bin使用以下命令應用環境變數更改:
. /etc/profile -
查看Go版本號
使用以下命令驗證安裝情況:go version若成功顯示Go當前版本,則部署成功,
go version go1.16.2 linux/amd64
B. 安裝frp
-
下載安裝包
進入frp的Release頁面,下載與服務器處理器架構對應的安裝包并解壓,此處我選擇了frp_0.36.2_linux_amd64.tar.gz, -
修改組態檔
安裝包中同時包含了Linux下frp的服務端檔案(frps、frps.ini、frps.service等)和客戶端檔案(frpc、frpc.ini、frpc.service等),通過修改frps.ini檔案可以對frp服務端進行配置,此次配置,我開啟了如下功能:
① token權限認證,防止未被授權的客戶端連接至服務端;
② 設定服務端監聽UDP埠,用于輔助創建P2P連接;
③ 啟用Dashboard,用于監測服務端連接狀態,為此,我將
frps.ini的內容修改如下:[common] # 服務器監聽埠 bind_port = 7000 # 權限認證的token值,可自定義 token = HaoziJerry # 服務端監聽UDP埠,用于輔助創建P2P連接 bind_udp_port = 7000 # 啟用Dashboard監聽的本地埠 dashboard_port = 7500 # dashboard 用戶名密碼,可自定義,如果不用需要主動設定為空 dashboard_user = admin dashboard_pwd = admin另外,frp的官方檔案中給出了多個示例,可以根據具體需求修改
frps.ini檔案,如果需要實作其他功能,可以參考frp服務端詳細配置說明, -
上傳frp服務端檔案
將frps和frps.ini檔案上傳至服務器,此處我上傳到了/usr/local/frp/下, -
啟動frp服務端
通過以下命令啟動frp服務端:/usr/local/frp/frps -c /usr/local/frp/frps.ini顯示
2021/04/03 19:40:00 [I] [root.go:200] frps uses config file: /usr/local/frp/frps.ini 2021/04/03 19:40:01 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000 2021/04/03 19:40:01 [I] [service.go:275] nat hole udp service listen on 0.0.0.0:7000 2021/04/03 19:40:01 [I] [service.go:294] Dashboard listen on 0.0.0.0:7500 2021/04/03 19:40:01 [I] [root.go:209] frps started successfully即為啟動成功,
若出現權限不足
Permission denied可使用以下命令賦予檔案夾執行權限:
chmod -R 744 /usr/local/frp -
設定自啟動
將安裝包解壓后還會生成一個systemd目錄,修改其中frps.service檔案[Service]下的ExecStart項,將其指向frps的實際上傳目錄:ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini注意:如果使用此方法啟動 frps 服務,vhost_http_port 又想用 80 埠,需要將組態檔中的 User=nobody 注釋或洗掉,
將
frps.service檔案上傳至服務器/etc/systemd/system/下,并設定frps服務開機啟動:sudo systemctl enable frps其他命令:
啟動frps服務:
sudo systemctl start frps重啟frps服務:
sudo systemctl restart frps停止frps服務:
sudo systemctl stop frps
C. 開埠
配置完畢后,要記得到服務器的管理控制臺開啟以下埠:
- TCP 7000:用于接收frp客戶端的連接(與
frps.ini中對應), - UDP 7000:用于輔助創建 P2P 連接(與
frps.ini中對應), - TCP 7500:用于訪問Dashboard(與
frps.ini中對應), - 連接客戶機時其他需要用到的埠,根據客戶端
frpc.ini中的配置情況而定,此處我開了TCP 6001、6002和22001,
D. 通過Dashboard查看服務端連接情況
訪問
http://服務器公網IP地址:7500
并輸入在frps.ini中設定的用戶名和密碼后即可查看服務端的運行情況

右側上方顯示了今日的上下行流量情況,下方顯示了不同協議代理的占比情況,點擊左側串列中的Proxies還可以按連接協議查看各個代理的詳細資訊和流量情況,
2. 客戶機α配置(需求1)
A. 部署Go語言環境
-
下載安裝包
通過客戶機α進入Go官方網站,選擇Windows標簽,單擊“Download Go for Windows”按鈕下載安裝包并安裝, -
查看Go版本號
打開命令提示符或PowerShell,使用以下命令驗證安裝情況:go version若成功顯示Go當前版本,則部署成功,
go version go1.16.2 windows/amd64
B. 安裝frp
-
下載安裝包
通過客戶機α進入frp的Release頁面,下載與處理器架構對應的安裝包并解壓,此處我選擇了frp_0.36.2_windows_amd64.zip, -
修改組態檔
安裝包中同時包含了Windows下frp的服務端和客戶端檔案,通過修改frpc.ini檔案可以對frp客戶端進行配置,針對需求1,我開啟了如下功能:
① 使用sTCP協議的遠程桌面連接(需要在客戶機α上開啟遠程桌面);
② static_file插件提供的檔案訪問服務;為此,我將
frpc.ini的內容修改如下:[common] # 服務器的公網IP地址 server_addr = xxx.xxx.xxx.xxx # 服務器監聽埠 server_port = 7000 # 權限認證的token值,與frps.ini中相同 token = HaoziJerry # 使用sTCP協議的遠程桌面連接 [secret_RD] type = stcp # 只有sk一致的用戶才能訪問到此服務,可以與token不同 sk = HaoziJerry # 本地IP地址和對應服務埠 local_ip = 127.0.0.1 local_port = 3389 # 檔案訪問服務1 [static_file_Super] type = tcp # 要用到的服務器埠,記得去服務器管理控制臺開啟 remote_port = 6001 plugin = static_file # 要對外暴露的檔案目錄,需自定義 plugin_local_path = D:\Share\Super # 訪問路徑名,此處即http://x.x.x.x:6001/super/ plugin_strip_prefix = super # 用戶名和密碼 plugin_http_user = super plugin_http_passwd = super # 檔案訪問服務2 [static_file_Jerry] type = tcp # 要用到的服務器埠,記得去服務器管理控制臺開啟 remote_port = 6002 plugin = static_file # 要對外暴露的檔案目錄,需自定義 plugin_local_path = D:\Share\Jerry # 訪問路徑名,此處即http://x.x.x.x:6001/jerry/ plugin_strip_prefix = jerry # 用戶名和密碼 plugin_http_user = jerry plugin_http_passwd = jerry另外,frp的官方檔案中給出了多個示例,可以根據具體需求修改
frpc.ini檔案,若要實作其他功能,可以參考frp客戶端詳細配置說明, -
部署frp客戶端檔案
將frpc.exe和frpc.ini檔案置于客戶機α上的相同目錄下,由于frpc.exe需要使用cmd運行,為了方便運行和設定自啟動,可創建frpc.bat檔案,內容如下:當前目錄名\frpc.exe -
啟動frp服務端
運行frpc.bat即可開啟frp的客戶端,會顯示登錄資訊、代理名稱和開啟狀態,2021/04/03 19:57:05 [I] [service.go:304] [12417708010235e8] login to server success, get run id [12417708010235e8], server udp port [7000] 2021/04/03 19:57:05 [I] [proxy_manager.go:144] [12417708010235e8] proxy added: [secret_RD static_file_Super static_file_Jerry] 2021/04/03 19:57:05 [I] [control.go:180] [12417708010235e8] [static_file_Super] start proxy success 2021/04/03 19:57:05 [I] [control.go:180] [12417708010235e8] [static_file_Jerry] start proxy success 2021/04/03 19:57:05 [I] [control.go:180] [12417708010235e8] [secret_RD] start proxy success -
設定自啟動
將frpc.bat放在如下目錄%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup即可實作開機自動啟動,
3. 訪問端配置(需求1)
A. 檔案訪問
客戶端A的檔案訪問服務使用了TCP協議,在此例中我只需直接訪問
http://服務器公網IP地址:6001
并輸入客戶端A上frpc.ini里設定的用戶名密碼即可訪問客戶端A中D:\Share\Super目錄下的檔案了,訪問另一位用戶的目錄同理,修改訪問埠并輸入對應的用戶名密碼即可,
B. 遠程桌面連接
由于客戶端A的遠程桌面連接使用了sTCP協議,所以需要訪問端安裝frp客戶端以使用遠程桌面連接,總體步驟與客戶機α配置基本相同(部署Go語言環境、安裝frp),只需編輯訪問端的frpc.ini即可:
[common]
# 服務器的公網IP地址
server_addr = xxx.xxx.xxx.xxx
# 服務器監聽埠
server_port = 7000
# 權限認證的token值,與frps.ini中相同
token = HaoziJerry
[secret_RD_visitor]
type = stcp
# sTCP的訪問者
role = visitor
# 要訪問的sTCP代理的名字和對應sk,需要與客戶端A的frpc.ini中相同
server_name = secret_RD
sk = HaoziJerry
# 系結本地埠用于訪問遠程桌面服務,埠可自定義
bind_addr = 127.0.0.1
bind_port = 6000
之后運行frpc.bat,顯示
2021/04/04 02:30:08 [I] [service.go:304] [5a090a52981acef7] login to server success, get run id [5a090a52981acef7], server udp port [7000]
2021/04/04 02:30:08 [I] [visitor_manager.go:86] [5a090a52981acef7] start visitor success
2021/04/04 02:30:08 [I] [visitor_manager.go:130] [5a090a52981acef7] visitor added: [secret_RD_visitor]
即為運行成功,此時,打開遠程桌面連接,在“計算機”欄輸入
127.0.0.1:6000
并點擊連接,之后輸入客戶機α上的Windows賬戶名和密碼即可建立遠程桌面連接,
4. 客戶機β配置(需求2)
寫在前面:
- 由于客戶機β是基于VMware建立的Ubuntu虛擬機,所以需要在VMware的虛擬網路管理器中對網路進行配置(此處我用了NAT模式),確保客戶機能夠連通網路,
- 對新安裝的Ubuntu系統,如果需要,記得設定允許root用戶SSH登錄,
整體流程與在服務器上配置的步驟基本相同,只是配置和上傳的檔案改為了frp的客戶端檔案frpc.ini、frpc和frpc.service,frpc.ini配置如下:
[common]
# 服務器的公網IP地址
server_addr = xxx.xxx.xxx.xxx
# 服務器監聽埠
server_port = 7000
# 權限認證的token值,與frps.ini中相同
token = HaoziJerry
# 使用TCP協議的SSH連接
[SSH]
type = tcp
# 本地IP地址和對應服務埠
local_ip = 127.0.0.1
local_port = 22
# 要用到的服務器埠,記得去服務器管理控制臺開啟
remote_port = 22001
另外,對Ubuntu系統(CentOS沒遇到這個情況),在設定自啟動時需要修改frpc.service的User項如下,否則無法開啟自啟動:
User=root
5. 訪問端配置(需求2)
直接在各平臺的SSH工具上訪問
ssh -oPort=22001 root@服務器公網IP地址
即可通過SSH與客戶機β建立連接,
四、一些心得
- frp的部署的核心是編輯組態檔
frpc.ini,可以根據需要任意增減代理的數量或修改代理的配置, - frp擁有通過xTCP實作點對點內網穿透的功能,穿透傳輸不會受限于服務器帶寬,但由于部署后我未能成功連接,所以沒寫進來,等更換網路環境后有機會再測驗,
- 需求1的解決方案并不完美,比如不能上傳檔案、在線看NAS上的電影視頻會受限于服務器帶寬而卡頓等,這些問題后續打算通過結合FTP、FFmpeg等實作,
- 我有使用手機訪問遠程桌面的需求,且手機部署frp不太方便,所以最終實裝版本將遠程桌面的連接方式改為了TCP,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/272943.html
標籤:區塊鏈
上一篇:創建自己的區塊鏈網路 七
下一篇:玩客云絕育教程
