为什么你的公网IP总差一步
内网穿透的核心从来不是技术,而是让外网用户通过一个稳定、可记忆的域名,绕过没有公网IP的尴尬,直达你家里的NAS或办公室的服务器。 很多人折腾半天,卡住的不是frp或ngrok的配置,而是“我有域名了,怎么让它穿过围墙找到内网里的我”,这事弄明白了,你离随时随地的远程访问就只差复制粘贴。
内网穿透到底穿了什么“墙”
别把“墙”想复杂了,运营商分配给家庭宽带的大多是动态私网IP,就算你打电话要来了公网IP,80和443端口也基本被封死,这就是最现实的那堵“墙”,内网穿透工具做的事情,本质上是在你内网设备和一个有公网IP的服务器之间,挖一条加密隧道,服务器是你的“前台接待”,所有访客先敲它的门,它再通过隧道把话传到内网里的你。
没有这个“前台”,你的域名就是个空号。 域名解析只能把名字变成IP,但变出来的那个IP(服务器IP)如果背后没有隧道连着你的内网设备,访客得到的只能是“无法访问”。
隧道协议选型:frp、ngrok与Zerotier的博弈
- frp:目前国内技术圈使用率较高的方案,配置灵活,支持TCP、UDP、HTTP、HTTPS多种代理,你可以在服务器上一条命令启动服务端,内网机器上一条命令启动客户端。但得自己搞定SSL证书和域名解析。
- ngrok:胜在简单,一条命令映射80端口,但官方服务器在国外,延迟看心情,自建ngrok服务器又绕回了frp的老路。
- Zerotier/Tailscale:组网方案,不是传统意义上的穿透,它们把设备们组成一个虚拟局域网,域名的角色被IP地址替代,如果只想自己用,不需要给外人访问,这个方案最省心。
如果想让别人通过“yourname.com”访问你的服务,frp或自建ngrok是正路。 组网方案更适合自己手机连回家里。
域名绑定与DNS解析实操:别让A记录骗了你
你要绑定的域名,解析地址写的应该是VPS服务器的IP,而不是你家里的IP,这个逻辑捋顺了,后面全通。
- 场景还原:你在简米云买了个轻量服务器(公网IP假设是
2.3.4),域名也托管在简米云DNS,你在家里的群晖上跑了frp客户端,把群晖的5000端口映射到了VPS的端口。
12345
- 关键一步:DNS解析里增加一条
A记录,主机记录填nas,记录值填2.3.4,这样nas.yourdomain.com就指向了VPS。 - 再进一步:如果VPS上的frp服务端绑定了80端口,并且启用了HTTP代理,那客户端可以指定
custom_domains = nas.yourdomain.com,访客访问nas.yourdomain.com时,VPS会根据域名头判断该把流量转给哪条隧道,从而实现多域名共用一台VPS的80端口。
为什么你照抄教程还是打不开:排查三连
问题通常出在“VPS防火墙”和“frp服务端的端口绑定”这两处。
- VPS安全组:在云控制台放行
12345端口(TCP入方向),很多新手改了服务器内部防火墙,却忘了云平台的安全组规则,或者反之。 - frp服务端配置:
bindPort是隧道通讯端口(比如7000),vhostHTTPPort是HTTP流量入口(比如8080),如果你用域名访问,且没配置vhostHTTPPort: 80,那么你得在域名后加端口号,即nas.yourdomain.com:8080。 - 客户端配置文件:
remote_port(远程端口)和serverPort搞混,前者是你暴露在VPS上的最终端口,后者是连接隧道用的控制端口,填反了,frpc日志会报错,但打印的信息对小白不友好,需要逐行核对。
速度与延迟:穿过墙之后的体验优化
内网穿透好不好用,延迟取决于VPS机房到你家宽带的物理距离,速度取决于VPS的带宽上限,这是硬约束,协议优化只是锦上添花。
- 选机房:家里在华东,就选华东区域的VPS,用了酷番云的广州机房连家里电信网络,ping值可能只有5ms,但如果选了硅谷机房,350ms起步,操作NAS界面都能感到明显卡顿,这是物理规律,不是frp的锅。
- KCP加速:frp支持在客户端和服务端配置
transport.protocol = kcp,KCP牺牲少量流量换取更低延迟,在丢包严重的移动网络下效果显着,但要注意,UDP流量在某些运营商网络里可能被QoS,效果不一定稳。 - 带宽分配:国内绝大多数低价VPS的带宽是
3Mbps-5Mbps,这意味着穿透后看视频会缓冲,传大文件速度也受限。如果只是SSH管理或看看文件列表,完全够用;想流畅看高清视频,建议给VPS升配按流量计费。

多站点复用同一个穿透端口
一台VPS只有一个80端口,怎么让nas.yourdomain.com和blog.yourdomain.com同时走穿透?frp的HTTP代理支持按域名分流,你只需要在frpc.ini里写两个不同的代理名称:
[nas],type = http,custom_domains = nas.yourdomain.com,local_ip = 192.168.1.100,local_port = 5000[blog],type = http,custom_domains = blog.yourdomain.com,local_ip = 192.168.1.101,local_port = 8080
VPS上的frps收到请求后,看到HTTP头里是nas.yourdomain.com,就自动转发给对应的内网NAS;看到blog.yourdomain.com,就转发给你内网的博客服务器。这个功能非常实用,相当于用一台廉价VPS给整个内网做了个反向代理网关。
内网穿透域名备案与合规:你躲不开的现实
如果VPS在境内,域名绑定了穿透服务但没备案,80端口访问直接被拦截,这是行业共识,也是很多人的痛点。
- 备案路径:用这台VPS所在省份的身份证或企业资质,在云厂商控制台提交备案申请,整个过程大概需要几周,期间域名无法提供网页服务。
- 规避思路:改用非标准端口,比如
https://nas.yourdomain.com:8443。这样可以避开80/443的监管限制,不用备案也能跑,但浏览器会提示证书不匹配,需要自己导入证书或添加例外,如果只是临时调试,这是成本最低的方法。 - 无解情况:如果你用的是用海外VPS,那域名无需备案,但延迟和稳定性全看机房脸色,且国内访问有被墙的风险。
HTTPS证书该怎么配
frp自身不签发证书,你需要借助acme.sh脚本在VPS上申请Let’s Encrypt免费证书,申请需要域名已解析到VPS的A记录,并且80端口(或443)暂时空闲,证书申请成功后,把

fullchain.cer和yourdomain.key路径填到frps.ini的tls_cert_file和tls_key_file字段,重启frps即可,客户端侧,frpc.ini里对应代理加上host_header_rewrite = yourdomain.com,就能解决跨域和证书校验问题。
稳定为王:穿透服务挂了怎么办
把穿透进程做成系统服务,是基本操作,在VPS上,先编写/etc/systemd/system/frps.service包含ExecStart=/usr/local/bin/frps -c frps.ini,然后systemctl enable --now frps,内网机器同样操作,给frpc也设置开机自启。但自启不能解决意外崩溃,所以还要在客户端加一个守护脚本,每分钟检测frpc进程是否存在,不存在就拉起,可以用crontab实现,这是没有成本的保命手段。
作为主打穿透的域名方案,frp配合systemd绝大概率能让你一个月不用折腾第二次。 但如果你追求的是“永远在线”,建议给VPS加个监控报警,一旦隧道掉线,手机收到推送,你就能在朋友说“你网站挂了”之前自己修复。
Q&A:内网穿透域名相关问题
问:frp内网穿透域名怎么解析?
- 在DNS设置中,将域名的A记录指向VPS的公网IP,然后在frpc配置文件中,为对应该域名的代理设置
custom_domains为完整域名,如果使用的是HTTP类型代理,访客通过域名访问时,VPS的frps进程会将请求转发给内网客户端。
问:动态域名解析(DDNS)和内网穿透冲突吗?
- 不冲突,DDNS解决的是“家庭公网IP变了导致域名解析失效”的问题,前提是你有公网IP,内网穿透解决的是“压根没有公网IP”的问题,如果家宽是大内网IP,DDNS没有意义,老老实实用frp穿透。
问:为什么我穿透后的域名打开是VPS默认页面?
- 这说明流量已经到了VPS,但frps没有正确接管,检查
vhostHTTPPort设置是否为80,并确认frpc配置文件中代理的custom_domains填的是被访问的域名,且该域名没有在VPS的nginx或Apache中配置其他站点,排查优先级是:安全组放行端口、frps是否监听对应端口、frpc是否成功连接。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/677754.html


评论列表(1条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是端口部分,给了我很多新的思路。感谢分享这么好的内容!