一、序言
内网穿透,简单说就是可以让互联网访问内网本地服务,比如在进行微信公众号开发时就需要能够暴露本地服务给微信官方服务器鉴权,又或者需要将本地正在开发的页面给外部需求方访问。
内网穿透的工具,例如:
ngrok
使用 Go 开发,官方免费的版本太旧,自己搭建很多功能不能用,比如自定义域名;用第三方提供的服务不稳定localtunnel
使用 Node.js 开发,使用上对于前端开发人员来说更方便,但是毕竟是用的国外服务器,亲测域名不可用
这里推荐一款开源,功能强大,全平台支持的工具 – frp。
当然,我们需要有以下装备:
- 一个可用域名
- 一台可访问互联网的服务器
接下来就可以搭建一个自定义域名来实现内网穿透。
二、架构设计
简单来说,公网机器跑 frps 监听并转发请求给本地机器上的 frpc,frpc 接口后将内容返回给 frps。
三、域名配置
如果我们需要通过类似 demo.frp.domain.com
、game.frp.domain.com
的方式来访问本地服务,则需要设置 frp
与 *.frp
两个 A 记录指向服务器所在 IP,这样 frp.domain.com
这个二级域名与三级域名就由 Web 服务接管。
四、软件配置
我们下的都是编译后的版本,所以只要修改下配置文件启动即可。进入 frp 发布页 找到对应系统版本下载,这里说下常用的几个平台。
- macOS 对应 frp_0.21.0_darwin,只有 64 位
- Windows 对应 frp_0.21.0_windows,包含 32/64 位
- Linux 分支较多,比如常用的 CentOS 对应 frp_0.21.0_linux,包含 32/64 位
每个平台下包含的配置文件是一样的,只是执行软件后缀不一样,文件结构如下:
|-- frp |-- frpc.* 各平台的本地主程序,后缀不一样 |-- frpc.ini 各平台的本地自定义配置文件 |-- frpc_full.ini 各平台的本地配置文件(包含所有可配置项) |-- frps.* 各平台的远程服务器主程序,后缀不一样 |-- frps.ini 各平台的远程服务器自定义配置文件 |-- frps_full.ini 各平台的远程服务器配置文件(包含所有可配置项) |-- LICENSE 版权文件
4.1 服务端配置
SSH 登录服务器,主要操作如下:(服务器系统 CentOS 7.5)
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz tar -zxvf frp_0.21.0_linux_amd64.tar.gz cd frp_0.21.0_linux_amd64 vi frps.ini
服务端只需要关注 frps 相关的文件,如下我们先修改配置。
[common] # frp server 绑定的端口,默认7000,建议修改 bind_port = 7000 # 设置 http 访问端口 vhost_http_port = 80 # 设置域名 subdomain_host = frp.domain.com # 认证字符,防止被知道服务器IP和端口就能使用 token = 12345678 # 配置 dashboard(可选),以下信息都建议修改 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin
记得这里设置的端口都需要在防火墙放行,如果是使用类似阿里云的云服务器,还需要在安全组里面放行,接下来启动服务即可:
./frps -c frps.ini
如果有需要防止关闭 SSH 后命令就断开,可以使用系统提供的 screen 来管理。
# 大部分服务器默认安装,如果安装运行下 yum install screen # 新建一个会话 screen -S millylee # 输入命令后便可关闭 SSH 工具 ./frps -c frps.ini
4.2 本地配置
如果本地是 Windows 系统,就和下载便携软件差不多,解压后配置启动下即可,当然,本地需要关注的是 frpc 相关的文件,这里修改 frpc.ini
文件。
[common] # 远程服务品 IP server_addr = 47.105.38.113 # 远程服务器端口 server_port = 7000 # 认证字符,必须和远程服务器一致 token = 12345678 [demo] type = http # 需要代理的本地端口 local_port = 7001 # 子域名,按之前配置后面是通过 demo.frp.domain.com 访问本地的 localhost:7001 subdomain = demo
Windows 也需要以命令行方式启动。这里建议直接在同一个目录下面新建一个 server.cmd
文件,然后写入以下内容,需要的时候双击运行即可。
frpc.exe -c frpc.ini pause
原文链接:https://sawlove.com/frp.html