内网穿透工具--FRP

最近装了黑群晖,有了内网穿透的需求,大学时做微信开发当时用过ngrok,现在貌似2.0版本不开源了,因此选择了更加易用的FRP(Fast Reverse Proxy)来搭建自己的内网穿透链路。

环境

  1. 1台有公网IP服务器或者VPS (没有的话可以用别人免费的frps)
  2. 一个自己的域名 (没有的话,用免费frps提供的域名)

FRP原理

由于ipv4地址已经用尽,因此一般家庭宽带很少给提供公网IP,另外家庭宽带暴露在公网IP下也不是很安全,因此使用内网穿透是一种比较通用的解决方案,FRP就是这种解决方案的一种实现。FRP分为server端与client端,server端是部署在有公网ip的服务器上,client端则运行在内网环境,当client启动时会主动与server端建立连接,那么server与client间就有了一个通信隧道,当用于访问公网ip机器时,通过这个隧道转发请求到内网服务器,从而达到穿透的目地,借用少数派的一张图。

部署frps

frps是运行在公网服务器上的服务,去https://github.com/fatedier/frp/releases下载对应服务器的版本后修改frps.ini文件,可以参考完整版的frps_full.ini文件示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
[common]
bind_port = 7000
# 简单密码验证
token = 123456
# http服务访问端口
vhost_http_port = 80
vhost_https_port = 443
# kcp 绑定的是 udp 端口,可以和 bind_port 一样
kcp_bind_port = 7000
# 连接池配置
max_pool_count = 100
# 域名配置
subdomain_host = mrdear.cn

这里配置subdomain_host为你想要使用的自定义域名,之后启动fprs。

1
2
# 启动frps服务
nohup ./frps -c frps.ini &

启动成功则有以下提示,则证明frps已经正常工作了。

1
2
3
4
2019/08/23 11:10:57 [I] [service.go:146] frps tcp listen on 0.0.0.0:7000
2019/08/23 11:10:57 [I] [service.go:155] frps kcp listen on udp 0.0.0.0:7000
2019/08/23 11:10:57 [I] [service.go:188] http service listen on 0.0.0.0:80
2019/08/23 11:10:57 [I] [service.go:209] https service listen on 0.0.0.0:443

部署frpc

frpc是运行在内网上的服务,假设公网是8.7.6.5,那么客户端按照如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
server_addr = 8.7.6.5
server_port = 7000
token = 123456
# 客户端启动后连接池数量
pool_count = 20
use_gzip = true
protocol = kcp

[nas]
type = http
local_ip = 192.168.2.180
local_port = 5000
subdomain= nas

这里设置二级域名subdomain为nas,接着把 nas.mrdear.cn解析到对应的服务器ip地址8.7.6.5,访问nas.mrdear.cn的请求则都会被转发到内网的192.168.2.180:5000地址上,到此FRP内网穿透配置完毕。

参考

  1. 使用frp进行内网穿透
  2. https://github.com/fatedier/frp
程序员的核心能力(转)
Spring -- 常用的文件工具类