简介
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
github:https://github.com/fatedier/frp
FRP 安装
1 2 3 4 5 6 7
| -- 服务端 wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz tar xzvf frp_0.29.0_linux_amd64.tar.gz mv frp_0.29.0_linux_amd64 frp
-- 客户端 https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_windows_amd64.zip
|
更多版本前往:https://github.com/fatedier/frp/releases
起步
这里以linux作为服务端,windows作为客户端实现web服务http/https穿透
简单连接
默认配置中监听的是 7000 端口,可根据自己实际情况修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ vi frps.ini
[common] bind_port = 7000
# 最大连接数 max_pool_count = 500 # 客户端映射的端口 vhost_http_port = 9527 # 服务器看板的访问端口 dashboard_port = 7500 # 服务器看板账户 dashboard_user = root # 服务器看板密码 dashboard_pwd = 123456
|
启动
修改frpc.ini文件
1 2 3 4 5
| [common] # server_addr 为 FRP 服务端的公网 IP server_addr = 127.0.0.1 # server_port 为 FRP 服务端监听的端口 server_port = 7000
|
cmd cd到目录下执行.\frpc.exe -c frpc.ini
这样就可以成功在 FRP 服务端上成功建立一个客户端连接,此时我们还没有注册任何端口映射
通过 TCP 访问内网机器
frpc.ini添加
1 2 3 4 5
| [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
|
这样就在 FRP 服务端上成功注册了一个端口为 6000 的服务,接下来我们就可以通过这个端口访问内网机器上 SSH 服务,假设用户名为 frp:
$ ssh -oPort=6000 frp@公网IP
通过自定义域名访问部署于内网的 Web 服务
1 2 3 4 5 6 7
| $ vim frps.ini [common] bind_port = 7000 # HTTP 访问端口以8080为例,自改 vhost_http_port = 8080
$ ./frps -c ./frps.ini
|
frpc.ini添加
1 2 3 4 5 6 7
| [web] # type = https对应的服务端vhost_http_port改为vhost_https_port type = http # 内网端口 local_port = 80 # 使用域名需要将域名A记录解析到 FRP 服务器的公网 IP custom_domains = 服务端域名/ip
|
启动客户端即可以通过 http://服务端域名/ip:8080访问内网http://ip:80服务
为本地 HTTP 服务启用 HTTPS
通过 https2http 插件可以让本地 HTTP 服务转换成 HTTPS 服务对外提供。
启用 frpc,启用 https2http 插件,配置如下:
frpc.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [common] server_addr = x.x.x.x server_port = 7000
[test_htts2http] type = https custom_domains = test.yourdomain.com
plugin = https2http plugin_local_addr = 127.0.0.1:80
# HTTPS 证书相关的配置 plugin_crt_path = ./server.crt plugin_key_path = ./server.key plugin_host_header_rewrite = 127.0.0.1 plugin_header_X-From-Where = frp
|
通过浏览器访问 https://test.yourdomain.com 即可。
自定义二级域名
在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便。
只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务。
frps.ini
1 2 3
| [common] subdomain_host = frps.com 将泛域名 *.frps.com 解析到 frps 所在服务器的 IP 地址。
|
frpc.ini
1 2 3 4
| [web] type = http local_port = 80 subdomain = test
|
frps 和 frpc 都启动成功后,通过 test.frps.com 就可以访问到内网的 web 服务。
注:如果 frps 配置了 subdomain_host,则 custom_domains 中不能是属于 subdomain_host 的子域名或者泛域名。
同一个 http 或 https 类型的代理中 custom_domains 和 subdomain 可以同时配置。
通过密码保护你的 web 服务
frpc.ini
1 2 3 4 5 6
| [web] type = http local_port = 80 custom_domains = test.yourdomain.com http_user = abc http_pwd = abc
|
通过浏览器访问 http://test.yourdomain.com,需要输入配置的用户名和密码才能访问。
更多功能
- 对外提供简单的文件访问服务
- 安全地暴露内网服务
- 点对点内网穿透
- ···