frp實現內網穿透極簡教程
本文是內網穿透極簡教程,為求簡潔,我們不介紹為什么內網穿透也不介紹其原理,這里假設各位讀者都已經明確的知道自己的目的,本文僅介紹如何安裝配置 frp 實現內網穿透。
簡單來說,內網穿透就是實現將內網的端口轉發到公網,從而實現公網對內網資源的訪問。為此,我們需要一臺具有公網 IP 的 VPS 服務器(各 VPS 服務提供商如阿里云、騰訊云等均可),和一臺需要被穿透的內網設備(以下稱客戶端)。
frp安裝
直接去 github 發布頁面 下載壓縮包,客戶端和服務器都需要,按照各自的機器類型下載對應的壓縮包,然后解壓:
wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz
tar xf frp_0.42.0_linux_amd64.tar.gz
服務器端配置
注意:本節操作均在 VPS 服務器端
解壓完成后進入目錄,可以看到幾個可執行文件和 ini 配置文件:
cd frp_0.42.0_linux_amd64/
ls -l
-rw-r--r-- 1 1001 121 11358 Apr 22 11:42 LICENSE
-rwxr-xr-x 1 1001 121 10936320 Apr 22 11:38 frpc
-rw-r--r-- 1 1001 121 126 Apr 22 11:42 frpc.ini
-rw-r--r-- 1 1001 121 10814 Apr 22 11:42 frpc_full.ini
-rwxr-xr-x 1 1001 121 14016512 Apr 22 11:38 frps
-rw-r--r-- 1 1001 121 159 May 4 17:15 frps.ini
-rw-r--r-- 1 1001 121 5460 Apr 22 11:42 frps_full.ini
drwxr-xr-x 2 1001 121 4096 Apr 22 11:42 systemd
其中 frps, frps.ini
、fprc, frpc.ini
是我們主要要用到的可執行文件和對應的配置文件,前兩者的 s 表示的是 server ,即服務器;而后兩者的 c 表示的是 client 客戶端,我們現在是在配置服務器端,自然是關注前者。
編輯 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
- 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協議,因而照抄或者刪除這兩條均可。
沒有特殊需要的話端口按默認值配置即可,token、dashborad_user 和 dashboard_password 幾項記號并保護好,后面要用。
還有一點要注意的是:確認你的 VPS 服務器是否開放了對應的端口,若未開放需要到服務提供商的控制臺開放。
配置完成之后嘗試運行:
./frps -c frps.ini
得到類似如下輸出,則說明配置基本成功:
2022/05/04 20:52:27 [I] [root.go:200] frps uses config file: frps.ini
2022/05/04 20:52:27 [I] [service.go:194] frps tcp listen on 0.0.0.0:7000
2022/05/04 20:52:27 [I] [service.go:237] http service listen on 0.0.0.0:10080
2022/05/04 20:52:27 [I] [service.go:252] https service listen on 0.0.0.0:10443
2022/05/04 20:52:27 [I] [service.go:293] Dashboard listen on 0.0.0.0:7500
2022/05/04 20:52:27 [I] [root.go:209] frps started successfully
我們可以去查看一下 dashboard,打開瀏覽器輸入 URL:xx.xxx.xxx.xx:7500 ,然后輸入我們剛才配置的用戶名和密碼即可進入,大概長這樣:
這一步也沒有問題的話服務器端就配置成功了。
我們 Ctrl-C 終止掉剛才的程序,改為后臺運行,因為我們總是需要端口轉發程序一直運行在,但又不需要操作它,因此放在后臺,保存日志文件即可:
nohup ./frps -c frps.ini 2>&1 > frps.log &
執行上述命令,frp 服務將運行在后臺并將日志輸出到 frps.log
,退出當前 terminal 即可。
客戶端配置
注意:本節操作均在本地客戶端
還是下載對應的壓縮包并解壓,進入目錄,還是那些文件,我們現在是在客戶端 client ,因此,我們現在要關注的是 fprc, frpc.ini
這兩個文件。
編輯 frpc.ini
:
[common]
server_addr = xx.xxx.xxx.xx
server_port = 7000
token = 12345678[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001 [test]
type = tcp
local_ip = 0.0.0.0
local_port = 7100
remote_port = 7200[xxx]
type = tcp
local_ip = 0.0.0.0
local_port = 7300
remote_port = 7400
common 字段的 server_addr 為服務端公網 IP 地址。其他兩項 server_port, token 就是我們在服務器端配置過的內容,保持一致即可。
其余的 rdp ,xxx 等字段就是用戶可以定義的規則,根據自己轉發的是什么服務自行命名即可
- type 表示轉發的協議類型,如 TCP 和 UDP 。
- local_port 是本地應用的端口號,填入該項服務在本機實際使用的端口號。
- remote_port 是該項服務在服務端開放的端口號。
與服務器端類似,運行
./frpc -c frpc.ini
出現類似以下輸出說明配置成功,
2022/05/04 21:11:10 [I] [service.go:349] [ecc57bb476f85c28] login to server success, get run id [ecc57bb476f85c28], server udp port [0]
2022/05/04 21:11:10 [I] [proxy_manager.go:144] [ecc57bb476f85c28] proxy added: [test]
2022/05/04 21:11:10 [I] [control.go:181] [ecc57bb476f85c28] [test] start proxy success
同樣是放到后臺運行:
nohup ./frpc -c frpc.ini 2>&1 > frpc.log &
測試
我們用一個簡單的 flask 服務測試一下端口轉發的效果。
先準備一個 hello.py
:
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, World!'
注意我們在配置的測試端口是:本地為 7100,遠程為 7200,因此這里我們應該將服務運行到本地的 7100 端口:
python -m flask run --host 0.0.0.0 -p 7100
frp 會幫我們轉發到遠程的 7200 端口(打碼的地方換成你的服務器 IP):
并且,我們還可以再去 dashboard 中看一下:
已經可以查看到我們的測試服務及其流量,即告測試成功。
若有錯誤或疑問,歡迎留言交流。
Ref:
https://sspai.com/post/52523