type
status
date
slug
summary
tags
category
icon
password
内网穿透可以把一台非公网 IP 的机子暴露给外网,实现外网在任何地方都能访问到这台机子部署的 web。
一般用于开发期还没部署到服务器或者需要频繁修改,又想给客户测试时临时使用。
目标实现
在任意网络输入
https://dev.frp.xxx.com
来访问运行在本地 5000 端口的 web 项目。所需工具
- 一台有公网 IP 的 VPS (Ubuntu)
- 域名一个
- supervisor
- nginx
步骤(VPS 端)
安装 frp
查看系统内核版本,然后在 frp 仓库的releases下载对应的版本
这里是 64 位,就下载 frp_0.29.0_linux_amd64.tar.gz
PS:如果权限不够,请自行加 sudo
修改配置文件 frps.ini
PS:没有vim的需要先安装 apt-get install vim
在/opt/frp/目录下编辑 frps.ini
subdomain_host
是你的域名,这里在域名加 frp 是为了避免污染你的二级域名,之后会申请 frp.xxx.com
的泛域名证书(因为一级域名似乎没法免费申请泛域名证书),方便在 PC 端可以直接配置多个 xxx.frp.xxx.com
这种三级域名的 https。安装 supervisor
使用 supervisor 来让 frp 开机自启
创建 supervisor frps 配置文件
在 /etc/supervisor/conf.d 创建 frp.conf
重启 supervisor,查看状态
如果显示 frp RUNNING 就是正常运行了
安装 Nginx
申请免费的 SSL 证书
- 到这网站申请泛域名证书freessl.cn;
- 在输入框输入你刚刚配置的域名,比如:
.frp.xxx.com
,选择 Let's Encrypt V2;
- 按照提示流程申请,申请后需要校验域名的解析,才会核发,需要在域名供应商那里按提示添加
TXT
解析即可,同时也要将.frp.xxx.com
泛解析到你的 vps 上;
- 申请成功之后,在 KeyManager 软件工具那里导出 nginx 版本的证书。
将导出来的的证书放在 nginx 的目录下,分别是:
/etc/nginx/ssl/*.frp.xxx.com/*.frp.xxx.com_chain.crt
/etc/nginx/ssl/*.frp.xxx.com/*.frp.xxx.com_key.key
配置 Nginx
在/etc/nginx/conf.d 目录下添加 frp.conf 文件:
保存后重启 nginx
如果没有报错,则配置是正确的
这个配置主要用于添加泛域名证书,顺便把 8080 端口反向代理 80。
不反向代理访问 web 会是这样的:
https://xxx.frp.xxx.com:8080
而反向代理访问 web 会是这样的:
https://xxx.frp.xxx.com
到此,vps 端就全部配置好了
本地 PC 端配置
本地也需要下载对应的 frp 客户端软件,在 release 下载 windows 版本的即可。
下载解压后,修改里面的 frpc.ini 的配置:
server_addr
是你的服务器 ip
server_port
是对应服务器端配置的端口
subdomain
是三级域名,即dev.frp.xxx.com
type
虽然可以设置为https
,但是证书需要放在本地,通用性不强,换了其他电脑,还需要重新拷一份 ssl 证书。
保存后,启动 cmd 或者 PowerShell 在软件目录直接运行:
如果显示
start proxy success
,则表示连接成功,已经实现内网穿透了,可以通过外网输入 https://dev.frp.xxx.com
或者 https://test.frp.xxx.com
来访问运行在本地 5000 或者 5050 端口的 web。- Author:Teo
- URL:https://teojs.com/article/155fac32-1944-42b9-8a32-ffb866769181
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!