Featured image of post 我让博客出现在公网,还能远程连进家里的桌面

我让博客出现在公网,还能远程连进家里的桌面

用 FRP 打通内网与外网,让树莓派在公网可见:博客、SSH、VNC 一网打尽

“你在外面怎么访问家里的树莓派?”
“我用 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 }
]

然后运行:

1
./frps -c ./frps.toml

或者使用 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 访问

启动客户端:

1
./frpc -c frpc.toml

或者使用 systemd 设置为自启动服务。


🌐 配置域名解析

我在 DNS 管理平台配置:

1
www.xiyoufang.com → 阿里云公网IP(A记录)

博客部署在树莓派的nginx上,浏览器打开 http://www.xiyoufang.com 即可访问树莓派上的博客。


🛡️ SSH 和 VNC 如何访问?

SSH 登录:

1
ssh pi@x.x.x.x -p 6000

VNC 登录:

VNC 客户端连接:

1
x.x.x.x:6001

我个人使用 RealVNC 配合 Raspberry Pi Desktop,效果还不错。


✅ 总结一下

服务访问方式
博客http://www.xiyoufang.com
SSHssh -p 6000 pi@公网IP
VNC公网IP:6001

我现在无论身处何地,只要能上网,就能:

  • 更新博客文章
  • 登录树莓派调试服务
  • 甚至远程控制树莓派桌面

它就像我在家里的“数字基地”,始终在线、可远程访问、全权掌控。


📌 下一篇预告

《我用 Netdata 监控家里的树莓派:温度、内存、Docker 全掌握》

既然树莓派承担了这么多任务,自然也要了解它的健康状况。下一篇,我将讲讲如何用 Netdata 打造一个可视化监控面板,监控运行状态、CPU 温度、资源占用等。


💬 最后

很多人会问:“为什么不直接用云服务?” 我想说,这种玩法并不是为了省钱或者炫技,而是一种乐趣、一种探索。

就像我现在,正从外面咖啡馆的笔记本上连接回家里路由器架上的树莓派,安静地写着这篇博客。

这就是我想要的“家庭云”。

下篇再见 👋

使用 Hugo 构建
主题 StackJimmy 设计