frp是一個使用非常簡單的開源內網穿透軟體,程式碼地址:https://github.com/fatedier/frp ,使用條前提你需要有一臺公網伺服器,大致原理是:公網伺服器監聽某個埠等待內網伺服器連線,內網伺服器連線成功後用戶存取公網的某一個埠,存取的所有內容都會轉發到內網伺服器,也就是所有的請求都會經過公網伺服器轉發一次,還不是真正的完全內網穿透。
tar -zxvf frp_0.43.0_linux_amd64.tar.gz
mv frp_0.43.0_linux_amd64 frps
cd frps
# 刪除使用者端相關無用檔案
rm -rf frpc*
vim frps.ini
frps.ini
設定:
[common]
# 等待內網伺服器連線的埠
bind_port = 7000
# 終端使用者存取的埠(http)
vhost_http_port = 7080
# 終端使用者存取的埠(https)
vhost_https_port = 7081
# 金鑰,最好設定,避免你的伺服器被他人冒用
token = 123456
啟動:./frps -c ./frps.ini
,不出意外的話就啟動成功了:
也就是你本機,假設以Mac為例:
tar -zxvf frp_0.43.0_darwin_arm64.tar.gz
mv frp_0.43.0_darwin_arm64 frpc
cd frpc
# 刪除伺服器端相關檔案
rm -rf frps*
vim frpc.ini
frpc.ini
設定:
[common]
# 你的公網IP
server_addr = 112.*.*.*
# 前面設定的連線埠
server_port = 7000
# 前面設定的金鑰
token = 123456
# 這個名字可以隨便取web1、web2等,但是需要保證所有使用者端唯一
[web1]
type = http
# 需要轉發的內網埠
local_port = 8080
# 自定義域名,如果沒有域名直接填寫公網伺服器的IP
custom_domains = 112.*.*.*
然後啟動:./frpc -c ./frpc.ini
,不出意外的話已經內網穿透成功了:
存取 http://公網IP:7080 返回的應該是 http://127.0.0.1:8080 的內容。
直接使用IP最多隻能允許一臺內網伺服器存取連線,自定義域名可以解決此問題。內網伺服器將custom_domains
修改為一個能指向公網伺服器的域名,例如:
custom_domains = testfrp.haoji.me
然後存取:http://testfrp.haoji.me:7080 即可看到 http://127.0.0.1:8080 的內容。
公網伺服器的vhost_port其實可以和bind_port保持一致,這樣可以更好理解:
[common]
bind_port = 7000
vhost_http_port = 7000
vhost_https_port = 7000
token = 123456
然後存取:http://testfrp.haoji.me:7000 即可看到 http://127.0.0.1:8080 的內容。
使用者存取的時候還需要帶一個埠,存取不太方便,可以利用nginx再轉發一層:
server {
listen 80;
server_name testfrp.haoji.me;
location / {
proxy_pass http://testfrp.haoji.me:7000;
}
}
然後存取:http://testfrp.haoji.me 即可看到 http://127.0.0.1:8080 的內容,實現了最完美的內網穿透。
【轉載文章務必保留出處和署名,謝謝!】