如何自建FRP
自建FRP能让你安全地将内网服务暴露到公网,非常适合远程访问、开发调试等场景。下面是一份清晰的搭建指南。
🎯 理解核心概念
FRP的工作方式依赖于两个核心组件:
- 服务端 (frps):需要安装在一台拥有公网IP地址的服务器上(例如云服务商的云服务器)。它作为流量中转的“门户”或“交通枢纽”。
- 客户端 (frpc):安装在你内网中需要被访问的设备上(如家里的NAS、办公电脑)。它负责与公网上的服务端建立连接,并将内网服务的流量转发出去。
简单来说,当外网用户想要访问你内网的服务时,请求先发送到公网服务器上的frps,然后frps通过已建立的连接将请求转发给内网设备上的frpc,最终送达目标服务。
🛠️ 搭建操作指南
第一步:配置FRP服务端 (frps)
-
下载与安装 通过SSH连接到你的公网服务器,使用
wget或curl命令从FRP的GitHub发布页下载最新版本的二进制包,然后解压。请根据你的服务器操作系统选择正确的版本。# 进入一个合适的目录,例如 /opt
cd /opt
# 下载(版本号请替换为最新版)
sudo wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
# 解压
sudo tar -zxvf frp_0.61.1_linux_amd64.tar.gz
# 进入解压后的目录
cd frp_0.61.1_linux_amd64 -
编辑配置文件 关键的步骤是配置服务端,主要修改
frps.toml文件。以下是一个基础配置示例:[common]
# 服务端监听的端口,客户端将通过此端口连接
bindPort = 7000
# 如果您希望通过网页查看frp状态,可以启用仪表盘
dashboard_addr = "0.0.0.0"
dashboard_port = 7500
dashboard_user = "admin" # 请设置一个安全的用户名
dashboard_pwd = "your_secure_password" # 请设置一个强密码
# 强烈建议设置token认证,提升安全性
auth.method = "token"
auth.token = "a_very_long_and_secure_secret_token"如果需要穿透HTTP/HTTPS服务,可能还需要配置
vhostHTTPPort和vhostHTTPSPort等参数。 -
启动服务与设置开机自启 为了管理方便,建议将frps配置为系统服务(如使用systemd)。
- 创建一个service文件,例如
/etc/systemd/system/frps.service。 - 使用
sudo systemctl daemon-reload重新加载配置。 - 使用
sudo systemctl start frps启动服务。 - 使用
sudo systemctl enable frps设置开机自启。
- 创建一个service文件,例如
-
配置防火墙 务必在服务器的防火墙(如iptables、firewalld)以及云服务商的安全组规则中,放行frps服务配置中使用的端口(例如上面的7000和7500端口)。
第二步:配置FRP客户端 (frpc)
-
下载客户端软件 在内网设备上下载并解压与服务端相同版本的FRP软件包。
-
编辑配置文件 客户端的配置文件是
frpc.toml。你需要告诉它如何连接到服务端,以及映射哪些服务。[common]
# 填写你公网服务器的IP地址或域名
serverAddr = "your_server_public_ip"
serverPort = 7000
# 此处的token必须与服务端配置的token完全一致
auth.method = "token"
auth.token = "a_very_long_and_secure_secret_token"
# 下面开始定义具体的代理规则
# 示例1:映射内网的SSH服务(22端口)
[[proxies]]
name = "ssh-to-my-pc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
# 在公网服务器上使用这个端口来访问内网SSH
remotePort = 6000
# 示例2:映射内网的Web服务(例如在3000端口)
[[proxies]]
name = "web-app"
type = "tcp" # 简单的TCP代理,对于HTTP服务也可使用"http"类型以获得更多功能
localIP = "127.0.0.1"
localPort = 3000
remotePort = 6001 -
启动客户端 在内网设备上,进入FRP目录,执行启动命令:
./frpc -c ./frpc.toml同样,也可以将frpc配置为系统服务或后台进程,以确保稳定运行。
🔒 重要安全提醒
自建服务意味着你需要自己负责安全,以下几点至关重要:
- 使用强令牌:配置文件中的
auth.token是首要的安全屏障,务必使用长且复杂的随机字符串,并定期更换。 - 最小化端口开放:在服务器防火墙和云服务商安全组中,只开放frp服务所必需的端口,关闭所有不必要的端口。
- 关注日志:定期检查frps和frpc的日志输出,留意是否有异常连接尝试。
- 考虑TLS加密:对于传输敏感数据的场景,FRP支持TLS加密通信,建议在配置中启用。
💎 进阶配置与故障排查
成功完成基础搭建后,你可能还需要了解一些进阶配置和问题处理方法。
- 使用域名(虚拟主机):如果你拥有一个域名,可以配置FRP,让不同的子域名(如
panel.your-domain.com)指向内网中不同的Web服务,这比直接使用IP地址和端口号更优雅、易用。 - 常见问题排查:
- 连接失败:首先确认服务端防火墙和安全组规则已正确放行所有相关端口(如
bindPort,dashboard_port, 以及客户端配置的remotePort等)。这是最常见的问题。 - 检查配置:确保客户端配置中的
serverAddr(公网服务器IP)和serverPort准确无误。 - 核对认证信息:再三确认客户端和服务端的
auth.token完全一致。 - 查看日志:通过服务端和客户端的日志输出(使用
sudo systemctl status frps或直接运行程序查看输出),可以获取非常详细的错误信息,这是定位问题的关键。
- 连接失败:首先确认服务端防火墙和安全组规则已正确放行所有相关端口(如
希望这份指南能帮助你顺利搭建自己的FRP服务!如果你在具体操作中遇到更细致的问题,比如如何为特定服务(如Windows远程桌面)配置代理,我很乐意提供进一步的建议。
微信公众号

