frp 是一個可用于内網穿透的高性能的反向代理應用,支援 tcp, udp, http, https 協定。
frp 的作用
- 利用處于内網或防火牆後的機器,對外網環境提供 http 或 https 服務。
- 對于 http, https 服務支援基于域名的虛拟主機,支援自定義域名綁定,使多個域名可以共用一個80端口。
- 利用處于内網或防火牆後的機器,對外網環境提供 tcp 和 udp 服務,例如在家裡通過 ssh 通路處于公司内網環境内的主機。
架構

image.png
使用示例
下載下傳frp:
https://github.com/fatedier/frp/releases将 frps 及 frps.ini 放到具有公網 IP 的機器上。
将 frpc 及 frpc.ini 放到處于内網環境的機器上。
配置ssh通路公司内網多台伺服器及自定義子域名通路多台機器上的web服務
在多人同時使用一個 frps 時,通過自定義二級域名的方式來使用會更加友善。
通過在 frps 的配置檔案中配置
subdomain_host
,就可以啟用該特性。之後在 frpc 的 http、https 類型的代理中可以不配置
custom_domains
,而是配置一個
subdomain
參數。
隻需要将
*.{subdomain_host}
解析到 frps 所在伺服器。之後使用者可以通過
subdomain
自行指定自己的 web 服務所需要使用的二級域名,通過
{subdomain}.{subdomain_host}
來通路自己的 web 服務。
1. 下載下傳解壓
下載下傳的軟體包中包含frps和frpc所需的啟動程式和配置檔案。
wget https://github.com/fatedier/frp/releases/download/v0.14.1/frp_0.14.1_linux_amd64.tar.gz
tar xvf frp_0.14.1_linux_amd64.tar.gz
cd frp_0.14.1_linux_amd64
2. 編輯 frps.ini
frps.ini
[common]
bind_port = 7000 # frps與frpc用戶端通信的端口
vhost_http_port = 8080 # 對user開放的web通路端口
subdomain_host = frps.com
将泛域名
*.frps.com
解析到 frps 所在伺服器的 公網IP 位址。
啟動frps:
./frps -c ./frps.ini
3. 編輯 frpc.ini
frpc.ini
假設公司内網有三台伺服器,ip分别為:
- 10.0.1.104 (compute1)
- 10.0.1.105 (compute2)
- 10.0.1.106 (control1)
3.1 編輯10.0.1.104 (compute1)的
frpc.ini
[common]
server_addr = x.x.x.x # frps所在主機的IP
server_port = 7000 # frps與frpc用戶端通信的端口
[ssh-compute1] # 如果有多台内網伺服器共用一台frps,則這個名稱不能重複
type = tcp # 通信協定類型
local_ip = 10.0.1.104 # 本地IP
local_port = 2002 # 本地開放的SSH端口
remote_port = 6001 # 遠端通路的端口(多台内網伺服器,此端口不能重複), 從遠端通過ssh連接配接本機器,指令:ssh -p 6001 x.x.x.x
[web-compute1] # 内網多台web伺服器,此名稱不能重複
type = http # 通信協定類型
local_port = 8000 # 本地開放的web端口
subdomain = compute1 # 子域名
啟動frpc:
./frpc -c ./frpc.ini
可以通過
compute1.frps.com:8080
就可以通路到内網的web服務了。
SSH通路伺服器:
ssh -p 6001 x.x.x.x
3.2 編輯10.0.1.105 (compute2)的
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh-compute2]
type = tcp
local_ip = 10.0.1.105
local_port = 2002
remote_port = 6002
[web-compute2]
type = http
local_port = 8000
subdomain = compute2
通路到内網的web服務。
compute2.frps.com:8080
ssh -p 6002 x.x.x.x
3.3 編輯10.0.1.106 (control1)的
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 10.0.1.106
local_port = 2002
remote_port = 6000
[web]
type = http
local_port = 8000
subdomain = control1
control1.frps.com:8080
ssh -p 6000 x.x.x.x