1. 概述
本案例使用的frp版本为:v0.61.1
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。
frp 采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。此外,还可以通过 xtcp 实现 P2P 通信。
frp官网地址:https://gofrp.org/zh-cn/
github地址:https://github.com/fatedier/frp
frp的下载页面地址为:https://github.com/fatedier/frp/releases
2. linux版本
以下是 FRP 内网穿透工具的安装和配置步骤,分为服务端(公网服务器)和客户端(内网机器)两部分:
2.1. 下载
当前案例的下载链接为:https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
- 下载 , 可下载到任意目录
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
- 解压
tar -zxvf frp_0.61.1_linux_amd64.tar.gz
- 进入目录
cd frp_0.61.1_linux_amd64
目录结构和作用说明:
文件/目录 | 类型 | 作用 | |
---|---|---|---|
1 | frpc | 可执行文件 | FRP 的客户端端程序 ,部署在内网服务器上,用于将内网服务暴露到公网。 |
2 | frpc.toml | 配置文件 | FRP 客户端 的配置文件,定义客户端的行为和规则。 |
3 | frps | 可执行文件 | FRP 的服务端程序,部署在有公网 IP 的服务器上,负责接收客户端请求并转发流量。 |
4 | frps.toml | 配置文件 | FRP 服务端的配置文件,定义服务端的行为和规则。 |
5 | LICENSE | 文本文件 | FRP 的开源协议声明文件,通常为 MIT 协议(具体以实际版本为准)。 |
2.2. 服务端安装配置
2.2.1. 配置服务端文件 frps.toml
从 v0.52.0 版本开始,frp 开始支持 TOML、YAML 和 JSON 作为配置文件格式。
请注意,INI 已被弃用,并将在未来的发布中移除。新功能只能在TOML、YAML 或 JSON 中使用。希望使用这些新功能的用户应相应地切换其配置格式。
# 服务端监听地址,用于接收 frpc 的连接,默认监听 0.0.0.0。
bindAddr = "0.0.0.0"
# 服务端监听端口,默认值为 7000。
bindPort = 7000
#鉴权方式,可选值为 token 或 oidc,默认为 token。
auth.method = "token"
#在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。 根据实际使用进行配置
auth.token = "********"
#服务端 Dashboard 配置。
#默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
# dashboard端口
webServer.port = 7500
# 用户名 根据实际使用进行配置
webServer.user = "****"
# 密码 根据实际使用进行配置
webServer.password = "**********"
# tls
#transport.tls.force = true
#transport.tls.certFile = "/etc/frp/ssl/server.crt"
#transport.tls.keyFile = "/etc/frp/ssl/server.key"
#transport.tls.trustedCaFile = "/etc/frp/ssl/ca.crt"
2.2.2. 启动服务端frps
- 启动命令:
./frps -c ./frps.toml
因配置了Dashboard,所以可以通过web界面来进行查看。
打开浏览器通过 http://[server addr]:7500
访问 Dashboard 界面,输入用户名密码 根据配置进行输入。
2.2.3. 配置systemd管理frps服务
此示例演示如何在 Linux 系统下使用 systemd 来管理 frps 服务,包括启动、停止、配置后台运行和设置开机自启动。
在 Linux 系统下,使用 systemd
可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。
以下是具体的操作步骤:
- 安装 systemd
如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum
(适用于 CentOS/RHEL)或 apt
(适用于 Debian/Ubuntu)来安装它:
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
- 创建 frps.service 文件
使用文本编辑器 (如 vim) 在 /etc/systemd/system
目录下创建一个 frps.service
文件,用于配置 frps 服务。
sudo vim /etc/systemd/system/frps.service
写入内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
- 使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
- 设置 frps 开机自启动
sudo systemctl enable frps
2.3 客户端安装配置
2.3.1. 配置客户端文件 frpc.toml
# 服务端的公网ip地址 根据真实ip进行配置
serverAddr = "********"
# 服务端监听端口
serverPort = 7000
#鉴权方式,可选值为 token 或 oidc,默认为 token。
auth.method = "token"
#在 method 为 token 时生效,需要和服务端设置一样的值才能鉴权通过。 根据实际使用进行配置
auth.token = "*******"
webServer.addr = "0.0.0.0"
webServer.port = 7400
# 根据实际使用进行配置 用于web端管理界面的登录用户名
webServer.user = "*****"
# 根据实际使用进行配置 用于web端管理界面的登录密码
webServer.password = "*******"
webServer.pprofEnable = false
# tls
#transport.tls.certFile = "/etc/frp/ssl/client.crt"
#transport.tls.keyFile = "/etc/frp/ssl/client.key"
#transport.tls.trustedCaFile = "/etc/frp/ssl/ca.crt"
2.3.2. 启动客户端frpc
./frpc -c ./frpc.toml
打开浏览器通过 http://[server addr]:7400
访问 Dashboard 界面,输入用户名密码 根据配置进行输入。
2.3.3. 配置systemd管理frpc服务
配置方法参考 2.2.3 进行配置。
2.4. 功能示例
2.4.1. 通过ssh访问内网机器
通过简单配置 TCP 类型的代理,使用户能够访问内网服务器。
- 在具有公网 IP 的机器上部署 frps
部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:
bindPort = 7000
- 在需要被访问的内网机器上部署 frpc
部署 frpc 并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 x.x.x.x。以下是示例配置:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
localIP 和 localPort 配置为需要从公网访问的内网服务的地址和端口。
remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。
- 启动 frps 和 frpc
- 通过 SSH 访问内网机器
使用以下命令通过 SSH 访问内网机器,假设用户名为 test:
ssh -o Port=6000 test@x.x.x.x
frp 将请求发送到 x.x.x.x:6000
的流量转发到内网机器的 22 端口。
2.4.2. 更多示例
更多示例请参考官网所给示例