frp 内网穿透实战:从原理配置到远程办公与 Web 发布
frp 内网穿透实战从原理配置到远程办公与 Web 发布家里一台旧电脑装了 NAS 系统人在公司却想访问里面的照片客户现场的设备出了 bug远程连不上只能买张高铁票开发好的 Web 服务在本地跑得好好的想给外地同事临时看一眼演示……这些场景有一个共同的敌人——内网。上一篇黑漂技术佬带大家玩转了 ZeroTierP2P 组网路线今天换个思路聊聊内网穿透界最著名的老大哥——frp。它走的是服务器中转转发路线原理更朴素、适用面更广是无数运维和开发者的心头好。本文从零开始用当前最新稳定版v0.71.x带你把它从原理到实战彻底跑通远程桌面、Web 发布、点对点模式一次讲清楚。一、先搞懂什么是内网穿透1.1 问题的根源你根本没有公网门牌号在互联网世界里一台设备要被别人主动访问需要有一个公网 IP。但现实是IPv4 地址早就枯竭了运营商分给家庭宽带的往往是内网 IP你拨号拿到的其实是 100.64.x.x 这种运营商大内网地址即便有公网 IP很多家庭/企业路由器默认还挡着一层防火墙外网照样进不来就算你做了端口映射遇到没有公网 IP 的宽带一切白搭。所以就有了这么个尴尬局面你的设备能出去主动访问外网但外网进不来无法主动访问你。1.2 什么是内网穿透内网穿透也叫 NAT 穿透解决的就是上面这个问题。最朴素的思路是找一台有公网 IP 的服务器当中间人内网设备主动和它建立一条长连接外网用户访问时先访问这台服务器服务器再把数据沿着这条长连接转发给内网设备。一句话内网设备够不着公网那就让公网服务器帮你递话。frp 干的就是这个活。1.3 一张图看懂 frp 的转发模型① frpc 主动连上 frps内网→公网能出去 ┌──────────────┐ 长连接 ┌──────────────┐ │ 内网机器 │ ──────────▶ │ 公网 VPS │ │ (frpc 客户端) │ ◀────────── │ (frps 服务端) │ │ 跑着 RDP/Web │ 数据转发 │ 开放 7001 等 │ └──────────────┘ └──────┬───────┘ │ ② 外网用户访问 VPS 的端口 ▼ ┌──────────────┐ │ 外网用户/设备 │ │ (手机/电脑/Kali) │ └──────────────┘注意关键点所有业务数据都要经过 VPS 中转。这和 ZeroTier 的打洞直连是两条完全不同的技术路线各有优劣后面细说。二、frp 是什么内网穿透界的瑞士军刀2.1 一句话简介frpFast Reverse Proxy是一个开源、高性能的内网穿透 反向代理工具由 Go 语言编写作者 fatedier。它的江湖地位有多高GitHub 上10 万 star几乎是同类工具里知名度最高的那个。它的核心组成只有两个程序程序全称部署位置职责frpsfrp Server有公网 IP 的服务器VPS/云主机监听端口、接收 frpc 连接、转发数据、提供 Dashboardfrpcfrp Client内网里要被访问的机器主动连接 frps把本地服务挂到公网2.2 它能干什么把内网机器的SSH22、远程桌面3389、文件共享445暴露到公网出差在外也能远程办公把内网的HTTP/HTTPS Web 服务发布到公网支持域名绑定、虚拟主机多个域名共用一个公网端口支持TCP、UDP、HTTP、HTTPS等协议游戏联机、视频流、设备报文转发都能做进阶玩法支持STCP / XTCP点对点加密模式frp 服务器只做介绍人数据两端直连。2.3 为什么选 frp而不是 ngrok、花生壳……市面上的内网穿透工具一抓一大把frp 的核心优势在于维度frp自建花生壳/cpolar/ngrokSaaSZeroTier/TailscaleP2P 组网数据路径自己的 VPS 中转第三方服务器中转优先 P2P 直连数据掌控完全自主经过第三方敏感数据有顾虑自建 Planet 才完全自主免费额度一台 VPS 全搞定免费版限速限流量官方免费 25 台/网上手难度中等要会 Linux低注册即用低典型场景长期稳定发布服务、企业远程办公临时演示、个人应急多设备长期互联互访选型口诀想把内网服务发布给公网陌生人/客户访问→ frp想自己多台设备互相访问→ ZeroTier 更省流量更快。两者不是竞争关系很多老哥家里两个都装——ZeroTier 管设备互联frp 管对外发布。三、环境准备你需要什么动手之前先盘一盘家底角色要求说明公网 VPS有公网 IPLinux 系统本文以 Ubuntu 为例能装 Docker 更好但不是必须frp 非常轻量1 核 512M 的入门机都绰绰有余内网机器要被访问的设备Windows/Linux 皆可放家里/公司的 NAS、台式机、服务器都行测试设备任意能上网的设备手机、另一台电脑用于验证穿透是否成功关键认知frp 是转发型工具VPS 的带宽就是你的水管粗细。VPS 带宽 1Mbps穿透后远程桌面就会卡成幻灯片想要流畅的远程桌面/看视频VPS 带宽至少 3-5Mbps 起步。瓶颈在 VPS不在内网。顺带一提如果你要穿透的是HTTP/HTTPS 服务并绑定域名国内云服务器上 80/443 端口需要域名备案。嫌备案麻烦就把 frp 的 HTTP 端口设成非 80比如 8060照样能访问本文就这么干。四、服务端搭建把中转站架起来4.1 下载 frp 并确认架构frp 是 Go 写的单文件、免安装下载解压就能跑。先 SSH 登录 VPS查看 CPU 架构uname-m# 输出 x86_64 → 选 amd64 版本# 输出 aarch64 → 选 arm64 版本ARM 服务器常见然后去 frp 的 GitHub Releases 页面下载对应版本。以 2026 年 8 月发布的v0.71.0为例版本号以官方最新为准Linux x86_64 的包名是frp_0.71.0_linux_amd64.tar.gz# 假设已经把压缩包下载/上传到服务器开始解压tar-zxvffrp_0.71.0_linux_amd64.tar.gz# 改个短名字方便后续操作mvfrp_0.71.0_linux_amd64 frpcdfrpls-l解压后你会看到一组文件重点认准这四个文件作用frps服务端程序s serverfrps.toml服务端配置文件新版默认 TOML 格式frpc客户端程序c clientfrpc.toml客户端配置文件⚠️版本认知更新重要老教程里配置文件名都是frps.ini/frpc.ini那是v0.52.0 之前的格式。从 v0.52.0 起 frp 改用TOML也支持 YAML/JSONINI 已被官方标记弃用、将在未来版本移除。新项目请直接用 .toml网上那些 .ini 教程当历史参考就好别照着配。4.2 编写服务端配置 frps.toml# 项目源码frps.toml服务端配置 # 客户端与服务端通信的主端口 bindPort 7000 # 鉴权token 方式客户端必须带相同 token 才能连上来 auth.method token auth.token 换成你自己的强口令 # 管理面板Dashboard浏览器查看运行状态与流量 webServer.addr 0.0.0.0 webServer.port 7500 webServer.user admin webServer.password 也换掉这个默认密码 # 反向代理 HTTP 服务的统一入口端口走域名访问时用 vhostHTTPPort 8060逐行解释bindPortfrps 的主监听端口客户端连接用默认 7000auth.token连接口令。客户端和服务端 token 不一致直接拒连——务必设置并记牢这是 frp 的第一道安全闸webServer.*管理面板。启动后浏览器访问http://VPS公网IP:7500就能看到所有代理的运行状态、流量统计vhostHTTPPortHTTP 虚拟主机入口。多个域名共用这个端口转发到不同内网服务后面 Web 发布会用到暂时用不到可以先注释掉。4.3 启动服务端# 前台启动测试先确认能正常跑起来./frps-c./frps.toml看到类似下面的日志就是成功了frps uses config file: frps.toml frps tcp listen on 0.0.0.0:7000 frps started successfully启动后先别急着下一步回到云厂商控制台在安全组/防火墙里放行这几个端口7000主连接、7500Dashboard、7001/7002等会儿给代理用的公网端口按实际开。忘记放行端口是 frp 排错榜第一名。4.4 用 systemd 守护告别 nohup老教程喜欢nohup ./frps 挂后台——能用但一重启服务器就没了进程死了也没人管。生产环境推荐用systemd 托管开机自启 崩溃自动拉起# 把 frp 移到标准目录可选路径清爽sudomvfrp /opt/frp# 创建 systemd 服务文件sudovim/etc/systemd/system/frps.service写入以下内容示意路径按你的实际部署改[Unit] Descriptionfrp Server Afternetwork.target [Service] Typesimple ExecStart/opt/frp/frps -c /opt/frp/frps.toml Restarton-failure RestartSec5 [Install] WantedBymulti-user.target启用并启动sudosystemctl daemon-reloadsudosystemctlenable--nowfrpssudosystemctl status frps# 看到 active (running) 即成功此时浏览器访问http://VPS公网IP:7500用配置里的账号密码登录就能看到 frp Dashboard 面板了——以后所有代理的连接状态、流量曲线一目了然。五、客户端配置把内网服务挂出去5.1 场景一远程桌面RDP——最刚需的用法frp 的客户端是那台要被远程访问的内网机器。以一台内网 Windows 机器为例要远程访问它下载Windows amd64版本的 frp解压后编辑frpc.toml# 项目源码frpc.toml客户端配置 # 公网 VPS 的信息和 frps.toml 对应 serverAddr 你的VPS公网IP serverPort 7000 # 鉴权 token必须与 frps.toml 里一致 auth.method token auth.token 换成你自己的强口令 # 第一条代理远程桌面 [[proxies]] name rdp # 规则名自己起好认就行 type tcp # 协议类型 localIP 127.0.0.1 # 本机服务地址 localPort 3389 # 本机 RDP 端口 remotePort 7001 # 公网 VPS 上对外开放的端口 # 第二条代理文件共享SMB [[proxies]] name smb type tcp localIP 127.0.0.1 localPort 445 # Windows 文件共享 remotePort 7002启动客户端关键提醒不能双击 frpc.exefrpc 是命令行程序双击没有任何反应必须在 cmd 或 PowerShell 里运行# 在解压目录下执行.\frpc.exe-c.\frpc.toml看到以下日志即连接成功login to server success proxy added: [rdp smb] start proxy success5.2 验证远程桌面方法一Windows 自带远程桌面连接mstsc计算机栏填VPS公网IP:7001输入内网 Windows 的账号密码 → 进入桌面方法二Linux/Kali 下用 rdesktoprdesktop VPS公网IP:7001排错提示连不上先自查三件事——① VPS 防火墙有没有放行 7001② 内网 Windows 是否已开启允许远程桌面系统属性 → 远程③ 在内网先测试mstsc /v:127.0.0.1能通再谈穿透。很多人第一步就栽在没开系统自带的远程桌面功能上。5.3 场景二把内网 Web 服务发布到公网假设你的内网 Linux 机器上跑着一个 Web 应用端口 8080想给外网同事看。客户端加一条 HTTP 代理# frpc.toml 中追加 [[proxies]] name web type http # 注意类型是 http localIP 127.0.0.1 localPort 8080 # 内网 Web 服务端口 customDomains [web.example.com] # 换成你的域名服务端需要已经配置了vhostHTTPPort 80604.2 节已加。然后去域名服务商把web.example.com解析A 记录到你的 VPS 公网 IP重启 frpc 让新配置生效外网直接访问http://web.example.com:8060就能打开你内网的 Web 服务。原理frps 的 8060 端口收到 HTTP 请求后根据请求里的Host 域名判断该转发给哪台 frpc——这就是虚拟主机能力多个域名可以共用一个 8060 端口分别转到不同内网机器非常省公网端口。同理type httpscustomDomains可以发布 HTTPS 服务frps 侧开vhostHTTPSPortUDP 服务把type改成udp即可比如穿透游戏联机、设备 UDP 报文。六、进阶修炼从能跑到跑得专业6.1 ini → toml 迁移对照老玩家必看如果你以前用的是 .ini升级新版时对照这张表改几分钟搞定语义旧版 frps.ini新版 frps.toml主端口bind_port 7000bindPort 7000口令token 12345678auth.method tokenauth.token 12345678面板端口dashboard_port 7500webServer.port 7500面板账号dashboard_user adminwebServer.user admin面板密码dashboard_pwd adminwebServer.password adminHTTP 入口vhost_http_port 8060vhostHTTPPort 8060代理定义[rdp] 散落字段[[proxies]]数组 驼峰字段语义旧版 frpc.ini新版 frpc.toml服务器地址server_addr x.x.x.xserverAddr x.x.x.x服务器端口server_port 7000serverPort 7000本地端口local_port 3389localPort 3389远程端口remote_port 7001remotePort 7001自定义域名custom_domains xxxcustomDomains [xxx]TOML 版还支持YAML / JSON和环境变量模板渲染配置多了还能用includes拆分成多个文件类似 Nginx 的 conf.d管理几百条代理也不乱。6.2 STCP / XTCP不想让流量过服务器的私密通道TCP 模式所有流量都走 VPS中转带宽吃紧、且 VPS 能看到你的明文数据。frp 还提供两种进阶模式STCPSecret TCPfrps 只负责牵线两端 frpc 之间建立加密直连且访问方必须持有相同的secretKey才能连——适合只有自己人要访问的服务比如加密 SSHXTCPP2P TCP在 STCP 基础上做UDP 打洞打洞成功则完全 P2P 直连不占用 VPS 带宽思路和 ZeroTier 一致。缺点是对 NAT 类型有要求打洞失败就退化成 STCP。STCP 服务端配置与普通 TCP 几乎一样代理类型写stcp多一个secretKey访问方不是直接连 VPS 端口而是再跑一个 frpc 配[[visitors]]段把远程服务映射到本地端口然后访问127.0.0.1:本地端口。逻辑稍绕但对带宽敏感、注重隐私的场景非常值。6.3 给 frpc 也上个 systemdWindows 用计划任务内网机器一重启 frpc 就没了Linux 端照 4.4 节写个frpc.service即可。Windows 端最省事的方案是任务计划程序新建任务 → 触发器选计算机启动时 → 操作填frpc.exe -c frpc.toml起始目录选解压目录。七、安全与运维别把家门钥匙挂门口frp 本质是把内网服务暴露到公网用得好是远程办公利器用不好就是引狼入室。安全清单请收好token 必须改默认/弱口令等于裸奔任何知道你 VPS IP 的人都能连上你的 frpsDashboard 不要暴露公网webServer.addr改成127.0.0.1需要看面板时用 SSH 隧道访问或至少换强密码只开放必要的 remotePort用新版allowPorts字段限制客户端能申请的端口范围防止 frpc 被攻破后乱开端口敏感服务优先 STCPSSH、数据库这类高价值服务别用裸 TCP 挂公网套一层 secretKey 直连模式及时升级frp 这类 Go 单二进制工具升级极简单换文件重启即可历史上也曝出过安全公告如 HTTP vhost 路由鉴权绕过、畸形请求导致拒绝服务等追平最新稳定版是性价比最高的安全投入关注日志Dashboard 和journalctl -u frps都能看到谁在连、连了什么端口异常连接早发现早处理。八、常见问题速查表现象大概率原因解决办法frpc 报login to server failedtoken 不一致 / 7000 端口没放行核对 token放行安全组端口frpc 登录成功但外网连不上代理的 remotePort 没放行VPS 防火墙放行对应端口远程桌面连不上内网 Windows 没开远程桌面系统属性开启先用 127.0.0.1 自测能连上但非常卡VPS 带宽不足 / 走了中继升带宽或改用 STCP/XTCP 直连HTTP 域名访问 404域名没解析到 VPS / 没走 8060配 A 记录访问带端口改完配置不生效没重启 frpc / frpssystemctl restart 对应服务服务器重启后 frp 没了没用 systemd/计划任务托管按 4.4/6.3 配置自启九、写在最后frp 在真实业务里的样子黑漂技术佬身边最常见的 frp 用法其实都挺朴素但刚需远程办公居家连公司电脑RDP/SSH 全走 frp体验和坐在工位前差别不大客户现场设备运维无人零售柜的工控机、农业大棚的边缘网关内网跑一个 frpc人在总部就能 SSH 上去看日志、改配置省下的差旅费够买好几台 VPS临时给客户演示本地开发的服务用 frp 一键发布把地址甩给客户比录屏演示有说服力得多家里 NAS / 相册 / 博客一台低配 VPS frp把家里的服务一个个挂出去全年稳定在线。frp 的上手曲线很平缓一台 VPS、两个文件、三行配置半小时内就能跑通第一个穿透。真正拉开差距的是对原理的理解和对安全的敬畏——这两点今天这篇都给你补上了。去试试吧把第一个服务穿出去的那一刻你会觉得远程这个词从此有了新的含义。附知识地图frp 内网穿透 ├─ 概念内网穿透 / 转发模型VPS 中转 ├─ frp 简介frps(服务端) frpc(客户端)Go 单文件 ├─ 选型frp vs ngrok/花生壳 vs ZeroTier/Tailscale ├─ 环境公网 VPS带宽瓶颈 内网机器 测试机 ├─ 服务端 │ ├─ 下载解压v0.71.x注意架构 │ ├─ frps.tomlbindPort / auth.token / webServer / vhostHTTPPort │ ├─ systemd 托管替代 nohup │ └─ Dashboard :7500 看流量 ├─ 客户端 │ ├─ frpc.tomlserverAddr [[proxies]] │ ├─ TCP 场景RDP(3389→7001)、SMB(445→7002) │ ├─ HTTP 场景customDomains vhostHTTPPort 8060 │ └─ 启动cmd 运行禁止双击 ├─ 进阶 │ ├─ ini → toml 迁移对照表 │ ├─ STCP/XTCP加密直连、P2P 打洞 │ └─ Windows 计划任务 / Linux systemd 自启 ├─ 安全强 token / 面板内网化 / allowPorts / 及时升级 └─ 排错登录失败 / 端口未放行 / RDP 未开 / 带宽卡顿
上一篇/下一篇内容由系统自动关联
返回资讯列表 →