使用frp构建内网穿透

安装

  1. 访问 frp-release 下载指定平台的版本
  2. 解压 tar -xzf abc.tar.gz
1
2
3
4
5
6
# 下载指定文件,比如
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
# 解压
tar -xzf frp_0.58.0_linux_amd64.tar.gz
# frpc 客户端 fprs 服务端

使用

服务端

配置

启动服务端/path/to/frps -c /path/to/frps.toml

1
2
3
4
5
6
7
# 用于客户端连接
bindPort = 7000
# frps的http服务监听的端口
vhostHTTPPort = 8080
# 客户端连接校验码(客户端需与之相同)
auth.token = xxx
log.to = "./frps.log"

使用Systemd启动

  1. 编辑服务文件 sudo vim /etc/systemd/system/frps.service
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target
  1. 设置开机启动 sudo systemctl enable frps
  2. 管理frps服务 sudo systemclt start frps

反向代理

使用nginx配置将指定域名的访问转到frps监听的端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
upstream frps{
server 127.0.0.1:8080;
}
server{
listen 80;
# 有ssl则设置ssl
# 设置自己的域名
server_name *.your.domain;
location / {
proxy_pass http://frps;
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 默认60s断开连接
proxy_read_timeout 60s;
}
}

客户端

HTTP服务器配置

启动客户端 /path/to/frpc -c /path/to/frpc.toml

1
2
3
4
5
6
7
8
9
10
11
12
# 客户端连接校验码(需与服务端相同)
auth.token = xxx
log.to = "./frpc.log"
[[proxies]]
name = "web2"
type = "http"
localPort = 80
# 设置该端口负责的域名,转到该客户端
customDomains = ["abc.your.domain"]
# 将域名重写为改地址,用户nginx反向代理,指向本地真实的服务器
hostHeaderRewrite = "abc.local"

参考文档

  1. frp官方文档
  2. frp-gihub