家庭内网穿透实战:手把手教你FRP结合阿里云反代实现域名访问
家庭内网穿透实战:手把手教你FRP结合阿里云反代实现域名访问
想在家里的NAS或树莓派上跑个服务,随时随地通过浏览器访问,却发现宽带没有公网IP?这大概是很多折腾党的痛点。
最近看到有不少朋友在讨论这个事儿,其实解决方案有很多,比如Cloudflare Tunnel、ZeroTier之类的。但如果你手里刚好有一台闲置的阿里云ECS,那么用 FRP 配合 Nginx反向代理 来实现,绝对是最稳、延迟最低的方案之一。
今天就把这套配置方案拆解一下,从原理到实操,手把手教你把家里的设备“搬”到公网上。
为什么选这套方案?
在开始之前,先明确一下这套架构的优势。
图1:整体架构原理流程,流量经公网VPS再穿透至内网。
- 稳定性高:阿里云ECS提供稳定的公网入口,不用担心P2P穿透的不稳定性。
- 速度快:流量直接走VPS带宽,尤其是当你买了CN2线路的VPS时,国内访问速度非常可观。
- HTTPS支持:通过在VPS上配置反向代理,可以很方便地申请SSL证书,全站加密。
- 多服务复用:一个域名、一个端口,可以代理家里好几个不同的服务(路由器后台、NAS、个人博客)。
架构原理
整个流程其实很简单,理解了这三步,配置起来就只是填空题了。
- 内网端(家里):运行FRP客户端,主动连接阿里云服务器,告诉服务器“我家有个192.168.1.5:8080的端口需要对外开放”。
- 公网端(阿里云):运行FRP服务端,监听特定端口(比如7000),接收客户端的连接请求,并将流量转发给内网。
- 反向代理层:为了让访问更优雅(不带端口号、支持HTTPS),我们在阿里云上再装个Nginx,监听80/443端口,把域名的请求转发给FRP的监听端口。
第一步:准备服务器环境
你需要一台阿里云ECS,系统推荐CentOS或Debian/Ubuntu。
首先,去FRP的GitHub Releases页面下载最新的版本。注意服务器架构(X86还是ARM),下载对应的压缩包。
# 举例下载Linux amd64版本
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz

*图2:Nginx反向代理与HTTPS加密通信配置原理。*
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64
解压后,我们会看到一堆文件,服务器端只需要关注 frps 和 frps.toml。
第二步:配置阿里云FRP服务端
新版FRP(0.52+)配置文件格式改成了TOML,这点要注意,网上很多老教程是ini格式的,直接照搬会报错。
编辑 frps.toml:
bindPort = 7000
# 如果你需要通过FRP自带的仪表盘查看状态,可以配置这个
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "这里填个强密码"
``
n配置很简单,主要就是设置一个 `bindPort`(用于和家里客户端建立连接的隧道口)和 `webServer`(管理面板,可选)。
**这里有个关键点:** 记得去阿里云控制台的**安全组**里,放行 `7000` 和 `7500` 端口!如果后面还要用Web服务,80和443也要放行。
启动服务端:
```bash
# 使用 nohup 后台运行
nohup ./frps -c frps.toml &
第三步:配置家里的FRP客户端
回到家里的电脑/NAS/树莓派上,同样下载FRP包,这次用的是 frpc 和 frpc.toml。
编辑 frpc.toml:
serverAddr = "你的阿里云公网IP"
serverPort = 7000
# 这里定义你要穿透的服务
[[proxies]]
name = "nas-web"
type = "tcp"
localIP = "192.168.1.5" # 你家里设备的内网IP
localPort = 5000 # 你家里设备的服务端口
remotePort = 6000 # 在阿里云上开启的端口,用于后续反代
保存后启动:
nohup ./frpc -c frpc.toml &
这时候,你可以尝试在浏览器访问 http://你的阿里云IP:6000。如果正常显示了你家里设备的内容,说明底层的隧道已经打通了!
第四步:Nginx反向代理 + 域名绑定
n虽然 IP:6000 能用,但既不美观也不安全。我们需要用域名,并且加上HTTPS。
1. 安装Nginx
debian/ubuntu系统:
apt update && apt install nginx -y
2. 配置反代文件
在 /etc/nginx/conf.d/ 下新建一个配置文件,比如 frp.conf:
server {
listen 80;
server_name home.yourdomain.com; # 换成你的域名
location / {
proxy_pass http://127.0.0.1:6000; # 转发给刚才FRP设置的remotePort
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 建议加上WebSocket支持,如果家里服务需要
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
3. 解析域名
去你的域名DNS管理后台,添加一条A记录:
- 主机记录:
home - 记录值:
你的阿里云公网IP
4. 申请SSL证书(推荐使用Certbot)
为了安全,必须上HTTPS。安装Certbot:
apt install certbot python3-certbot-nginx -y
直接自动配置:
certbot --nginx -d home.yourdomain.com
按提示输入邮箱,同意条款,Certbot会自动修改Nginx配置并续期证书。搞定后,你就可以通过 https://home.yourdomain.com 安全地访问家里的设备了。
常见问题与避坑指南
Q: 启动FRP成功,但无法访问连接数据库/路由器后台?
A: 某些服务(比如OpenWrt)在检测到访问IP变化时可能会拒绝连接,或者服务本身只监听了 127.0.0.1。请检查 frpc.toml 中的 localIP 是否指向正确的局域网IP,而不是localhost。
Q: 为什么我访问速度很慢? A: 这完全取决于你的阿里云服务器带宽。如果是1Mbps的小带宽家庭版ECS,传输大文件肯定会卡。建议至少升级到3Mbps以上,或者使用按流量计费的高带宽突发实例。
Q: 家里的设备重启后怎么办?
A: 记得把 frpc 设置为系统服务,开机自启。可以写个简单的systemd服务文件,确保断网重连后进程能自动拉起。
总结
n通过FRP穿透到阿里云,再由Nginx做反代,这是一套非常经典的内网穿透架构。它比Tailscale之类方案的优点在于无需下载客户端软件,只要有个浏览器就能访问,非常适合分享给别人使用。
如果你的数据隐私要求极高,建议在代理层再加一层HTTP Basic Auth或者仅允许自己的IP访问,安全第一嘛。
评论已关闭