frp內網穿透實戰

什麼是frp

frp是一個使用非常簡單的開源內網穿透軟體,程式碼地址://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,不出意外的話已經內網穿透成功了:

訪問 //公網IP:7080 返回的應該是 //127.0.0.1:8080 的內容。

進階

自定義域名

直接使用IP最多只能允許一台內網伺服器訪問連接,自定義域名可以解決此問題。內網伺服器將custom_domains修改為一個能指向公網伺服器的域名,例如:

custom_domains = testfrp.haoji.me

然後訪問://testfrp.haoji.me:7080 即可看到 //127.0.0.1:8080 的內容。

只使用一個埠

公網伺服器的vhost_port其實可以和bind_port保持一致,這樣可以更好理解:

[common]
bind_port = 7000
vhost_http_port = 7000
vhost_https_port = 7000
token = 123456

然後訪問://testfrp.haoji.me:7000 即可看到 //127.0.0.1:8080 的內容。

隱藏訪問埠

用戶訪問的時候還需要帶一個埠,訪問不太方便,可以利用nginx再轉發一層:

server {
    listen       80;
    server_name  testfrp.haoji.me;
    location / {
           proxy_pass //testfrp.haoji.me:7000;
    }
}

然後訪問://testfrp.haoji.me 即可看到 //127.0.0.1:8080 的內容,實現了最完美的內網穿透。

Tags: