FRP(Fast Reverse Proxy) 是一个高性能的内网穿透工具,支持 TCP、UDP、HTTP、HTTPS 等多种协议,可将内网服务(如 Web 服务器、SSH、远程桌面)映射到公网,方便远程访问。本教程将指导你完成 FRP 的安装、配置和使用,协助你快速实现内网服务的外网访问。
本教程适用于:
在开始之前,请确保你具备以下条件:
访问 FRP GitHub 下载页面。
根据服务器和客户端的操作系统选择合适的压缩包(如 frp_x.y.z_linux_amd64.tar.gz)。
下载并解压:
// 下载文件到当前文件夹
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz
// 解压文件
tar -zxvf frp_0.63.0_linux_amd64.tar.gz
cd frp_0.63.0_linux_amd64
将解压后的文件传输到公网服务器(如通过 scp 或 FTP)。
确保服务器开放必要的端口(如默认的 7000 用于 FRP 控制,80、443 用于 HTTP/HTTPS)。
# 示例:开放 7000 端口(Ubuntu)
sudo ufw allow 7000
# 如果是云服务器,需要在控制台进行端口添加,添加后才可以访问
frpc(客户端)和 frps(服务器端)二进制文件。FRP 的配置主要分为服务器端(frps.toml)和客户端(frpc.toml)。以下是基本配置示例。
在公网服务器上编辑 frps.toml:
# 客户端与服务连接端口
bindPort = 7000
# 客户端连接服务端时认证的密码
auth.token = "xxxxxxxx"
# http协议监听端口
vhostHTTPPort = 80
vhostHTTPSPort = 443
# web界面配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
bindPort:FRP 服务监听的端口,用于客户端连接。vhostHTTPPort:HTTP 服务代理端口。vhostHTTPSPort:HTTPS 服务代理端口。auth.token:用于认证,防止未授权访问。保存后,启动服务器端:
./frps -c frps.toml
在本地客户端上编辑 frpc.toml:
serverAddr = "公网服务器 IP" # 公网服务器 IP
serverPort = 7000 # 与frps.toml 的bindPort 一致
auth.token = "xxxxxx" # 与frps.toml 的token 一致
[[proxies]]
name = "name" #
type = "https"
localIP = "127.0.0.1"
localPort = 9001
#remotePort = 6000 # 远程访问端口
#自定义域名
customDomains = ["www.yanjy.top"]
serverAddr:公网服务器的 IP 地址。serverPort:服务器端 bind_port。auth.token:与服务器端一致的认证令牌。[[proxies]]:代理名称,可自定义。name:穿透名称,自定义。type:代理类型(如 http、tcp、udp)。localIP 和 localPort:本地服务的地址和端口。customDomains:绑定的域名,需提前在 DNS 中解析到公网服务器 IP。保存后,启动客户端:
./frpc -c frpc.toml
http://yourdomain.com 或公网 IP,检查是否能访问本地服务。| 场景 | 配置示例 |
|---|---|
| Web 服务 | [web] type=http localIP=127.0.0.1 localPort=8080 customDomains=example.com |
| SSH 远程访问 | [ssh] type=tcp localIP=127.0.0.1 localPort=22 remotePort=6000 |
| 远程桌面 (RDP) | [rdp] type=tcp localIP=192.168.1.100 localPort=3389 remotePort=3389 |
Linux 服务器端(以 systemd 为例):
sudo vim /etc/systemd/system/frps.service
添加以下内容:
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /home/frps_serve/frp_0.63.0_linux_amd64/frps -c /home/frps_serve/frp_0.63.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
启用服务:
sudo systemctl enable frps # 设置为开机自启
sudo systemctl start frps
客户端:类似配置,修改 ExecStart 为 frpc 命令。
在服务器端配置 SSL 证书:
将证书文件(.crt 和 .key)放置在服务器目录。
修改 frps.toml:
[common]
bindPort = 7000
vhostHTTPSPort = 443
tlsOnly = true
客户端配置保持不变,访问时使用 https://yourdomain.com。
在 frpc.ini 中添加多个代理:
[[proxies]]
name = "lhw-api"
type = "https"
localIP = "127.0.0.1"
localPort = 9001
#自定义域名
customDomains = ["你的域名"]
[[proxies]]
name = "mimisite"
type = "http"
localIP = "127.0.0.1"
localPort = 8099
#自定义域名
customDomains = ["你的域名"]
frpc.toml 中启用 compression = true 减少带宽占用。frps.toml 中设置 max_pool_count = 50 提高并发性能。| 问题 | 可能缘由及解决方案 |
|---|---|
| 客户端无法连接服务器 | 检查 serverAddr、serverPort 和 auth.token 是否正确;确保服务器防火墙开放端口。 |
| 无法访问服务 | 确认本地服务(如 Web 服务器)正在运行;检查 DNS 解析是否正确。 |
| HTTPS 访问失败 | 确保证书有效且路径正确;检查服务器端是否启用 tls_only。 |
auth.token。# 查看 FRP 版本
./frps --version
./frpc --version
# 后台运行
sudo systemctl start frps # 启动frp
sudo systemctl stop frps # 停止frp
sudo systemctl restart frps # 重启frp
sudo systemctl status frps # 查看frp状态
frps.toml:服务器端核心配置文件,定义监听端口和认证方式。frpc.toml:客户端配置文件,定义代理规则和服务映射。