FRP 使用记录
前言
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
使用示例 https://gofrp.org/docs/examples/
我对将要配置的 FRP 服务有如下目标:
- 支持 HTTPS
- 服务器打开端口尽可能少
- 使用简单、支持泛域名
- 和宝塔面板整合
安装服务端
下载服务端
对于服务器在国内的可以手动下载 最新版本的软件包,手动上传 https://github.com/fatedier/frp/releases/
服务器下载 wget https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_linux_amd64.tar.gz
解压 并打开目录
1 2 3
| tar xvfz frp_0.39.1_linux_amd64.tar.gz ls cd frp_0.39.1_linux_amd64
|
服务器上不需要 frpc
和 frpc.ini
,可以使用 rm -f frpc*
来进行删除
编辑服务端配置
vim frps.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [common] bind_addr = 0.0.0.0 bind_port = 30364 log_level = trace log_max_days = 3
vhost_http_port = 8571 vhost_https_port = 4430
dashboard_port = 7500
dashboard_user = admin dashboard_pwd = xxxxxx
subdomain_host = frp.xxxx.cn
|
对于 frp 服务端,可以使用系统的 systemd
,因为我是宝塔面板,为了更好控制,这里使用了 Supervisor管理器
, 在软件商店搜索并安装,为 frps 添加守护进程
这里需要注意启动命令是全路径命令 /www/wwwroot/frp.xxx.cn/frp_0.39.1/frps -c /www/wwwroot/frp.xxx.cn/frp_0.39.1/frps.ini
在宝塔面板 安全
中放行上面配置文件中写的 bind_port
, 并在服务器管理控制台添加防火墙规则,此端口允许访问
在 Supervisor管理器
中启动 frps 服务
Nginx 配置
这里提供几种配置
无 https + 泛域名解析 + 无面板程序
泛域名解析需要在 DNS 解析平台添加两个 A 记录,frp.xxx.cn
和 *.frp.xxx.cn
宝塔站点中的” 域名管理 “也要添加 *.frp.xxx.cn
在站点的配置文件中添加如下部分,并删除其他无关的 location css
等配置,否则可能会导致部分资源 404
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
| server { location / { proxy_redirect off; 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_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Url-Scheme $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://127.0.0.1:8571; } location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } }
|
https 的使用很简单,直接在宝塔面板中添加即可
泛域名解析 + 面板程序
我想达到访问 frp.xxx.cn
是控制面板,访问 a1.frp.xxx.cn
、a2.frp.xxx.cn
等 *.frp.xxx.cn
是正常的反代接口,由配置文件可知控制面板的端口是 7500
,做如下修改即可
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
| location / { set $is_matched 0; if ($host = 'frp.xxx.cn') { proxy_pass http://127.0.0.1:7500; set $is_matched 1; } proxy_redirect off; 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_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Url-Scheme $scheme;
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; if ($is_matched = 0) { proxy_pass http://127.0.0.1:8571; } }
|
frpc 客户端配置 (内网本地机子)
从仓库里下载对应版本的包 https://github.com/fatedier/frp/releases/
比如 windows 是 frp_0.39.1_windows_amd64.zip
解压后打开 frpc.ini
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [common] server_addr = server_port = 30364 [web1] type = http local_ip = 127.0.0.1 local_port = 32778 subdomain= 01
[web2] type = http local_ip = 192.168.1.7 local_port = 1456 subdomain= 02
|
打开命令行 使用 frpc.exe -c frpc.ini
启动客户端