使用 FRP 反向代理实现 Windows 远程桌面连接
用 FRP 把内网 Windows 电脑的远程桌面(RDP,3389 端口)经公网云服务器中转暴露出去:内网机器运行 frpc 主动连接云服务器上的 frps,外部通过云服务器端口访问 RDP。本文覆盖双端配置(TOML 格式)、连接验证,以及用 NSSM 把 frpc 装成 Windows 服务开机自启。适合需要在公司访问家里电脑、或异地访问内网机器的场景。
什么是 FRP
FRP(Fast Reverse Proxy)是一个开源的内网穿透反向代理工具,由 fatedier 开发并维护。它可以帮助你将位于 NAT(网络地址转换)或防火墙后的内网服务,暴露到公网,实现从外网访问内网资源。
核心用途
FRP 主要解决的问题是:你的设备没有公网 IP,但你想让外网能访问它提供的服务。常见场景包括:
- 远程桌面连接家里的 Windows 电脑(RDP)
- 外网访问家里 NAS、摄像头、Web 服务器
- 调试本地开发的网站或 API(如微信小程序、支付回调)
- SSH 到内网 Linux 服务器
架构组成
FRP 采用 C/S(客户端/服务端)架构:
| 组件 | 作用 | 运行位置 |
|---|---|---|
| frps(Server) | FRP 服务端,部署在有公网 IP 的服务器上(如云服务器) | 公网服务器 |
| frpc(Client) | FRP 客户端,部署在内网机器上(如家里电脑、树莓派) | 内网设备 |
客户端主动连接服务端,建立隧道;外部用户访问服务端的某个端口,流量被转发到内网客户端指定的服务。
支持的协议
| 类型 | 说明 |
|---|---|
tcp | 最常用,用于 RDP、SSH、数据库等 |
udp | 用于游戏、语音、视频流等 UDP 应用 |
http / https | 反向代理 Web 服务,支持域名路由(vhost) |
stcp / sudp | 安全传输:点对点加密,需访问方也运行 frpc(适合高安全场景) |
xtcp | P2P 直连(实验性,依赖 NAT 类型) |
配置步骤
方案核心思路:
- 家里的个人电脑(内网)运行 FRP 客户端(frpc),连接到云服务器(公网)上运行的 FRP 服务端(frps)
- 在外部通过连接云服务器的某个端口,经由 FRP 转发到家里电脑的 3389 端口(Windows 远程桌面默认端口)
前提条件
- 云服务器:有公网 IP,开放相应端口(如 frps 监听端口、RDP 映射端口)
- 家里电脑:
- 开启 Windows 远程桌面(系统设置 → 系统 → 远程桌面 → 启用)
- 防火墙允许 3389 端口入站
- 可以运行 FRP 客户端(Windows 版本)
- FRP 下载地址:https://github.com/fatedier/frp/releases(选择对应平台版本)
步骤一:配置云服务器(FRP 服务端 frps)
1. 下载并解压 FRP
# 以 Linux 为例(如 Ubuntu)
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
tar -zxvf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64 2. 编辑 frps.toml
v0.52 起使用 TOML 格式,字段为顶层配置,无 [server] 段:
# frps.toml
bindPort = 7000 # FRP 服务端监听客户端连接的端口
vhostHTTPPort = 8080 # 如果需要 HTTP 内网穿透才用,可选
# 可选:Dashboard(用于监控),v0.52 起由旧版 dashboard* 字段改为 webServer.*
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "yourpassword"
# Token 认证(推荐),v0.52 起写作 auth.token
auth.token = "your_secure_token" 注意:如果你使用的是旧版 FRP(v0.52 之前),配置文件是
frps.ini,格式为 INI(token = ...、dashboard_port = ...)。建议使用新版。
3. 启动 frps
./frps -c ./frps.toml 建议使用 systemd 或 screen/nohup 后台运行。
4. 开放防火墙端口
确保云服务器安全组/防火墙开放:
7000(FRP 客户端连接)6000(用来映射 RDP 的公网端口,按实际配置)
步骤二:配置家里电脑(FRP 客户端 frpc)
1. 下载 Windows 版 FRP
从 GitHub Releases 下载 frp_x.x.x_windows_amd64.zip,解压到任意目录(如 C:\frp)。
2. 编辑 frpc.toml
# frpc.toml
serverAddr = "你的云服务器IP"
serverPort = 7000
auth.token = "your_secure_token" # 必须和服务端一致
[[proxies]]
name = "rdp-home-pc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 6000 # 云服务器上对外开放的端口
remotePort = 6000表示:访问 云服务器IP:6000 就等于访问家里电脑的 3389。
3. 启动 frpc(Windows)
以管理员身份打开命令提示符或 PowerShell:
cd C:\frp
frpc.exe -c frpc.toml 建议设置为开机自启(见下文 NSSM 一节)。
步骤三:连接远程桌面
- 打开「远程桌面连接」(mstsc)
- 计算机地址填写:
你的云服务器IP:6000(例如123.123.123.123:6000) - 用户名和密码:家里电脑的登录凭据(必须是启用远程桌面的账户)
- 点击连接即可
安全建议
- 不要直接暴露 3389 到公网,FRP 隧道 + token 认证是更安全的通道
- 使用强
token,避免未授权连接 - 可考虑启用 TLS(FRP 支持)
- 家里电脑设置复杂密码,或启用网络级认证(NLA)
- 可更改 RDP 默认端口(非必须,但增加安全性)
用 NSSM 把 frpc 装成 Windows 服务开机自启
步骤
- 下载 NSSM(Non-Sucking Service Manager)
官网:https://nssm.cc/download
下载
nssm-2.24.zip(或其他最新版),解压,进入对应架构文件夹(如win64)。 - 以管理员身份打开命令提示符(CMD 或 PowerShell)
- 运行以下命令(路径根据你的情况修改):
nssm install FrpcService "C:\frp\frpc.exe" "-c C:\frp\frpc.toml" - 设置工作目录(重要!否则可能找不到配置文件):
nssm set FrpcService AppDirectory "C:\frp" - (可选)设置日志(便于排查):
nssm set FrpcService AppStdout "C:\frp\frpc.log"
nssm set FrpcService AppStderr "C:\frp\frpc.err.log" - 启动服务:
nssm start FrpcService - 确认开机自启(默认已设为自动):
- 按
Win + R→ 输入services.msc - 找到
FrpcService→ 右键 → 属性 → 启动类型:自动
- 按
之后 frpc 会作为系统服务在开机时自动运行。
要点
- v0.52 是配置分水岭:TOML 顶层字段 +
auth.token/webServer.*新写法,旧 INI 教程照抄会启动失败 - 端口两件套:
bindPort(frps↔frpc)与remotePort(对外映射)分开理解,防火墙两个都要放行 - Windows 端别裸奔运行 frpc,用 NSSM 装成服务并设置
AppDirectory,否则重启后服务找不到配置 - 安全底线:RDP 不直接暴露公网,强 token + NLA