文章目录
- 01 需求与回顾
- 02 下载程序包
- 03 编辑.toml文件
- 3.1 编辑frps.toml
- 3.2 编辑frpc.toml
- 04 启动服务
- 4.1 启动服务端
- 4.2 启动客户端
- 05 配置反向代理(可选)
- 06 windows设置为默认启动(可选)
- 6.1 创建启动脚本
- 6.2 设置为开机自启
01 需求与回顾
数月前我写过一篇《使用FRP搭建内网穿透服务》的博客,当时用的frp版本为0.49.0
,如今随着版本升级,配置方式发生了变化。官网文档地址也发生了变化。
-
需求场景
1、有一台云服务器,Linux系统
2、云服务器有公网ip,公网可以访问
3、本地电脑是家用笔记本,Windows操作系统
4、本地电脑没有公网ip,公网无法访问
需求:将云服务器搭建为一台内网穿透服务器,实现通过外网访问家用电脑(网页)的功能。且即使没有域名也可通过公网ip访问。 -
项目地址
GitHub:https://github.com/fatedier/frp
releases页面:https://github.com/fatedier/frp/releases
官方文档:https://gofrp.org/zh-cn/
02 下载程序包
前往GitHub Releases页面下载:
根据自己实际情况选择,我的是x64的windows系统,服务器也是x64架构。选择图中两项。
解压后,在windows端保存frpc
和frpc.toml
文件,在Linux端保存frps
和frps.toml
文件。
03 编辑.toml文件
3.1 编辑frps.toml
服务器端,编辑frps.toml
文件:
# frp服务的特定端口,防火墙也需放开该端口
bindPort = 7000
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
vhostHTTPPort = 86
3.2 编辑frpc.toml
客户端,编辑frpc.toml
文件:
# 服务器的公网ip
serverAddr = "xxx.xxx.xxx.xxx"
# 7000端口 与frps.toml一致
serverPort = 7000
[[proxies]]
# 自定义名称
name = "web"
# type这里写http
type = "http"
# 本地端口,例如本地启动的服务需要使用8000端口访问,这里就写8000
localPort = 8000
# 服务器的监听端口,与frps.toml一致
remotePort = 86
# 域名或服务器的公网ip,我做了反向代理,这里写的域名
customDomains = ["xxx.xxx.xxx.xxx"]
04 启动服务
4.1 启动服务端
-
直接启动
服务器端,传统的启动方式是直接敲命令:
# 先cd到frps所在目录 ./frps -c ./frps.toml &
这么写,比较麻烦,而且如果要停止进程也比较麻烦,建议采用构建成服务的方式。
-
以服务方式启动(推荐)
安装systemd,通常情况下系统都带得有,没有的情况下使用如下命令安装。
# 使用 yum 安装 systemd(CentOS/RHEL) yum install systemd # 使用 apt 安装 systemd(Debian/Ubuntu) apt install systemd
创建frps.service服务
# 创建并编辑该文件 sudo vim /etc/systemd/system/frps.service
写入内容
[Unit] # 服务名称,可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动命令,改为实际存放frps的路径 ExecStart = /path/to/frps -c /path/to/frps.toml [Install] WantedBy = multi-user.target
以服务的方式管理frps
# 启动frp sudo systemctl start frps # 停止frp sudo systemctl stop frps # 重启frp sudo systemctl restart frps # 查看frp状态 sudo systemctl status frps # 设置为开机自启 sudo systemctl enable frps
4.2 启动客户端
服务端启动之后,在windows客户端的frpc所在目录下,打开cmd命令行,输入命令:
./frpc.exe -c ./frpc.toml
即可启动客户端服务,此时就实现了内网穿透。
假设本地有一个服务需要使用http://127.0.0.1:8000
访问,经过内网穿透后,访问http://xxx.xxx.xxx.xxx:86
即可。
05 配置反向代理(可选)
使用npm做的反向代理,其他情况的反代参考即可。
修改图中红框处,此外,还需要做一些额外的设置才能访问。
location / {
# 内网ip及端口
proxy_pass http://10.0.8.16:86;
# 这里写frpc.toml中配置的域名或公网ip,即配置内容最下面那行,我写的域名
proxy_set_header Host xxx.xxx.xxx.xxx;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
06 windows设置为默认启动(可选)
6.1 创建启动脚本
在frpc所在目录下新建一个run.cmd
脚本,并写入以下内容:
:@echo off
:%1(start /min cmd.exe /c %0 :&exit)
cd "C:\Users\xxx\Desktop\frp"
ping -n 10 127.1>nul
frpc.exe -c frpc.toml
其中第3行需要替换成自己的frpc所在目录的绝对路径。
第3行是做了一个延时执行,避免刚开机时网络不稳定时连接失败造成脚本退出。
6.2 设置为开机自启
Win+Q搜索“任务计划程序”
打开“任务计划程序”。
- 在“操作”菜单中,选择“创建基本任务…”。
- 按照向导设置任务。在“触发器”步骤中,选择“当计算机启动时”。
- 在“操作”步骤中,选择“启动程序”,然后浏览选择您的批处理文件。
- 在“完成”步骤之前,勾选“打开属性对话框以进行进一步编辑”。
在属性对话框中,可以选择更多选项,比如“不管用户是否登录都要运行”和“以最高权限运行”。