使用frp进行内网穿透的实例
目錄
為什么需要內網穿透功能
?
frp是什么
?
工具下載地址
下載的軟件可參考
準備工作
?
VPS相關
?
VPS上添加入站規則
服務端設置
?
服務端后臺運行
?
客戶端設置
?
自定義規則
客戶端后臺運行及開機自啟
為什么需要內網穿透功能
從公網中訪問自己的私有設備向來是一件難事兒。
自己的主力臺式機、NAS等等設備,它們可能處于路由器后,或者運營商因為IP地址短缺不給你分配公網IP地址。如果我們想直接訪問到這些設備(遠程桌面,遠程文件,SSH等等),一般來說要通過一些轉發或者P2P組網軟件的幫助。
我有一臺計算機位于一個很復雜的局域網中,我想要實現遠程桌面和文件訪問,目前來看其所處的網絡環境很難通過簡單的端口映射將其暴露在公網之中,我試過這么幾種方法:
?
frp是什么
簡單地說,frp就是一個反向代理軟件,它體積輕量但功能很強大,可以使處于內網或防火墻后的設備對外界提供服務,它支持HTTP、TCP、UDP等眾多協議。我們今天僅討論TCP和UDP相關的內容。
截至本文完成,frp的最新版本為v0.22.0,本文使用最新版本。
?
工具下載地址
https://github.com/fatedier/frp
?
下載的軟件可參考
?
準備工作
搭建一個完整的frp服務鏈,我們需要
?
VPS相關
- 因為frp的原理是利用服務端(所準備的VPS)進行轉發,因而VPS的速度直接決定了之后連接的質量,請根據自己的需要選擇相應主機配置。
- 我使用了DigitalOcean的新加坡機房,北京移動、中國教育網下測試速度尚可。
- 系統使用Ubuntu 16.04.5 x64,frp客戶端和服務端本身同時均支持Linux和Windows,且配置方法一樣,請根據實際環境自行測試,如果你是新建的VPS,那選擇Ubuntu 16.04.5 x64就可以了。
?
VPS上添加入站規則
?
服務端設置
SSH連接到VPS之后運行如下命令查看處理器架構,根據架構下載不同版本的frp
arch查看結果,如果是“X86_64“即可選擇”amd64”,
運行如下命令,根據架構不同,選擇相應版本并進行下載
然后解壓
tar -zxvf frp_0.22.0_linux_amd64.tar.gz文件夾改個名,方便使用
cp -r frp_0.22.0_linux_amd64 frp把解壓出來的文件夾復制到你想要的目錄下,為了方便我直接放在用戶目錄下了,進入該目錄
cd frp查看一下文件
ls -a我們只需要關注如下幾個文件
- frps
- frps.ini
- frpc
- frpc.ini
前兩個文件(s結尾代表server)分別是服務端程序和服務端配置文件,后兩個文件(c結尾代表client)分別是客戶端程序和客戶端配置文件。
因為我們正在配置服務端,可以刪除客戶端的兩個文件
然后修改frps.ini文件
vim frps.ini這個文件應有如下格式
[common] bind_port = 7000 dashboard_port = 7500 token = 12345678 dashboard_user = admin dashboard_pwd = admin vhost_http_port = 10080 vhost_https_port = 10443如果沒有必要,端口均可使用默認值,token、user和password項請自行設置。
- “bind_port”表示用于客戶端和服務端連接的端口,這個端口號我們之后在配置客戶端的時候要用到。
- “dashboard_port”是服務端儀表板的端口,若使用7500端口,在配置完成服務啟動后可以通過瀏覽器訪問 x.x.x.x:7500 (其中x.x.x.x為VPS的IP)查看frp服務運行信息。
- “token”是用于客戶端和服務端連接的口令,請自行設置并記錄,稍后會用到。
- “dashboard_user”和“dashboard_pwd”表示打開儀表板頁面登錄的用戶名和密碼,自行設置即可。
- “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主機時使用,本文不涉及HTTP協議,因而照抄或者刪除這兩條均可。
編輯完成后保存(vim保存如果不會請自行搜索)。
之后我們就可以運行frps的服務端了
./frps -c frps.ini
如果看到屏幕輸出這樣一段內容,即表示運行正常,如果出現錯誤提示,請檢查上面的步驟。
此時訪問 x.x.x.x:7500 并使用自己設置的用戶名密碼登錄,即可看到儀表板界面
?
服務端后臺運行
至此,我們的服務端僅運行在前臺,如果Ctrl+C停止或者關閉SSH窗口后,frps均會停止運行,因而我們使用?nohup命令將其運行在后臺。
nohup后臺程序管理或關閉相關命令可自行查詢資料,上面這個連接中也有所提及。
nohup ./frps -c frps.ini &
輸出如下內容即表示正常運行
此時可先使用Ctrl+C關閉nohup,frps依然會在后臺運行,使用jobs命令查看后臺運行的程序
jobs
在結果中我們可以看到frps正在后臺正常運行
此時訪問 x.x.x.x:7500 依然可以打開儀表板界面,至此,服務端即設置完成,你可以關閉SSH窗口了。
?
客戶端設置
frp的客戶端就是我們想要真正進行訪問的那臺設備,大多數情況下應該會是一臺Windows主機,因而本文使用Windows主機做例子;Linux配置方法類似,不再贅述。
同樣地,根據客戶端設備的情況選擇相應的frp程序進行下載,Windows下下載和解壓等步驟不再描述。
假定你下載了“frp_0.22.0_windows_amd64.zip”,將其解壓在了C盤根目錄下,并且將文件夾重命名為“frp”,可以刪除其中的frps和frps.ini文件。
用文本編輯器打開frpc.ini,與服務端類似,內容如下。
其中common字段下的三項即為服務端的設置。
- “server_addr”為服務端IP地址,填入即可。
- “server_port”為服務器端口,填入你設置的端口號即可,如果未改變就是7000
- “token”是你在服務器上設置的連接口令,原樣填入即可。
?
自定義規則
frp實際使用時,會按照端口號進行對應的轉發,原理如下圖所示。
上面frpc.ini的rdp、smb字段都是自己定義的規則,自定義端口對應時格式如下。
- “[xxx]”表示一個規則名稱,自己定義,便于查詢即可。
- “type”表示轉發的協議類型,有TCP和UDP等選項可以選擇,如有需要請自行查詢frp手冊。
- “local_port”是本地應用的端口號,按照實際應用工作在本機的端口號填寫即可。
- “remote_port”是該條規則在服務端開放的端口號,自己填寫并記錄即可。
RDP,即Remote Desktop 遠程桌面,Windows的RDP默認端口是3389,協議為TCP,建議使用frp遠程連接前,在局域網中測試好,能夠成功連接后再使用frp穿透連接。
SMB,即Windows文件共享所使用的協議,默認端口號445,協議TCP,本條規則可實現遠程文件訪問。
配置完成frpc.ini后,就可以運行frpc了
frpc程序不能直接雙擊運行!
使用命令提示符或Powershell進入該目錄下
cd C:\frp
并執行
./frpc -c frpc.ini
運行frpc程序,窗口中輸出如下內容表示運行正常。
不要關閉命令行窗口,此時可以在局域網外使用相應程序訪問 x.x.x.x:xxxx (IP為VPS的IP,端口為自定義的remote_port)即可訪問到相應服務。
?
客戶端后臺運行及開機自啟
frpc運行時始終有一個命令行窗口運行在前臺,影響美觀,我們可以使用一個批處理文件來將其運行在后臺,而且可以雙擊執行,每次打開frpc不用再自己輸命令了。
在任何一個目錄下新建一個文本文件并將其重命名為“frpc.bat”,編輯,粘貼如下內容并保存。
將cd后的路徑更改為你的frpc實際存放的目錄。
之后直接運行這個 .bat 文件即可啟動frpc并隱藏窗口(可在任務管理器中退出)。
至于開機啟動,把這個 .bat 文件直接扔進Windows的開機啟動文件夾就好了 :)
至此,客戶端配置完成,之后就是你自己根據需要在frpc.ini后追加規則即可。
強烈建議你在使用frp直接測試內網穿透前,先在局域網內測試好相關功能的正常使用,并配置好可能會影響的Windows防火墻等內容,在內網調試通過后再使用frp進行內網穿透測試。
總結
以上是生活随笔為你收集整理的使用frp进行内网穿透的实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【校招面试 之 C/C++】第17题 C
- 下一篇: 【激活函数对比】