新闻详情

新闻详情

首页 / 资讯中心 / 详情

frp内网穿透配置全解:从零到子域名实战与避坑指南

发布时间:2026/10/1 13:44:39来源:尧图网络
frp内网穿透配置全解:从零到子域名实战与避坑指南
frp内网穿透配置一直是新手和老手都绕不开的一道坎尤其是当你手上有一台公网服务器却想让家里或办公室的内网服务能被外面访问时frp基本是最省心的选择。这篇文章我会从零开始完整演示frp服务端和客户端的配置全流程重点拆解子域名配置的两种常见玩法和背后的原理顺便把我这些年踩过的坑一并整理出来。无论你是刚接触内网穿透的小白还是已经被各种超时、404、Host头问题折磨过的进阶玩家这篇都值得你花十分钟读完。1. 内网穿透的整体设计与方案选型1.1 frp解决了什么痛点先把场景说清楚。假设家里有一台NAS、一台装了Web服务的旧电脑或者公司内网有一台跑着GitLab的服务器这些设备本身没有公网IP或者处于多层NAT后面外部网络根本访问不到。这时候你没法直接通过域名或IP访问这些服务出差在外想看个文件、联调个接口都只能干瞪眼。内网穿透的核心思路就是借助一台有公网IP的服务器做“中转站”。内网设备和公网服务器建立一条长连接外部请求先打到公网服务器再由服务器把流量转发到内网设备上响应再原路返回。frpFast Reverse Proxy正是这个领域里最常用的开源方案之一基于Go语言编写单二进制文件即可运行支持TCP、UDP、HTTP、HTTPS等多种协议转发配置灵活社区活跃至今依然是很多人的首选。1.2 主流通透方案横向对比业界主流的开源穿透工具有不少最常见的三个是frp、ngrok和樱花内网穿透各有侧重。方案开源自托管协议支持子域名配置学习成本适用场景frp是支持TCP/UDP/HTTP/HTTPS灵活可控中等自建服务长期稳定使用ngrok部分开源支持TCP/HTTP需自行实现或使用官方服务中等临时演示、本地联调樱花内网穿透否依赖官方主要为TCP/HTTPS官方提供固定域名低快速上手不想折腾服务器ngrok官方提供的在线服务方便但免费版有限制且国内访问速度不稳定樱花穿透胜在傻瓜式但因为是公共平台域名和端口可控性差。frp最大的优势在于完全自主可控域名、端口、认证方式、带宽限制全都掌握在自己手里而且资源占用极低一台1核1G的小水管VPS就能跑得很稳。我在实际项目里最常用frp原因很简单长期稳定、不受第三方平台限制、能自由配置子域名。接下来所有的配置都以frp为例版本以0.61.x为准这个版本在配置语法上已经比较成熟和旧版的v0.52以下有差异我会在文中特意标注。2. 服务端配置地基必须打牢2.1 下载与基础环境准备frp服务端需要部署在你有公网IP的Linux服务器上系统我用的是Ubuntu 22.04其他发行版操作逻辑一致。先到GitHub的frp release页面下载对应架构的压缩包x86_64服务器就选linux_amd64wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz tar -zxvf frp_0.61.1_linux_amd64.tar.gz mv frp_0.61.1_linux_amd64 /usr/local/frp解压后能看到两个关键文件frps服务端程序和frps.toml服务端配置文件。新版本frp已经用TOML格式取代了旧版的INI格式网上很多教程还在用frps.ini那是旧版写法直接用我的模板就好别混用。2.2 frps.toml核心参数深度解析服务端配置文件最关键的就这几个参数我一个一个说明bindPort 7000 auth.method token auth.token your-strong-token-here # 用于HTTP穿透的端口 vhostHTTPPort 8080 # 用于HTTPS穿透的端口 vhostHTTPSPort 8443 # 子域名白名单 subDomainHost frp.example.combindPort是frp服务端监听客户端连接的控制端口默认7000即可防火墙里记得放行。auth.token是客户端连接服务端的凭证相当于钥匙一定要设成长随机字符串别用默认值。vhostHTTPPort是HTTP虚拟主机端口客户端配置了type http的代理时流量会从这个端口进入。subDomainHost则是你泛解析的基础域名它和客户端的subdomain配置组合成最终访问域名。拿我的实际配置来举例。假设我有域名example.com并且已经将*.frp.example.com通过泛解析A记录指向VPS的IP那么subDomainHost就填frp.example.com。客户端设置subdomain nas最终访问地址就是nas.frp.example.com:8080。注意subDomainHost只是字符串配置真正让域名解析生效的是DNS层面的泛解析。务必在DNS服务商后台把*.frp.example.com解析到服务器IP否则配置得再正确也访问不到。2.3 用systemd管理frps进程直接运行./frps -c frps.toml虽然能启动但SSH断开服务就挂了所以必须注册成systemd服务cat /etc/systemd/system/frps.service EOF [Unit] Descriptionfrp Server Afternetwork.target [Service] Typesimple ExecStart/usr/local/frp/frps -c /usr/local/frp/frps.toml Restarton-failure RestartSec5s [Install] WantedBymulti-user.target EOF systemctl daemon-reload systemctl enable --now frps systemctl status frps这里Restarton-failure保证进程异常退出后5秒自动拉起这是稳定运行的关键。另外云服务商的安全组和系统防火墙都要放行7000、8080、8443这几个端口ufw allow 7000/tcp ufw allow 8080/tcp ufw allow 8443/tcp服务端到这里就准备好了用ss -lntp能看到7000端口处于监听状态说明frps正常拉起。3. 客户端配置与子域名实战3.1 客户端基础配置客户端就是那台需要被穿透的内网设备可以是Linux、Windows、macOS甚至是软路由。同样下载对应平台的frp压缩包Windows选windows_amd64macOS选darwin_amd64或darwin_arm64M系列芯片选arm64。客户端配置文件叫frpc.toml最基础的配置长这样serverAddr your-server-ip serverPort 7000 auth.method token auth.token your-strong-token-here [[proxies]] name ssh type tcp localIP 127.0.0.1 localPort 22 remotePort 6000这段配置的含义把内网设备的22端口SSH映射到服务器的6000端口。完成后你在任何地方执行ssh -p 6000 useryour-server-ip就等于连接内网设备。localIP填127.0.0.1还是具体内网IP取决于穿透的服务只在本机还是要代理局域网里另一台设备后者就填对端内网IP。客户端验证无误后同样推荐注册成systemd服务或者Windows服务避免前台窗口关闭后穿透失效。3.2 子域名配置的三种玩法子域名配置是frp里最常见也最容易被绕晕的地方我从易到难拆成三种玩法对照自己的场景选就行。第一种玩法单一子域名映射单服务。比如内网有一台NAS的Web管理界面跑在5000端口配置[[proxies]] name nas-web type http localIP 192.168.1.100 localPort 5000 subdomain nas这样访问http://nas.frp.example.com:8080就能打开NAS管理页。type http表示走HTTP协议frp会根据Host头把请求路由到对应的subdomain这就是“虚拟主机”机制相当于一台服务器挂了N个网站靠域名来区分。第二种玩法泛子域名通配。比如你想给内网多个不同的服务自动分配子域名可以这样[[proxies]] name web-1 type http localIP 127.0.0.1 localPort 8081 customDomains [web1.frp.example.com]customDomains和subdomain功能类似都是指定访问域名区别是customDomains更自由可以指定完整的自定义域名甚至非泛解析域名。如果只是在一个基础域名下分不同前缀用subdomain更简洁。第三种玩法HTTPS协议穿透。在服务端vhostHTTPSPort 8443已经开启的前提下客户端可以配[[proxies]] name web-https type https localIP 127.0.0.1 localPort 443 customDomains [secure.frp.example.com]这种方式适合内网服务本身已经跑着HTTPS的情况比如企业内部系统用的自签名证书。frp在这里只是做TCP层转发不做证书解密和HTTP类型的虚拟主机机制有本质区别。经验之谈如果内网服务本身没有配置TLS证书但你又想用HTTPS访问这种情况下不要把type设成https正确做法是type http 在服务端前面再套一层Nginx或Caddy做TLS终结。frp本身不负责证书管理这点很多新手容易误解。3.3 客户端常见配置组合示例一个典型的“NAS Web服务 远程桌面”多服务穿透配置大概长这样serverAddr your-server-ip serverPort 7000 auth.method token auth.token your-strong-token-here [[proxies]] name nas-web type http localIP 192.168.1.100 localPort 5000 subdomain nas [[proxies]] name docker-ui type http localIP 127.0.0.1 localPort 9000 subdomain portainer [[proxies]] name rdp type tcp localIP 192.168.1.100 localPort 3389 remotePort 63389这样的好处是多个不同的服务暴露出去都有独立子域名互不干扰。而且frp本身就支持一个客户端进程里配置多个代理不需要为每个服务单独开客户端。4. 高频问题排查与避坑指南4.1 子域名配置后访问不通问题出在哪这是出现频率最高的问题90%的情况集中在三个环节DNS解析、端口放行、Host头。第一个排查点是先确认泛解析是否生效。在本地命令行执行nslookup nas.frp.example.com看解析结果是否指向你的VPS IP。如果解析出来是空的说明DNS那边泛解析没配好或者TTL还没生效。这个环节翻车的人极多很多人光顾着改frp配置完全没注意DNS。第二个排查点是访问时不要漏端口。如果vhostHTTPPort配的是8080那访问地址必须是http://nas.frp.example.com:8080直接访问http://nas.frp.example.com会被拒绝因为80端口根本没有服务在监听。如果你想省略端口号需要在防火墙或Nginx层面做端口转发把80端口转发到8080。第三个排查点是机智的Host头问题。如果你用IP直连测试比如直接浏览器访问http://你的服务器IP:8080frp会返回404因为HTTP虚拟主机模式必须靠域名来区分路由IP访问没有Host头匹配规则。遇到404先怀疑域名而不是怀疑frp挂掉了。4.2 穿透服务不稳定时通时断最常见的原因是客户端和服务端版本不一致。frp的版本迭代中协议有过变化老版本客户端连不上新版本服务端或者连上了但频繁断开。建议服务端和客户端保持同一大版本比如都用0.61.x。第二个常见原因是网络环境中的NAT超时。内网设备长时间没有流量NAT会话被回收frp的长连接也就断了。frp本身有心跳机制默认值已经足够但如果你的网络设备NAT超时特别短可以在客户端加transport.heartbeatInterval 10 transport.heartbeatTimeout 30把心跳间隔缩短一些让NAT会话保持活跃。还有一个容易忽视的是客户端所在网络的防火墙或上网行为管理设备它们可能对长连接有特殊策略。遇到企业网络环境优先检查这里。4.3 安全加固的几个必做项frp本质上是在公网开了一个口子安全必须认真对待。我的建议是按照以下清单逐项排查第一token必须用强随机字符串用openssl rand -hex 32生成不要用123456这种。第二服务端只开放必要的端口其他地方全部关掉尤其不要让7000端口暴露给所有IP可以配合iptables把7000端口限制为只允许已知客户端IP访问。第三尽量用frp提供的TLS加密功能客户端和服务端都开启transport.tls.enable trueTLS开启后客户端和服务端之间的流量加密传输避免在内网环境中被其他人抓包看到明文数据。第四对于SSH这类高权限服务不要把remotePort设成22这种常见端口换一个高位端口大幅降低被扫描爆破的概率。4.4 我用frp过程中踩过的几个坑第一个坑和systemd有关。有一次我改了配置后执行systemctl restart frps但服务一直起不来排查半天发现是TOML格式配置里有个小数点写错了位置。frp的配置解析器对格式很敏感改完配置建议先用frps verify -c frps.toml这种命令验证语法再重启服务。第二个坑是端口冲突。有次我在服务器上启了Nginx占用80端口然后又给frp的vhostHTTPPort设了80结果frps直接启动失败。这类问题用ss -lntp查看端口占用就能快速定位。第三个坑是客户端日志过段时间就占满磁盘。frp默认日志输出到stdout如果被systemd接管会记录在journald里。建议在配置里指定日志文件并设置日志保留天数log.to /var/log/frpc.log log.level info log.maxDays 7这样既方便排查问题又不会无限增长把系统盘撑爆。5. 进阶让子域名配置更优雅5.1 用Nginx统一对外暴露80和443端口前面提到vhostHTTPPort和vhostHTTPSPort不是80和443访问时要带端口体验不够好。如果你有域名并且希望直接通过裸域名访问可以在frp服务端前面套一层Nginx反向代理。思路是Nginx监听80和443端口按server_name即子域名匹配将请求转发到frp的vhostHTTPPort或vhostHTTPSPort。配置示意server { listen 80; server_name nas.frp.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }这里的关键是proxy_set_header Host $host它保证Nginx在转发时不修改Host头frp才能根据Host头正确路由。Nginx层面配上SSL证书后还能顺带解决HTTPS访问的问题比在frp层面处理证书简单得多。5.2 Dashboard监控与鉴权frp自带一个Dashboard面板可以在服务端开启webServer.addr 0.0.0.0 webServer.port 7500 webServer.user admin webServer.password your-password通过http://服务器IP:7500能看到所有代理的连接状态和流量统计。注意这个端口千万不要暴露到公网否则等于把你所有穿透拓扑都晒出去了。建议只绑定内网地址或者通过SSH隧道访问。5.3 Windows客户端开机自启Windows平台没有systemd但你可以用计划任务或者NSSM把frpc注册成服务。最简单的方式是WinR输入shell:startup把frpc的快捷方式丢进去。但这种方式遇到异常退出不会自动重启。更稳的是用NSSMnssm install frpc C:\frp\frpc.exe -c C:\frp\frpc.toml nssm set frpc AppRestartDelay 5000 nssm start frpcNSSM会把frpc包装成Windows服务异常退出后自动拉起效果和systemd基本一致。5.4 大文件传输场景的调优如果你穿透的是大流量场景比如内网文件服务器、视频监控流需要注意MTU和带宽限制。frp默认没有做速率限制但你可以手动加[[proxies]] name file-server type tcp localIP 192.168.1.20 localPort 5000 remotePort 65000 transport.bandwidthLimit 10MBbandwidthLimit参数可以控制单个代理的最大带宽避免某个穿透服务把VPS的全部带宽榨干影响其他服务。另一个实测经验是穿透大流量时frp服务端所在VPS的网络质量比带宽数字更重要同一条线路的延迟和丢包率往往才是体验瓶颈。6. 写在最后的实践心得frp这套工具我用了大概四年从最初的v0.28一直追到现在的0.61配置格式换了好几轮但核心思路没变。我个人最大的感受是frp的文档虽然不算多但胜在逻辑清晰把bindPort、vhostHTTPPort、subdomain、customDomains这几个概念想明白了整个工具基本就通了。子域名配置这块最容易犯的错就是只顾着写客户端配置而忽略了DNS和服务端的配合。如果你是从零开始我建议先在服务端用最简单的方式跑通一条SSH穿透再逐步加HTTP服务和子域名一步到位反而容易把自己搞晕。遇到问题先看日志——客户端和服务端的日志都会明确告诉你失败原因比瞎猜快得多。最后再分享一个小技巧配置里的代理name尽量用有意义的英文标识等你的穿透服务一多通过Dashboard看状态时名字一眼能认出来是哪台设备、哪个服务能帮你省下大量时间。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python抓取东京证券交易所历史行情:从API认证到量化分析实战 2026/10/1 14:36:34

Python抓取东京证券交易所历史行情:从API认证到量化分析实战

1. 项目概述与实现的整体思路先说结论:这个项目的核心,是把“看着新闻猜股市”变成“拿数据算市场”。我去年底接到一个技术验证任务——需要把东京证券交易所的日经指数和几只重点股票的十年历史行情抓下来,做成一个可复用的数据分析基线&am…

阅读更多 →
Codex × 短视频变现:全景分析——从 Seedance 多模态生成到 AI 编程智能体落地 2026/10/1 14:36:27

Codex × 短视频变现:全景分析——从 Seedance 多模态生成到 AI 编程智能体落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
100万Token上下文到底有多大?一文读懂GPT-5.4与TaoToken的API调用实践 2026/10/1 14:36:27

100万Token上下文到底有多大?一文读懂GPT-5.4与TaoToken的API调用实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Agent 结构化输出工程:别让下游解析“看起来像 JSON“的自由文本 2026/10/1 14:36:27

Agent 结构化输出工程:别让下游解析“看起来像 JSON“的自由文本

Agent 结构化输出工程:别让下游解析"看起来像 JSON"的自由文本 摘要:当 Agent 开始承接真实业务——抽取、分类、编排、跨系统操作——"模型说了什么"远没有"模型输出的东西能不能被机器可靠地消费"重要。本文从真实开发者…

阅读更多 →
2026 秋招财务数字化校招工具栈拆解|JD 与面经复盘 2026/10/1 14:36:27

2026 秋招财务数字化校招工具栈拆解|JD 与面经复盘

一、2026 秋招财务数字化岗位核心工具清单,结合岗位日常工作任务说明2026 秋招财务数字化岗位,应届生核心必备工具包含 Excel、SQL、Power BI,加分工具为 ERP 系统、RPA、Python,这是从 BOSS 直聘、应届生求职网 2026 届校招 JD 提…

阅读更多 →
2026国内大模型API聚合平台横评:TaoToken统一Key接入四大平台核心优势解析 2026/10/1 14:36:27

2026国内大模型API聚合平台横评:TaoToken统一Key接入四大平台核心优势解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉