前言

  由于公司的ngrok开源版三天两头就挂掉,并且ngrok开源版已经停止维护了,所以我决定更换公司的内网穿透工具,经过一番查找,发现frp符合我的需求,在此记录一下frp搭建的过程
  本文主要讲解如何搭建frp内网穿透,及如何配合nginx实现配置多个子域名访问内部服务,故本文只介绍如何安装配置frp,本文默认您已掌握nginx的安装及使用方法

frp介绍

  frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透

准备工作

  1. 可以上网的电脑
  2. 带公网ip的服务器
  3. 已备案的域名
  4. frp 下载地址
  5. nginx 下载地址

安装frp

  下载完frp压缩包后,打开会发现frpc文件夹和frps文件夹,frpc是客户端,安装在内网机器上,frps是服务端,安装在具有公网ip的服务器上

配置frps服务端

编辑frps.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
# frp连接的端口
bind_port = 7000

# http监听端口
vhost_http_port = 8080
# https监听端口
vhost_https_port = 8443

# frp客户端连接服务端时的token 为了安全 建议添加
token = tPaALZKtCBfN6IAp

# 二级域名 后面访问的格式是a.frp.xxx.net或b.frp.xxx.net
subdomain_host = frp.xxx.net

启动frps

./frps -c ./frps.ini

域名解析

frp.xxx.net*.frp.xxx.net指向你的服务器公网ip,并测试是否解析成功

配置frpc客户端

编辑frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[common]
# 公网ip 就是frps所在的服务器的ip
server_addr = xxx.xxx.xxx.xxx
# frps规定的连接端口
server_port = 7000
# 连接token 与frps中的token
token = tPaALZKtCBfN6isP
# 定义第一个转发

[ssh]
type = tcp
local_ip = 127.0.0.1
# 本地ssh端口
local_port = 22
# 远程访问ssh端口
remote_port = 6000

[web01]
type = http
# 本地(内网)服务的端口
local_port = 8001
# 与frps中的subdomain_host连接起来就是a.frp.xxx.net
subdomain = a

# 定义第二个转发
[web02]
type = http
# 本地(内网)服务的端口
local_port = 8002
# 与frps中的subdomain_host连接起来就是b.frp.xxx.net
subdomain = b

启动frpc

./frpc -c ./frpc.ini

配置nginx转发

编辑nginx.conf

1
2
3
4
5
6
7
8
9
10
11
server {
# 监听的80端口
listen 80;
# 域名配置 记得一定要加上*.frp.xxx.net这个,只加frp.xxx.net是不行的
server_name * .frp.xxx.net frp.xxx.net;
location / {
proxy_pass http: //127.0.0.1:8080;
# 这个Host的header一定要加,不然转发后frp拿不到通过哪个域名访问的,导致转发失败
proxy_set_header Host $host;
}
}

然后重启nginx,至此配置结束,输入xxx.frp.xxx.net开启你的内网穿透之旅吧!