内网穿透利器 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.target

3.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 frpc

4.2 Windows 客户端部署

下载与解压

  1. 访问 frp Releases 下载 frp_0.67.0_windows_amd64.zip

  2. 解压到 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 -f

frp 作为一款功能强大的内网穿透工具,不仅支持 TCP、UDP、HTTP、HTTPS 等多种协议,还提供了负载均衡、健康检查、权限控制等高级功能 。掌握 frp 的使用,能够帮助我们轻松解决内网服务暴露的问题,提升开发和运维效率。

参考资料