FRP内网穿透的服务端和客户端

ytt 发布于 2026-05-04 154 次阅读


适用人群:有公网云服务器的开发者、想从外网访问家中 NAS / 远程桌面 / 本地 Web 服务的玩家
frp 版本:v0.68.1(截至 2026 年最新稳定版)
涵盖内容:frp 是什么 → 服务端(frps)配置 → Linux 客户端配置 → Windows 客户端配置 → 安全加固 → 开机自启 → 常见问题排查 → 云服务器推荐

一、frp 是什么?为什么你需要它?

frp(Fast Reverse Proxy) 是一个由 Go 语言编写的开源反向代理工具,专门用于内网穿透——让没有公网 IP 的本地服务器也能被外部访问。

穿透原理(一句话版)

你有一台有公网 IP 的云服务器(充当"交通枢纽"),还有一台在内网的设备(比如家里的电脑、树莓派)。frp 在内网设备到云服务器之间建立一条反向隧道,外面的人通过访问云服务器的端口,流量就会自动转发到内网设备上。

外网用户 → 公网服务器(frps) → 内网设备(frpc) → 本地服务
🌍 ☁️ 🏠 💻

frp 的架构优势

特性说明
双向角色分离服务端(frps)部署在公网机器,客户端(frpc)部署在内网机器
多协议支持TCP、UDP、HTTP、HTTPS 均可穿透
Dashboard 可视化服务端和客户端各自内置 Web 管理面板
身份认证支持 token、OIDC 等多种认证方式
负载均衡v0.66+ 支持 HTTPS 代理的负载均衡组
动态管理v0.68+ 客户端支持 Store 持久化存储,可在运行时通过 API 增删代理

二、服务端配置(Linux 公网云服务器)

  • 前提:你已有一台带公网 IP 的 Linux 云服务器(推荐 Ubuntu 20.04/22.04/24.04 或 Debian 11/12)

步骤 1:下载并解压 frp

# 创建安装目录
mkdir -p /usr/local/frp && cd /usr/local/frp

# 下载最新版 frp(以 v0.68.1 为例,请到 GitHub Releases 页面确认最新版本号)
wget https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz
# 备用下载地址:https://gofrp.org/zh-cn/docs/

# 解压
tar -zxvf frp_0.68.1_linux_amd64.tar.gz --strip-components=1

# 查看文件,确认包含 frps (服务端程序)、frpc (客户端程序) 和 .toml 配置文件
ls -l

解压后目录结构如下:

  • /usr/local/frp/
  • ├── frps # 服务端可执行文件
  • ├── frpc # 客户端可执行文件
  • ├── frps.toml # 服务端配置文件
  • ├── frpc.toml # 客户端配置文件(服务端用不到,可删除)
  • └── LICENSE

步骤 2:编写 frps.toml 配置文件

nano /usr/local/frp/frps.toml

写入以下内容:

# frps.toml —— frp 服务端配置(v0.68+ 标准格式)

# 服务端监听端口,客户端将连接此端口
bindPort = 7000

# ==================== 身份认证 ====================
# 方式一:直接填写 token(简单场景推荐)
auth.token = "your_strong_token_here"

# 方式二:从文件加载 token(v0.64+,避免在配置文件中硬编码)
# auth.tokenSource.type = "file"
# auth.tokenSource.file.path = "/etc/frp/server_token"


# ==================== 服务端 Dashboard ====================
# Web 管理面板配置
webServer.addr = "0.0.0.0"          # 公网访问填 0.0.0.0,仅本机填 127.0.0.1
webServer.port = 7500               # 面板访问端口
webServer.user = "admin"            # 面板登录用户名
webServer.password = "admin"        # 面板登录密码(务必修改!)


# ==================== 代理端口范围(可选) ====================
# 允许客户端使用的远程端口范围,建议按需开放
allowPorts = [
  { start = 6000, end = 6009 },    # SSH / 远程桌面等 TCP 代理
  { start = 8080, end = 8089 },    # Web 服务代理
]

关于 TOML 格式:自 v0.50 起,frp 全面使用 TOML 格式替代旧版 INI 格式,旧格式已弃用。新版配置对缩进敏感,请严格按照示例格式编写。

步骤 3:配置防火墙

大多无法连接的原因(important)

你需要在云服务商的安全组中放行以下端口,同时确保系统防火墙也已开放:

端口用途协议
7000frps 服务端监听端口(客户端连接用)TCP
7500Dashboard 管理面板TCP
6000-6009代理隧道实际使用的端口(按需开放)TCP/UDP
80/443HTTP/HTTPS 穿透端口(如需要)TCP

系统防火墙示例(Ubuntu/Debian 使用 UFW、CentOS/RHEL 使用 firewalld):

# === Ubuntu/Debian 用户 (UFW) ===
sudo ufw allow 7000/tcp
sudo ufw allow 7500/tcp
sudo ufw allow 6000:6009/tcp
sudo ufw enable

# === CentOS/RHEL 用户 (firewalld) ===
sudo firewall-cmd --permanent --add-port=7000/tcp
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --permanent --add-port=6000-6009/tcp
sudo firewall-cmd --reload

步骤 4:配置 systemd 开机自启(推荐)

sudo nano /etc/systemd/system/frps.service

写入:

[Unit]
Description=frp Server Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload          # 重载 systemd 配置
sudo systemctl enable frps            # 开机自启
sudo systemctl start frps             # 立即启动
sudo systemctl status frps            # 查看运行状态

看到 active (running) 即服务端启动成功。

步骤 5:验证服务端

浏览器访问 http://你的服务器IP:7500,输入配置的用户名和密码,即可进入 Dashboard 面板。

Dashboard 主要功能一览

  • 📊 查看当前所有连接的客户端及其在线状态
  • 📈 监控每个代理的流量统计(接收/发送字节数)
  • 🔍 查看每个客户端的连接历史(v0.67+ 支持)
  • ⚙️ 管理代理的启用/禁用状态(v0.66+ 支持)

提示:配置完成后建议重启服务端使新配置生效:

sudo systemctl restart frps

三、客户端配置(Linux 内网设备)

假设你的内网 Linux 机器上运行着以下服务:

  • SSH(端口 22)
  • Web 应用(端口 3000)

现在想让外部访问。

步骤 1:下载并安装 frpc

mkdir -p /usr/local/frp && cd /usr/local/frp

# 下载(与服务端版本保持一致)
wget https://github.com/fatedier/frp/releases/download/v0.68.1/frp_0.68.1_linux_amd64.tar.gz
tar -zxvf frp_0.68.1_linux_amd64.tar.gz --strip-components=1

# 检查文件,客户端只需要 frpc 和 frpc.toml
ls -l

步骤 2:编写 frpc.toml 配置文件

步骤 2:编写 frpc.toml 配置文件

nano /usr/local/frp/frpc.toml
# frpc.toml —— frp 客户端配置

# 连接服务端
serverAddr = "你的公网服务器IP"
serverPort = 7000

# 身份认证 token,必须与服务端一致
auth.token = "your_strong_token_here"


# ==================== 代理配置 ====================

# 示例 1:穿透 SSH(TCP 协议)
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000


# 示例 2:穿透本地 Web 应用(TCP 协议)
[[proxies]]
name = "web_app"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 6001


# 示例 3:穿透 HTTP 服务(带自定义域名)
[[proxies]]
name = "blog"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["blog.yourdomain.com"]
  • 代理类型说明
  • tcp:最通用,适合 SSH、数据库、远程桌面等一切 TCP 协议的服务
  • http:专为 Web 服务优化,支持自定义域名,无需为每个网站占用独立端口
  • udp:用于 DNS、游戏服务器等 UDP 协议
  • stcp:安全 TCP,需要访问者也安装 frpc,适合不想暴露给所有人的内网服务
  • xtcp:点对点穿透,利用 NAT 打洞尽可能直连,降低服务器带宽压力
  • 步骤 3:启动并配置开机自启

步骤 3:启动并配置开机自启

sudo nano /etc/systemd/system/frpc.service
[Unit]
Description=frp Client Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc

步骤 4:验证穿透效果

从外网测试:

# 测试 SSH 穿透
ssh -o Port=6000 用户名@你的公网服务器IP

# 测试 Web 应用
# 浏览器访问:http://你的公网服务器IP:6001

四、客户端配置(Windows 内网设备)

步骤 1:下载 Windows 版 frp

访问 GitHub Releases 下载 frp_0.68.1_windows_amd64.zip

解压到任意目录(例如 C:\frp),目录中包含:

  • C:\frp\
  • ├── frpc.exe # 客户端程序
  • ├── frpc.toml # 客户端配置文件
  • ├── frps.exe # 服务端程序(客户端用不到)
  • └── frps.toml

步骤 2:编写 frpc.toml 配置

用记事本或 VSCode 打开 C:\frp\frpc.toml,写入:

# frpc.toml —— Windows 客户端配置

serverAddr = "你的公网服务器IP"
serverPort = 7000

auth.token = "your_strong_token_here"


# 示例:穿透 Windows 远程桌面(RDP)
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6002

步骤 3:启动客户端

方法一:命令行启动(推荐测试阶段使用)

打开 cmdPowerShell,进入 C:\frp 目录:

cd C:\frp
frpc.exe -c frpc.toml

看到 [v0.68.1] start proxy success 即连接成功。

方法二:配置 Windows 服务,开机自启(推荐长期使用)

管理员身份打开 cmd,进入 C:\frp,执行:

# 安装为 Windows 系统服务(winsw 方式)
# 此处以 frpc 的 install 参数为例
frpc install -c C:\frp\frpc.toml

# 启动服务
frpc start

# 如需卸载服务
# frpc uninstall

或者使用第三方工具 NSSMfrpc.exe 包装为 Windows 服务(提供可视化界面进行管理)。

Windows 客户端专属提示

  • Windows 远程桌面(RDP)默认端口为 3389,远程桌面访问前请确保 Windows 已启用远程桌面功能
  • Windows Defender 防火墙可能会拦截 frpc.exe 的出站连接,首次运行时会弹出安全提示,请选择"允许"
  • 如果穿透 Windows 文件共享(SMB,端口 445),需配置 SMB 服务本身并注意安全风险
  • 推荐使用 WinSWNSSM 将 frpc 包装为 Windows 系统服务,实现开机自启与崩溃自动重启

安装完成后,即可通过 公网IP:6002 远程连接到你的 Windows 桌面。

五、安全加固建议

1. 避免端口扫描检测

⚠️ 重要更新v0.68.1 修复了一个严重的安全漏洞(CVE-2026-40910),该漏洞影响 v0.43.0 至 v0.68.0 版本,在 HTTP vhost 路由中使用 routeByHTTPUser 时可能导致认证绕过。请务必升级到 v0.68.1+。

措施方法
升级到最新版所有服务端和客户端必须同步升级到 v0.68.1+
绑定 Dashboard 到本地webServer.addr = "127.0.0.1",然后通过 SSH 隧道访问
修改默认端口bindPort = 7000 改为一个不常用的高端口(如 54321)
使用强 token使用 32 位以上随机字符串,并考虑用 tokenSource 从文件加载
防火墙白名单只允许可信 IP 访问 frps 端口
启用 stcp 代理对敏感内网服务使用 stcp 类型,确保只有授权的 frpc 访客才能访问

2. 最佳实践清单

# 生成强随机 token
openssl rand -hex 32
# 输出示例: a1b2c3d4e5f6...(将此值填入服务端和客户端的 auth.token)

# Dashboard 绑定本地 + SSH 隧道访问
# frps.toml 中设置: webServer.addr = "127.0.0.1"
# 从本地电脑通过 SSH 隧道访问:
# ssh -L 7500:127.0.0.1:7500 user@your-server-ip
# 然后浏览器打开 http://127.0.0.1:7500

六、常用管理操作速查

操作命令 / 方法
启动/停止/重启服务端sudo systemctl start|stop|restart frps
启动/停止/重启客户端sudo systemctl start|stop|restart frpc
查看服务端日志sudo journalctl -u frps -f
查看客户端日志sudo journalctl -u frpc -f
访问 Dashboardhttp://你的IP:7500
重新加载配置(客户端)sudo systemctl reload frpc 或访问 Admin UI
版本升级覆盖 frps/frpc 二进制文件后 systemctl restart

七、高频故障排查

现象可能原因解决方案
connection refused防火墙/安全组未放行检查云服务器安全组 + 系统防火墙
token in login doesn't match服务端和客户端 token 不一致确认两边 auth.token 完全相同
客户端能连接,但访问代理端口无响应remotePort 被占用换一个端口;netstat -tlnp 检查占用情况
Dashboard 打不开webServer.addr 绑定 127.0.0.1改成 0.0.0.0 或通过 SSH 隧道访问
连接时断时续服务器带宽不足或线路不稳定检查云服务器带宽使用率;考虑换用国内节点
frps 重启后所有客户端失联客户端没有自动重连机制升级到 v0.66+,frp 已内置指数退避重连

调试技巧

# 先用前台模式测试,查看详细日志
frpc -c frpc.toml -v   # 客户端调试模式
frps -c frps.toml -v   # 服务端调试模式

# 如果遇到 TOML 解析错误,检查:
# - 是否使用了等号 =(正确)而非冒号 :(错误)
# - 字符串值必须加引号(除非是数字或布尔值)
# - 各配置段是否有错误的缩进

八、云服务器推荐清单

frp 服务端要求一台有公网 IP 的服务器,以下是几款适合内网穿透的高性价比选择:

国内主流云厂商

厂商推荐型号配置参考价格适合场景
腾讯云 Lighthosue轻量应用服务器4核4G / 3M带宽 / 300G月流量38元/年入门首选,适合个人穿透
腾讯云 CVM S5标准云服务器2核2G / 1M带宽 / 50G云盘199元/年需要弹性扩展的生产环境
阿里云 T6按量计费服务器2G内存 / 20G免费月流量198元/5年流量极低场景,性价比之王
阿里云轻量轻量应用服务器200M峰值共享带宽65元/6个月高带宽需求场景

选购建议

入门级(个人/测试)中级(小团队/多服务)高级(企业/高并发)
推荐型号腾讯云 Lighthouse 2核2G 或 阿里云 T6 按量腾讯云 CVM S5 2核4G腾讯云 CVM S5 4核8G 或更高
月流量100-300GB500GB-1TB1TB+(按量计费或固定带宽)
带宽1-5 Mbps5-10 Mbps10 Mbps+
参考预算50-200元/年200-500元/年1000元+/年
适合穿透服务数1-5个5-20个20个以上

  1. 带宽:穿透速度快不快取决于服务器带宽。1Mbps ≈ 128KB/s,如果穿透远程桌面至少需要 3Mbps 以上。
  2. 流量:部分轻量服务器有月流量限制,超出后会限速,建议预估月度使用量。
  3. 线路:国内服务器延迟低(<10ms),适合国内用户;国外服务器延迟较高(50-200ms),适合海外场景。
  4. 备案:穿透 HTTP 服务到国内服务器,需提前进行工信部域名备案。

💡 选购小贴士:初次测试可以先用腾讯云轻量服务器或阿里云 T6 按量计费,月消费不到十元;确定长期使用后,再考虑包年包月的 CVM 实例以获取更低单价。如果没有特殊需求,腾讯云 Lighthouse 是国内穿透入门的最佳性价比之选

九、总结

至此,你已完成 frp 内网穿透的完整部署:

阶段关键内容
服务端下载 frps → 编写 frps.toml → 配置 Dashboard → 防火墙放行端口 → systemd 自启
Linux 客户端下载 frpc → 编写 frpc.toml → 配置 SSH/Web 代理 → systemd 自启
Windows 客户端下载 Windows ZIP 包 → 编写 frpc.toml → 命令行启动 / 注册为 Windows 服务
安全加固升级到 v0.68.1+、强 token、防火墙白名单、stcp 加密代理
常见问题连接拒绝 → 检查防火墙 / token 不匹配 / 端口占用 / TOML 格式错误

下一步进阶尝试

  • OIDC 企业级认证:对接微软 Entra ID 等企业 SSO 系统
  • 负载均衡组:为多个后端服务配置统一的域名负载均衡(v0.66+)
  • Docker 部署 frps:使用 Docker Compose 一键部署服务端
  • 搭配 Nginx/Caddy:在 frps 前面加一层反向代理,实现 HTTPS 证书自动管理
  • 监控告警:利用 Prometheus 指标 + Grafana 搭建穿透流量监控面板
  • 构建 frp 管理面板:使用 frp-panel 实现可视化多客户端集中管理

🛠️ Happy Tunneling! 你的内网服务从此触手可及。

本文基于 frp v0.68.1 编写,配置格式以官方文档为准。如果版本更新后有兼容性变化,请参考 https://gofrp.org/zh-cn/ 获取最新文档。