frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
frp 的作用
- 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
- 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
- 利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
架构
使用示例
下载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
[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
假设公司内网有三台服务器,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
可以通过
compute2.frps.com:8080
访问到内网的web服务。
SSH访问服务器: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
访问到内网的web服务。
SSH访问服务器:ssh -p 6000 x.x.x.x