需求场景

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/

下载程序包

前往GitHub Releases页面下载:

 

根据自己实际情况选择,解压后,客户端保存frpcfrpc.toml文件,在服务端保存frpsfrps.toml文件。

编辑frps.toml文件

服务器端,编辑frps.toml文件:

# frp服务的特定端口,防火墙也需放开该端口
bindPort = 7000
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
vhostHTTPPort = 86

编辑frpc.toml文件

客户端,编辑frpc.toml文件

bindPort = 7000 # 服务运行端口号
auth.method = "token" # 认证方式
auth.token = "token密钥" # 认证密钥
webServer.addr = "0.0.0.0" # 不限制IP访问
vhostTCPPort = 6000 # 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
webServer.port = 7500 # dashboard端口
webServer.user = "设置账号" # dashboard登录账号
webServer.password = "设置密码" # dashboard登录密码

[[proxies]]
# 自定义名称
name = "web"
# type这里写http
type = "http"
# 本地端口,例如本地启动的服务需要使用8000端口访问,这里就写8000
localPort = 8000
# 服务器的监听端口,与frps.toml一致
remotePort = 6000
# 域名或服务器的公网ip,我做了反向代理,这里写的公网ip
customDomains = ["xxx.xxx.xxx.xxx"]

启动服务端

方式一:直接启动

# 先cd到frps所在目录
./frps -c ./frps.toml &

方式二:以服务方式启动(推荐)

# 使用 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

启动客户端

服务端启动之后,在windows客户端的frpc所在目录下,打开cmd命令行,输入命令:

./frpc.exe -c ./frpc.toml

即可启动客户端服务,此时就实现了内网穿透
假设本地有一个服务需要使用http://127.0.0.1:8000访问,经过内网穿透后,访问http://xxx.xxx.xxx.xxx:86即可完成内网穿透。