frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it supports TCP and UDP, as well as HTTP and HTTPS protocols, where requests can be forwarded to internal services by domain name.

Frp 官方說明已經很清晰了,其主要功能就是內網穿透
對於沒有獨立 IP 但又想從外部網路訪問內部網路的需求,利用反向代理實現內網穿透是其中一種方式,比較主流的有 frpnpsngrok,其餘還有像 ZeroTier 這種利用 P2P 來實現的方式(當然 Frp 也支援 P2P 模式)
由於 ngrok 是商業軟體,雖然可以免費易用但有諸多限制,並且閉源,這裡直接 pass 掉。
nps 和 frp 都是免費的開源程式,並且沒有使用限制,但還是有所區別。nps 的使用設定在伺服端,所有操作通過 WEB 界面配置,對小白用戶非常友好,簡單快捷而且夠用。而 frp 的設定則在客戶端,這種架構比 nps 提供了更多高級設置,但同時也需要一定的基礎。在使用過 nps 和 frp 後,最後選擇保留 frp。


# 配置 frps.ini 檔案

/home/docker/frps 路徑新建一個名為「frps.ini」的檔案

vi /home/docker/frps/frps.ini

填寫配置

[common]
bind_addr = 0.0.0.0  #網橋地址,對於 IPv4 保持默認即可
bind_port = 7000  #綁定的連接埠,用於與客戶端連接
bind_udp_port = 7001  #UDP 連接埠​​,用於 UDP 打洞
kcp_bind_port = 7000  #使用 KCP 協議與客戶端連接時使用的連接埠
token = 12345678  #授權令牌,相當於密碼
vhost_http_port = 80  #從外部以 http 协议訪問 FRP 綁定的連接埠
vhost_https_port = 443  #從外部以 https 协议訪問 FRP 綁定的連接埠
dashboard_port = 7500  #frp 控制台綁定的連接埠
dashboard_user = admin  #用於基本身份驗證保護的儀表板的用戶名
dashboard_pwd = 123456  #用於基本身份驗證保護的儀表板的用戶密碼
tcp_mux = true  #tcp 連接埠復用,默認為 true
max_pool_count = 5  #每個代理中的 pool_count 如果超過最大值就會變成 max_pool_count

詳細的配置方法說明可以參考官方文檔
填寫完成後,按 ESC 鍵輸入 :wq 回車保存並退出

# Docker 安裝並啟動 frp

這裡使用 docker 進行安裝

docker pull snowdreamtech/frps
docker run -d --restart=always -p 7000:7000 -p 7001:7001/udp -p 80:80 -p 443:443 -v /home/docker/frps/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

(由於用不到 frp 控制台,雖然「frps.ini」有進行配置,但此處的 docker 啟動選項並為映射相應的連接埠)
如有需要可添加進 docker 的啟動參數

docker run -d --restart=always -p 7000:7000 -p 7001:7001/udp -p 80:80 -p 443:443 -p 7500:7500 -v /home/docker/frps/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps

待容器啟動後 frp 伺服端就已經安裝好了


# openwrt 下配置 frp 客戶端

這個由於有 GUI 就比簡單了,基本上按照「frps.ini」上的內容填寫就可以了

在「基本設置」中
01
服務器 :填寫運行 frp 服務端的獨立 IP 地址
:如果使用 TCP 協議,則填寫 bind_port 的值;如果使用 KCP 協議,則填寫 kcp_bind_port 的值
令牌 :填寫 token 的值
用戶名 :不影響連接配置,填喜歡的名字即可
HTTP穿透服務埠 :填寫 vhost_http_port 的值
HTTPS穿透服務埠 :填寫 vhost_https_port 的值
服務註冊間隔 :保持默認即可

在「高級設置」中
02
由於「frps.ini」中啟用了 tcp_mux ,這裡的 TCP 連接埠服用也勾選上
協議類型 :根據需求選擇 TCP 或 KCP
開啟網頁管理 :根據需求啟用或關閉(此處的「frp 控制台」運行在本地,與伺服器上的「frp 控制台」並不是同一個)

# 添加服務列表

根據服務類型填寫好相關的參數,加密與壓縮建議開啟,填好後保存即生效

如果發現啟動失敗或穿透不成功,可以嘗試重啟 openwrt 和伺服器並檢查防火牆是否放行相關連接埠