frp-0.61.0实战:泛解析域名穿透与HTTPS配置全解析 📅 发布时间:2026/7/11 2:43:55 👁️ 浏览次数: 1. 从零开始理解frp与泛解析穿透的核心概念如果你手头有一台内网服务器上面跑着个人博客、NAS服务、智能家居控制面板或者自己开发的小工具想让外网的朋友也能访问那你肯定遇到过“内网穿透”这个难题。以前我试过各种方案要么配置复杂得让人头疼要么稳定性堪忧直到用上了frp才算是找到了一个既强大又省心的工具。特别是最新的0.61.0版本它在配置文件的易用性和功能上都有了不少改进今天我就结合自己踩过的坑来详细聊聊怎么用它实现泛解析域名穿透并且稳稳地配上HTTPS。首先咱们得搞清楚frp是干嘛的。你可以把它想象成一个“信使”或者“中转站”。你有一台拥有公网IP的服务器我们叫它frps也就是服务端它24小时站在互联网上。你家里或者公司内网的机器我们叫它frpc也就是客户端则通过这个“信使”与公网服务器建立一条加密的隧道。当外网用户想访问你内网的服务时请求先发到公网服务器公网服务器再通过这条隧道把请求转发给你的内网机器最后把内网机器的响应原路返回。这样哪怕你的内网机器躲在路由器后面没有公网IP也能被全世界访问到了。那泛解析域名穿透又是什么高级玩法呢想象一下你有一个域名比如aa.com。你不仅想让blog.aa.com访问你的博客还想让nas.aa.com访问你的NAShome.aa.com访问你的智能家居面板。如果每个子域名都去手动配置一条解析记录那太麻烦了。泛解析就是用一个通配符*.aa.com一次性把所有子域名都解析到你的公网服务器IP上。配合frp你只需要在配置里告诉它“所有指向*.aa.com的请求都按规则转发到对应的内网服务去。” 这样无论你未来新增多少个服务只要用新的子域名frp都能自动识别并转发管理起来极其方便实测下来非常灵活。至于HTTPS现在已经是网站的标配了浏览器对非HTTPS站点的警告也越来越严格。为穿透的服务启用HTTPS不仅能加密数据传输防止被窃听还能避免那些烦人的“不安全”提示让服务看起来更专业、更可靠。在frp里配置HTTPS核心思路是把SSL/TLS终止的工作交给内网的服务比如Nginx来处理frp本身只负责透明的TCP流量转发这样既能利用成熟的Web服务器来管理证书又能保持架构的清晰。所以这篇文章的目标就是带你手把手搞定这三件事搭建frp服务端和客户端、配置泛解析域名实现灵活的子域名访问、为这些服务穿上HTTPS的“安全外套”。我会把每一步的命令、配置文件都贴出来并解释清楚每个参数是干嘛的保证你跟着做就能成功。2. 实战准备搭建你的frp-0.61.0运行环境工欲善其事必先利其器。在开始写配置文件之前我们得先把frp的“舞台”搭好。这里需要两台机器一台是拥有公网IP的云服务器VPS作为服务端frps另一台是你需要暴露服务的内网机器作为客户端frpc。我个人的经验是服务端推荐用Linux系统比如Ubuntu 20.04/22.04或者CentOS 7/8稳定性好教程也多。2.1 获取并安装frp首先去frp的GitHub Releases页面下载对应版本。对于大多数64位的Linux服务器我们选择frp_0.61.0_linux_amd64.tar.gz。分别在服务端和客户端机器上执行以下命令# 创建一个专用的目录方便管理 mkdir -p /data/frp cd /data/frp # 下载frp 0.61.0版本 wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz # 解压 tar -zxvf frp_0.61.0_linux_amd64.tar.gz # 进入解压后的目录 cd frp_0.61.0_linux_amd64解压后你会看到一堆文件其中最关键的是frps/frps.toml: 服务端可执行程序及其配置文件。frpc/frpc.toml: 客户端可执行程序及其配置文件。frps_full.toml/frpc_full.toml: 完整的配置示例文件包含了所有可配置项的说明是绝佳的参考资料遇到不理解的参数就去这里查。2.2 域名与解析设置这是实现泛解析的关键一步。你需要拥有一个域名可以在各大域名服务商购买。登录你的域名控制面板找到DNS解析设置。我们需要添加两条记录A记录主域名将或aa.com解析到你的公网服务器IPx.x.x.x。这样访问aa.com就能到达你的服务器。A记录泛解析将*解析到同样的公网服务器IPx.x.x.x。这条记录就是泛解析的核心它意味着anything.aa.com都会指向x.x.x.x。添加后DNS生效需要一些时间通常几分钟到几小时不等。你可以用ping命令或者nslookup命令来测试是否生效例如ping randomtest.aa.com看看返回的IP是不是你的服务器IP。2.3 防火墙与安全组配置这是一个非常容易踩坑的地方你的公网服务器frps必须开放相应的端口否则外界的连接请求会被无情地挡在门外。云服务商安全组如果你用的是阿里云、腾讯云等云服务器记得在控制台的安全组规则中放行以下端口TCP 7000: 这是frp服务端和客户端建立控制连接的默认端口必须开放。TCP 80 和 TCP 443: 如果你希望通过HTTP和HTTPS访问内网Web服务这两个端口也需要开放。其他自定义远程端口如果你像原始文章那样映射了MQTT服务TCP 1883那么安全组里也要放行1883端口。服务器自身防火墙以Ubuntu系统为例使用ufw命令放行端口sudo ufw allow 7000/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 1883/tcp # 如果有其他服务按需添加 sudo ufw reload把这两层“门”都打开后续的连接才会畅通无阻。我刚开始玩的时候就因为忘了配置安全组折腾了半天才发现问题所在。3. 核心配置详解手把手编写frps.toml与frpc.toml环境准备好接下来就是重头戏配置文件。frp从0.61.0版本开始默认使用TOML格式的配置文件比之前的INI格式更清晰易读。我们分别来看服务端和客户端的配置。3.1 公网服务器配置frps.toml这个文件放在公网服务器的frp目录下。它的核心作用是定义frp服务端监听的端口和基础参数。# frps.toml bindPort 7000 vhostHTTPPort 80 vhostHTTPSPort 443 # 仪表板配置可选但推荐 webServer.addr 0.0.0.0 webServer.port 7500 webServer.user admin webServer.password your_strong_password_here # 身份验证令牌增强安全性强烈建议设置 auth.method token auth.token your_auth_token_here我们来拆解一下每个参数bindPort 7000: 这是服务端与客户端建立控制连接的端口。frpc.toml里的serverPort必须和这个值一致。vhostHTTPPort 80: 这是用于HTTP类型代理的虚拟主机端口。当外网用户访问http://xxx.aa.com时请求会到达你服务器的80端口然后由frps根据域名转发。vhostHTTPSPort 443: 这是用于HTTPS类型代理的虚拟主机端口。对应https://xxx.aa.com的访问。webServer部分这是frps的内置仪表板通过浏览器访问http://你的服务器IP:7500输入用户名密码就能看到所有客户端的连接状态、流量统计非常方便监控。务必修改成一个复杂的密码auth.token: 这是客户端连接服务端时的“暗号”必须和服务端设置的一致防止未经授权的客户端连接是重要的安全措施。3.2 内网机器配置frpc.toml这个文件放在内网机器的frp目录下。它定义了有哪些内网服务需要被穿透出去。# frpc.toml serverAddr x.x.x.x # 你的公网服务器IP地址 serverPort 7000 # 必须与frps的bindPort一致 auth.method token auth.token your_auth_token_here # 必须与frps设置的一致 # 客户端管理页面可选 webServer.addr 0.0.0.0 webServer.port 7400 webServer.user admin webServer.password admin_client # 第一个代理一个普通的HTTP Web服务例如监控页面 [[proxies]] name web-monitor type http localIP 192.168.1.34 localPort 9100 customDomains [monitor.aa.com] # 第二个代理TCP服务例如MQTT [[proxies]] name mqtt-broker type tcp localIP 192.168.1.33 localPort 1883 remotePort 1883 # 第三个代理HTTPS服务这是实现泛解析HTTPS的关键 [[proxies]] name nginx-https type https localIP 192.168.1.33 localPort 443 customDomains [*.aa.com]这里有几个关键点需要特别强调serverAddr和serverPort这指向了你的frps是客户端寻找服务端的“地址”。[[proxies]]每个这样的段落定义了一个代理规则。[[ ]]在TOML中表示一个数组意味着你可以定义多个。HTTP代理type http。它利用frps的vhostHTTPPort并能根据customDomains里的域名来区分不同的服务实现一个端口80代理多个网站。TCP代理type tcp。这是最直接的端口映射。将公网服务器上的remotePort直接转发到内网机器的localIP:localPort。注意remotePort也需要在服务器防火墙和安全组中放行。HTTPS代理与泛解析type https。这是本文的精髓。注意看customDomains [*.aa.com]这里使用了通配符*。它告诉frps“所有以.aa.com结尾的HTTPS请求只要发到了我的443端口都转发给我这个客户端。” 然后这个客户端会将其转发到内网IP192.168.1.33的443端口。这意味着内网机器上必须有一个服务比如Nginx在443端口上监听并且配置了能够处理*.aa.com的SSL证书。frp在这里只做纯粹的TCP流量转发不解密HTTPS内容加解密工作由内网的Nginx完成。4. 启用HTTPS的关键内网Nginx的SSL配置很多朋友配置到这里就卡住了明明frpc的HTTPS代理启动了但访问https://test.aa.com却报错。问题往往出在内网的Nginx配置上。frp把HTTPS请求流量原封不动地转给了内网机器的443端口所以内网机器必须能处理这些HTTPS请求。4.1 获取SSL证书你可以从各种渠道获取证书比如云服务商免费证书阿里云、腾讯云等都提供一年期的免费单域名或泛域名证书。Let‘s Encrypt通过Certbot等工具自动申请和续签免费的泛域名证书非常推荐。宝塔面板如果你在内网服务器上安装了宝塔在网站设置里可以直接申请SSL证书图形化操作对新手极其友好。无论哪种方式你最终会得到两个文件一个.pem或.crt文件证书一个.key文件私钥。请妥善保管私钥。4.2 配置Nginx支持泛域名HTTPS假设你的证书文件是ssl.pem和ssl.key放在/usr/local/nginx/cert/目录下。下面是一个关键的Nginx服务器块配置示例server { # 监听443端口并启用SSL listen 443 ssl http2; # 使用泛域名这是核心 server_name *.aa.com; # 指定SSL证书和私钥的路径 ssl_certificate /usr/local/nginx/cert/ssl.pem; ssl_certificate_key /usr/local/nginx/cert/ssl.key; # SSL优化配置 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.2 TLSv1.3; # 建议只启用更安全的TLS 1.2和1.3 ssl_prefer_server_ciphers on; # 根据不同的子域名将请求反向代理到不同的本地服务 location / { # 这里是一个示例实际你需要根据$host变量来判断 # $host变量包含了用户访问的原始域名如 test.aa.com if ($host monitor.aa.com) { proxy_pass http://192.168.1.34:9100; } if ($host home.aa.com) { proxy_pass http://192.168.1.100:8080; } # 默认代理或直接提供静态文件 root /usr/share/nginx/html; index index.html index.htm; # 一些常用的代理头设置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }这个配置的妙处在于server_name *.aa.com;这一行让这个Nginx服务器块捕获所有对*.aa.com的HTTPS请求。然后在location /块里我们可以通过Nginx的内置变量$host来获取用户具体访问的是哪个子域名从而将请求转发到内网中对应的服务上去。这样一个Nginx配置就统一管理了所有泛域名子站点的HTTPS卸载和请求分发。配置完成后记得用nginx -t测试配置语法然后用systemctl reload nginx重新加载配置。5. 服务管理脚本与日常运维技巧手动启动和停止frp服务太麻烦了而且进程万一挂了怎么办参考原始文章的思路我们可以写一个简单的Shell脚本来管理它让运维变得更轻松。这里我优化并解释一下那个脚本。5.1 frps服务端管理脚本在公网服务器的frp目录例如/data/frp/frp_0.61.0_linux_amd64下创建一个文件叫frps_manager.sh#!/bin/bash # 定义变量 FRP_PATH/data/frp/frp_0.61.0_linux_amd64 BIND_PORT7000 # 与frps.toml中的bindPort一致 # 启动函数 start_frps() { if [ -d $FRP_PATH ]; then echo 正在启动frps服务... cd $FRP_PATH # 使用nohup在后台运行并将日志输出到文件 nohup ./frps -c ./frps.toml frps.log 21 # 等待一秒检查进程是否启动成功 sleep 1 check_port $BIND_PORT if [ $? -eq 0 ]; then echo frps启动成功进程信息 ps aux | grep -v grep | grep ./frps -c else echo frps启动可能失败请检查日志文件$FRP_PATH/frps.log fi else echo 错误frp目录不存在 - $FRP_PATH exit 1 fi } # 停止函数 stop_frps() { echo 正在停止frps服务... # 通过端口号查找PID PID$(lsof -ti:$BIND_PORT 2/dev/null) if [ -n $PID ]; then kill -9 $PID echo 已终止frps进程 (PID: $PID)。 else echo $BIND_PORT 端口未找到运行中的frps进程。 fi } # 重启函数 restart_frps() { stop_frps echo 等待2秒... sleep 2 start_frps } # 检查端口状态函数 check_port() { lsof -ti:$1 /dev/null 21 return $? } # 查看状态函数 status_frps() { PID$(lsof -ti:$BIND_PORT 2/dev/null) if [ -n $PID ]; then echo frps正在运行 (PID: $PID)。 ps -p $PID -o pid,user,cmd else echo frps未运行。 fi } # 显示帮助 show_help() { echo 用法: $0 {start|stop|restart|status|help} echo echo 命令: echo start 启动frps服务 echo stop 停止frps服务 echo restart 重启frps服务 echo status 查看frps状态 echo help 显示此帮助信息 } # 主逻辑 case $1 in start) start_frps ;; stop) stop_frps ;; restart) restart_frps ;; status) status_frps ;; help|*) show_help ;; esac给脚本添加执行权限chmod x frps_manager.sh。之后你就可以用./frps_manager.sh start这样的命令来管理服务了。这个脚本比原始文章的更健壮一些使用了lsof来检查端口并提供了状态查看功能。5.2 配置系统服务Systemd实现开机自启对于生产环境使用Systemd服务是更规范、更可靠的方式。在公网服务器上创建文件/etc/systemd/system/frps.service[Unit] DescriptionFrp Server Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s WorkingDirectory/data/frp/frp_0.61.0_linux_amd64 ExecStart/data/frp/frp_0.61.0_linux_amd64/frps -c /data/frp/frp_0.61.0_linux_amd64/frps.toml [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable frps # 启用开机自启 sudo systemctl start frps # 启动服务 sudo systemctl status frps # 查看状态同样的在内网客户端机器上也可以为frpc创建类似的Systemd服务frpc.service只需修改Description、ExecStart和配置文件路径即可。这样无论服务器是否重启你的frp服务都会自动运行省心省力。6. 排错指南与常见问题配置过程不可能一帆风顺这里我总结几个我踩过的坑和解决办法。6.1 连接失败提示“connection refused”或“timeout”检查防火墙和安全组这是最常见的原因务必确认公网服务器的安全组和本地防火墙已放行bindPort(如7000)、vhostHTTPPort(80)、vhostHTTPSPort(443) 以及所有用到的remotePort。检查serverAddr确保frpc.toml里的serverAddr填写的是公网服务器的正确公网IP而不是内网IP。检查token确认frps.toml和frpc.toml中的auth.token完全一致包括大小写。6.2 域名访问显示“Bad Request”或“No such web page”检查域名解析用ping yoursub.aa.com确认域名是否已正确解析到公网服务器IP。如果解析不对frps收不到对应域名的请求。检查frpc代理配置确认customDomains里填写的域名和你访问的域名完全匹配。访问monitor.aa.com配置里也必须是monitor.aa.com。检查内网服务在内网机器上直接用curl http://localhost:9100测试你的本地服务如监控页面是否正常。如果内网服务本身就不通frp转发也没用。6.3 HTTPS访问证书错误或无法建立连接检查Nginx配置和证书首先确保内网Nginx的443端口服务已启动 (systemctl status nginx)。其次检查Nginx配置中ssl_certificate和ssl_certificate_key的路径是否正确文件权限是否可读。可以用nginx -t测试配置。确认frpc代理类型为HTTPS服务配置的代理type必须是https而不是http或tcp。检查frps端口确保frps.toml中配置了vhostHTTPSPort 443并且服务器防火墙开放了443端口。6.4 泛解析HTTPS不生效Nginx server_name配置这是最关键的一点。Nginx配置中的server_name必须包含泛域名*.aa.com不能是具体的子域名。证书类型你必须使用支持泛域名的SSL证书通配符证书。单域名证书是无法用于*.aa.com下所有子域名的。申请证书时一定要选择泛域名类型。frpc customDomains配置在frpc.toml的HTTPS代理段customDomains必须填写[*.aa.com]。当遇到问题时多看日志分别查看frps.log和frpc.log默认在frp程序同级目录以及Nginx的错误日志通常在/var/log/nginx/error.log。日志里的错误信息是定位问题最直接的线索。
ChatGPT Plus插件实战:5分钟搞定网页和PDF文件解析(附避坑指南) ChatGPT Plus插件实战:5分钟搞定网页和PDF文件解析(附避坑指南) 如果你经常需要从网页文章、PDF报告或者本地文档里快速提取信息,然后让AI帮你分析、总结或翻译,那你一定遇到过这样的麻烦:要么得手动复制粘… 2026/7/10 7:22:09
Wireshark最新版百度网盘高速下载指南(附WinPcap安装教程) 网络流量分析的瑞士军刀:Wireshark 高效获取与深度配置实战 对于刚踏入网络分析领域的朋友来说,第一道门槛往往不是复杂的协议解析,而是如何顺利地把工具拿到手并让它跑起来。尤其是在特定网络环境下,直接从官网下载大型工具可能… 2026/7/3 2:58:57
ABAP2XLSX保姆级安装教程:从零开始配置到运行第一个Demo ABAP2XLSX实战入门:从环境搭建到首个Excel报表的深度解析 如果你是一名SAP ABAP开发者,正苦于如何将系统数据优雅地导出为格式复杂的Excel文件,那么ABAP2XLSX这个开源工具库绝对值得你投入时间学习。它远不止是一个简单的“导出”功能&#x… 2026/7/9 15:08:56
JAVA练习280- 最小覆盖子串 题目概览 给定两个字符串 s 和 t,长度分别是 m 和 n,返回 s 中的 最短窗口 子串,使得该子串包含 t 中的每一个字符(包括重复字符)。如果没有这样的子串,返回空字符串 ""。 测试用例保证答案唯… 2026/7/11 2:43:35
智能路灯通信方案对比:PLC vs GPRS vs 光纤,3种方案成本与实测分析 智能路灯通信方案深度对比:PLC、GPRS与光纤的技术抉择与成本优化技术选型的核心考量维度在智慧城市基础设施建设中,路灯通信方案的选择直接影响着系统可靠性、运维成本和长期扩展性。面对PLC(电力线载波)、GPRS(通用分… 2026/7/11 2:39:33
大数据毕设项目: 基于 Python 的微博热搜用户关注度分析系统的设计与实现 基于 Python 的热门微博动态数据研判系统(源码+文档,讲解、调试运行,定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/11 2:39:33
把AI写小说“写崩”这件事,拆开给你看。 我有个朋友,写网文的,签了约。 写了三年多,最高光的月份能赚六位数,平台推荐位拿到手软。 但后来,他整个人变了。 那段时间,每次约他吃饭,他都黑着一张脸,手机屏幕永远是文档界面。 … 2026/7/11 2:37:33
三兄妹98%控股,女儿管审计,文峰光电把“家族上市”刻进了DNA 7月10日,淮南文峰光电科技股份有限公司(简称文峰光电)迎来北交所上会审核。2023至2025年(报告期)文峰光电受行业竞争加剧、铜银及进口绝缘材料涨价影响,业绩波动明显,毛利率持续承压。公司高端绝… 2026/7/11 2:35:32
GPT-5.6三档模型怎么选?Sol、Terra和Luna区别讲清楚 GPT-5.6上线后,Codex里出现了Sol、Terra和Luna三档模型。不少用户看到模型名称后的第一反应是:哪个模型能力最强?日常写代码应该选哪个?是不是一直使用Sol效果最好?OpenAI对三款模型的定位比较明确:Sol主打… 2026/7/11 2:33:32
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08