“你在外面怎么访问家里的树莓派?”
“我用 FRP 做内网穿透,所有服务绑定域名,博客直接访问,SSH/VNC 秒连。”
继上一篇文章成功把 Hugo 博客部署到树莓派之后,我开始考虑一件事:
我不希望这个博客只是“局域网限定”,我希望 在任何地方都能通过自定义域名访问它,甚至还能远程登录家里的树莓派桌面或终端。
于是,内网穿透成了必选项。考虑到我有一台阿里云服务器,我最终选择了开源神器:
FRP:Fast Reverse Proxy,一款优秀的内网穿透工具。
这篇文章记录我如何用 FRP 打通公网访问:
- 🕸 博客(HTTP 服务)
- 🔐 SSH 远程登录
- 🖥️ VNC 远程桌面
📡 为什么不是花生壳、Ngrok?
我之前用过不少工具:
工具 | 优点 | 缺点 |
---|
花生壳 | 操作简单,图形界面 | 需要注册登录,带广告,带限速 |
Ngrok | 社区活跃,免费试用 | 免费域名随机分配,服务端不在国内 |
frp | 自托管灵活可控 | 需要一台公网服务器,自行维护服务端 |
我的需求很明确:
- 有固定的公网 VPS(阿里云)
- 需要绑定多个子域名(博客 / VNC / SSH)
- 追求稳定、私密、安全可控
所以我选择了 frp,并且 自己部署了服务端 frps
。
🏗️ 搭建 FRP 服务端(frps)@ 阿里云
在我的阿里云服务器上,我这样部署 frps
:
1
2
3
4
5
6
| # 下载 frp
wget https://github.com/fatedier/frp/releases/download/v0.63.0.0/frp_0.63.0_linux_amd64.tar.gz
tar -zxvf frp_0.63.0_linux_amd64.tar.gz
cd frp_0.63.0_linux_amd64
# 编辑 frps.toml
|
frps.toml
配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| bindAddr = "0.0.0.0"
bindPort = 7000
# console or real logFile path like ./frps.log
log.to = "./frps.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
log.disablePrintColor = false
detailedErrorsToClient = true
auth.method = "token"
auth.token = "{{ .Envs.FRP_TOKEN }}"
# Only allow frpc to bind ports you list. By default, there won't be any limit.
allowPorts = [
{ start = 2000, end = 3000 },
{ single = 80 },
{ single = 443 },
{ single = 3001 },
{ single = 3003 },
{ start = 4000, end = 50000 }
]
|
然后运行:
或者使用 systemd 启动为后台服务。
🧩 配置树莓派客户端(frpc)
在树莓派上,我配置了 frpc.toml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| serverAddr = "{{ .Envs.FRP_SERVER_ADDR }}"
serverPort = 7000
# console or real logFile path like ./frpc.log
log.to = "./frpc.log"
# trace, debug, info, warn, error
log.level = "debug"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false
auth.method = "token"
# auth token
auth.token = "{{ .Envs.FRP_TOKEN }}"
[[proxies]]
name = "http"
type = "tcp"
localPort = 80
remotePort = 80
[[proxies]]
name = "https"
type = "tcp"
localPort = 443
remotePort = 443
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
[[proxies]]
name = "vnc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5900
remotePort = 6001
|
解释:
- http:将树莓派的 HTTP 服务暴露到公网,通过
x.x.x.x:80
访问 - https:将树莓派的 HTTPS 服务暴露到公网,通过
x.x.x.x:443
访问 - ssh:树莓派 SSH,通过阿里云的
x.x.x.x:6000
访问 - vnc:VNC 桌面远程控制,通过
x.x.x.x:6001
访问
启动客户端:
或者使用 systemd 设置为自启动服务。
🌐 配置域名解析
我在 DNS 管理平台配置:
1
| www.xiyoufang.com → 阿里云公网IP(A记录)
|
博客部署在树莓派的nginx上,浏览器打开 http://www.xiyoufang.com
即可访问树莓派上的博客。
🛡️ SSH 和 VNC 如何访问?
SSH 登录:
VNC 登录:
VNC 客户端连接:
我个人使用 RealVNC 配合 Raspberry Pi Desktop,效果还不错。
✅ 总结一下
服务 | 访问方式 |
---|
博客 | http://www.xiyoufang.com |
SSH | ssh -p 6000 pi@公网IP |
VNC | 公网IP:6001 |
我现在无论身处何地,只要能上网,就能:
- 更新博客文章
- 登录树莓派调试服务
- 甚至远程控制树莓派桌面
它就像我在家里的“数字基地”,始终在线、可远程访问、全权掌控。
📌 下一篇预告
《我用 Netdata 监控家里的树莓派:温度、内存、Docker 全掌握》
既然树莓派承担了这么多任务,自然也要了解它的健康状况。下一篇,我将讲讲如何用 Netdata 打造一个可视化监控面板,监控运行状态、CPU 温度、资源占用等。
💬 最后
很多人会问:“为什么不直接用云服务?”
我想说,这种玩法并不是为了省钱或者炫技,而是一种乐趣、一种探索。
就像我现在,正从外面咖啡馆的笔记本上连接回家里路由器架上的树莓派,安静地写着这篇博客。
这就是我想要的“家庭云”。
下篇再见 👋