0%

内网穿透反向代理工具frp的使用

1.背景

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。场景:近期在研究微信公众号开发,发现需要暴露公网地址,并且是80端口的服务,正好手边有朋友买了腾讯云服务器,因此想通过腾讯云服务器作为frp的服务端,本地机器作为客户端,让公网可以直接访问内网本地机器发布的服务,实现内网穿透。

2.作用

  1. 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。

  2. 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。

  3. 利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

3.具体实现

通过tcp方式访问公司内网服务(当前公网服务器没有绑定域名的情况下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#修改 frps.ini 文件,这里使用了最简化的配置:
# frps.ini
[common]
bind_port = 7000
启动 frps:
./frps -c ./frps.ini

#修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 8088
remote_port = 80
启动 frpc:
./frpc -c ./frpc.ini

通过http的方式访问公司内网服务(当前公网服务器已经绑定域名的情况下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#修改 frps.ini 文件
[common]
# frp服务监听client的端口
bind_port = 7000
# http形式的外网开放端口
vhost_http_port = 7001
# 子域名
subdomain_host = vic.com

#修改 frpc.ini 文件
[http-8088]
# http-8051 表示名字,随便起
# type有http、tcp等多种类型,一般只用这两种
type = http
# 需要穿透内网服务的ip
local_ip = 192.168.1.187
# 内网服务的端口
local_port = 8088
# 子域名,因为ynt.ai开启了域名泛解析,二级域名只是作为每个服务的区分
# 不可与其他服务的子域名重复
subdomain = test
# 比如这个服务只用访问 http://test.vic.com:7001就可以访问到

通过浏览器查看 frp 的状态以及代理统计信息展示。需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:

1
2
3
4
5
[common]
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin

打开浏览器通过 http://[server_addr]:7500 访问 dashboard 界面,用户名密码默认为 admin

QQ截图20180310205939.jpg