内网穿透利器 frp 完全配置指南
在日常生活和工作中,我们经常遇到这样的需求:在家想访问办公室的电脑、想通过公网访问家中 NAS 上的服务、或者需要向客户演示本地开发中的 Web 项目。然而,这些设备都处于内网环境,没有公网 IP,无法直接被外部访问。
frp 正是为了解决这一问题而生。它是一个高性能的反向代理应用,采用 Go 语言编写,支持跨平台部署,能够帮助我们将内网服务安全、便捷地通过具有公网 IP 的服务器暴露到公网 。
本文将基于 frp 官方文档,详细介绍如何使用最新的 TOML 格式配置文件部署 frp 服务端和客户端,并通过 systemd 实现服务的后台守护与开机自启。
一、frp 核心概念与架构
在开始配置之前,我们先了解 frp 的基本工作原理:
frp 由两个核心组件构成 :
frps(服务端):部署在具有公网 IP 的服务器上,负责接收公网用户的访问请求,并将其转发给内网的客户端
frpc(客户端):部署在需要暴露的内网机器上,负责与服务端建立连接,并将本地的服务注册到服务端
工作流程:用户访问公网服务器的指定端口 → frps 接收请求 → frps 根据配置将请求转发给对应的 frpc → frpc 将请求转发到本地的实际服务 。
二、服务端(frps)部署
2.1 环境准备
一台具有公网 IP 的服务器(云服务器如阿里云、腾讯云等)
操作系统:Linux(本文以 CentOS 7/Ubuntu 20.04 为例)
开放必要的防火墙端口(后续配置中会涉及)
2.2 下载与安装
从 frp 的 GitHub Releases 页面下载最新版本(本文发布时最新版本为 v0.67.0):
# 创建安装目录
mkdir -p /opt/frp
cd /opt/frp
# 下载 Linux amd64 版本(根据服务器架构选择)
wget https://github.com/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz
# 解压
tar -xzf frp_0.67.0_linux_amd64.tar.gz
mv frp_0.67.0_linux_amd64/* .
rm -rf frp_0.67.0_linux_amd64 frp_0.67.0_linux_amd64.tar.gz解压后,我们会看到以下关键文件 :
frps:服务端可执行程序frps.toml:服务端配置文件(TOML 格式)frpc:客户端可执行程序(可选,服务端一般用不到)frpc.toml:客户端配置文件示例
2.3 编写服务端配置文件(frps.toml)
从 v0.52.0 版本开始,frp 正式支持 TOML、YAML 和 JSON 格式的配置文件,原有的 INI 格式已被弃用 。TOML 格式更加清晰,支持嵌套结构,是官方推荐的配置格式。
创建配置文件:
vim /opt/frp/frps.toml写入以下内容(请根据实际情况修改密码等敏感信息):
# frps 服务端配置文件 - TOML格式
# ==================== 基础配置 ====================
bindAddr = "0.0.0.0" # 监听所有网络接口
bindPort = 7000 # 服务端通信端口(客户端连接此端口)
# HTTP/HTTPS 虚拟主机端口(如需暴露Web服务)
vhostHTTPPort = 8080 # HTTP流量接入端口
# vhostHTTPSPort = 4443 # HTTPS流量接入端口(如需HTTPS)
# ==================== 身份认证 ====================
[auth]
method = "token" # 认证方式:token
token = "your-strong-password-here" # 请修改为强密码
# ==================== Web管理界面(Dashboard) ====================
[webServer]
addr = "0.0.0.0" # 监听地址,建议只监听内网或使用防火墙限制
port = 7500 # 管理端口
user = "admin" # 登录用户名
password = "your-dashboard-password" # 登录密码(请修改)
# ==================== 日志配置 ====================
[log]
level = "info" # 日志级别:trace, debug, info, warn, error
maxDays = 3 # 日志保留天数
to = "/opt/frp/log/frps.log" # 日志文件路径
# ==================== 传输配置 ====================
[transport]
tcpMux = true # 启用TCP多路复用,提高连接效率
# ==================== 可选:TLS加密(提升安全性) ====================
# 如需启用TLS加密,取消以下注释并配置证书
# [transport.tls]
# certFile = "/etc/frp/tls/server.crt"
# keyFile = "/etc/frp/tls/server.key"
# force = true # 强制只接受TLS连接配置说明 :
bindPort:frps 与 frpc 通信的端口,必须在防火墙中开放auth.token:客户端连接时需要提供相同的 token,防止未授权使用webServer:内置的监控面板,可通过http://服务器IP:7500访问,查看连接状态vhostHTTPPort:如果我们需要穿透 HTTP 服务,这个端口用于接收 HTTP 请
2.4 创建日志目录并测试启动
# 创建日志目录
mkdir -p /opt/frp/log
# 测试启动(前台运行)
cd /opt/frp
./frps -c frps.toml如果看到类似以下日志,说明启动成功
2026-03-01 10:00:00.123 [I] [root.go:105] frps started successfully
2026-03-01 10:00:00.123 [I] [server.go:385] Listen on 0.0.0.0:7000按 Ctrl+C 停止测试,接下来我们将配置 systemd 实现后台运行。
三、使用 systemd 管理 frps 服务
通过 systemd 可以将 frps 注册为系统服务,实现开机自启、后台运行、异常自动重启等功能 。
3.1 创建 systemd 服务文件
vim /etc/systemd/system/frps.service写入以下内容
[Unit]
# 服务描述
Description = frp server service
# 在网络和目标就绪后启动
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动命令(请修改为您的实际路径)
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
# 重启策略:总是重启
Restart = always
RestartSec = 5
# 安全配置:禁止提升权限
NoNewPrivileges = yes
# 文件系统保护
ProtectHome = yes
ProtectSystem = full
PrivateTmp = yes
[Install]
# 设置为多用户模式下的开机自启
WantedBy = multi-user.target3.2 启动并管理服务
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 frps 服务
systemctl start frps
# 设置开机自启
systemctl enable frps
# 查看服务状态
systemctl status frps
# 查看日志
journalctl -u frps -f
# 常用管理命令
# systemctl stop frps # 停止服务
# systemctl restart frps # 重启服务如果 systemctl status 显示 active (running),说明服务已成功运行
四、客户端(frpc)部署
4.1 Linux 客户端部署
下载与安装
在内网机器上执行:
# 创建目录
mkdir -p /opt/frp
cd /opt/frp
# 下载相同版本的 frp
wget https://github.com/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz
tar -xzf frp_0.67.0_linux_amd64.tar.gz
mv frp_0.67.0_linux_amd64/* .
rm -rf frp_0.67.0_linux_amd64 frp_0.67.0_linux_amd64.tar.gz编写客户端配置文件(frpc.toml)
vim /opt/frp/frpc.toml
输入以下内容
# frpc 客户端配置文件 - TOML格式
# ==================== 服务端连接配置 ====================
serverAddr = "your-server-ip" # 替换为您的公网服务器IP或域名
serverPort = 7000 # 必须与frps的bindPort一致
# ==================== 身份认证 ====================
auth.method = "token"
auth.token = "your-strong-password-here" # 与frps中的token相同
# ==================== 代理配置 ====================
# 可以配置多个代理,通过 [[proxies]] 定义
# 示例1:SSH服务穿透
[[proxies]]
name = "ssh" # 代理名称,需唯一
type = "tcp" # 代理类型
localIP = "127.0.0.1" # 本地服务IP
localPort = 22 # SSH默认端口
remotePort = 10022 # 服务端暴露的端口(需在防火墙开放)
# 示例2:Web服务穿透(HTTP)
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
# HTTP类型代理需要配置域名
customDomains = ["your-domain.com"] # 需要将域名解析到服务器IP
# 示例3:远程桌面穿透(Windows适用)
# [[proxies]]
# name = "rdp"
# type = "tcp"
# localIP = "127.0.0.1"
# localPort = 3389 # Windows远程桌面端口
# remotePort = 3389代理类型说明 :
TCP 类型:适用于 SSH、数据库、远程桌面等任意 TCP 服务
HTTP/HTTPS 类型:适用于 Web 服务,支持域名路由、虚拟主机等功能
测试客户端连接
cd /opt/frp
./frpc -c frpc.toml看到以下日志表示连接成功
2026-03-01 11:00:00.123 [I] [service.go:345] login to server success
2026-03-01 11:00:00.124 [I] [proxy_manager.go:173] [ssh] start proxy success配置客户端 systemd 服务
类似服务端,创建 /etc/systemd/system/frpc.service:
[Unit]
Description = frp client service
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml
Restart = always
RestartSec = 5
NoNewPrivileges = yes
ProtectHome = yes
ProtectSystem = full
PrivateTmp = yes
[Install]
WantedBy = multi-user.target启动并设置开机自启:
systemctl daemon-reload
systemctl start frpc
systemctl enable frpc
systemctl status frpc4.2 Windows 客户端部署
下载与解压
访问 frp Releases 下载
frp_0.67.0_windows_amd64.zip解压到
C:\frp目录
配置客户端
创建 C:\frp\frpc.toml 文件,内容与 Linux 客户端类似
serverAddr = "your-server-ip"
serverPort = 7000
auth.method = "token"
auth.token = "your-strong-password-here"
# 远程桌面穿透
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 3389
# SSH服务(如果Windows安装了OpenSSH Server)
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 10022测试启动
打开命令提示符(cmd),执行:
cmd
cd C:\frp
frpc.exe -c frpc.toml注册为 Windows 服务(可选)
可以使用 NSSM 将 frpc 注册为 Windows 服务,实现开机自启:
cmd
nssm install frpc "C:\frp\frpc.exe" "-c C:\frp\frpc.toml"
nssm start frpc五、验证与监控
5.1 访问 Dashboard
在浏览器中打开 http://您的服务器IP:7500,输入配置的用户名和密码 。
Dashboard 提供以下信息:
服务端运行状态
已连接的客户端列表
代理列表及状态
流量统计
5.2 测试 SSH 连接
如果配置了 SSH 穿透,在任意机器上执行:
bash
ssh -oPort=10022 用户名@您的服务器IP应该能成功连接到内网机器的 SSH 服务 。
5.3 查看日志
bash
# 服务端日志
journalctl -u frps -f
# 客户端日志
journalctl -u frpc -ffrp 作为一款功能强大的内网穿透工具,不仅支持 TCP、UDP、HTTP、HTTPS 等多种协议,还提供了负载均衡、健康检查、权限控制等高级功能 。掌握 frp 的使用,能够帮助我们轻松解决内网服务暴露的问题,提升开发和运维效率。
参考资料
frp 官方文档:https://gofrp.org/zh-cn/docs/
frp GitHub 仓库:https://github.com/fatedier/frp
systemd 使用指南:https://gofrp.org/zh-cn/docs/setup/systemd/