1. 前言:一个极客的奇思妙想
你是否曾遇到过这些痛点:
- ☕ 咖啡厅办公,轻薄本跑个代码编译要半小时,如果能调用家里台式机的 32 核 CPU 该多好?
- 📱 地铁通勤,想用手机看家里 NAS 的 4K 电影,但公网 IP 太贵,内网穿透又不稳定?
- 🌏 异地工作,在深圳租房,老家有台闲置的高配主机吃灰,能不能远程用起来?
我们要讨论的是:
如何让城市里的笔记本,直接调用老家主机的计算资源
如何让手机,随时访问家里的所有设备和文件
如果能让办公室和家里的电脑,像在同一个局域网一样互访
等等,这些需求的本质都是一样的:突破物理距离的限制,让你的计算资源无处不在。
而我的方案更加极客:
我在贵州深山老家放了一台高性能主机——那里海拔高、气温低,夏天不用空调,电费便宜。父母帮忙照看,偶尔看看指示灯就行。而我在北上广深的任何地方,都能像用本地电脑一样,随时调用这台主机的算力。
训练 AI 模型?丢给家里的 GPU 跑。渲染视频?远程提交任务。数据处理?SSH 连上去一条命令搞定。
这不是科幻,这就是我们今天要实现的——用 ZeroTier 打造一个跨越千里的私有云网络。
2. 什么是 ZeroTier?
简单来说,ZeroTier 是一个虚拟局域网工具。它能让分散在世界各地的设备,就像连接在同一个路由器下一样相互通信。
传统方案的痛点:
- ❌ 动态公网IP?太贵
- ❌ 内网穿透?不稳定
- ❌ VPN?配置复杂
ZeroTier 的优势:
- ✅ 免费(个人使用)
- ✅ 配置简单(5分钟搞定)
- ✅ P2P直连(低延迟)
- ✅ 跨平台(Windows/Linux/macOS/Android/iOS)
3. 基础实战 - 连接老家和城市
场景描述
- 老家主机(Debian):贵州深山,24小时运行,电费便宜
- 运行了多个 KVM 虚拟机用于测试和服务
- 城市笔记本(Debian):工作地,需要调用老家主机算力
目标
让城市的笔记本能够:
- 直接 SSH 登录老家主机
- 访问老家主机上的 KVM 虚拟机
- 把大型计算任务丢给老家主机跑
步骤一:注册 ZeroTier 账号
- 访问 ZeroTier 官网
- 点击右上角 Sign Up 注册账号
- 登录后进入控制台
步骤二:创建网络
- 在控制台点击 Create A Network
- 系统会生成一个 16 位的 Network ID,例如:
a1b2c3d4e5f6g7h8 - 点击网络 ID 进入配置页面
- 记录下你的 Network ID(后面要用)
关键配置:
- Access Control:选择
Private(私有网络,需要手动授权设备) - IPv4 Auto-Assign:选择一个网段,比如
10.144.0.0/16
步骤三:安装 ZeroTier 客户端
老家主机(Debian)
1
2
3
4
5
6
7
8
# 安装 ZeroTier
curl -s https://install.zerotier.com | sudo bash
# 加入网络(替换为你的 Network ID)
sudo zerotier-cli join a1b2c3d4e5f6g7h8
# 查看状态
sudo zerotier-cli listnetworks
城市笔记本(Debian)
1
2
3
4
5
# 同样的安装命令
curl -s https://install.zerotier.com | sudo bash
# 加入同一个网络
sudo zerotier-cli join a1b2c3d4e5f6g7h8
步骤四:授权设备
回到 ZeroTier 控制台:
- 刷新页面,你会看到两台设备出现在 Members 列表
- 勾选每台设备前面的 Auth 复选框(授权加入网络)
- 可以给每台设备分配固定 IP:
- 老家主机:
10.144.0.100 - 城市笔记本:
10.144.1.100
- 老家主机:
步骤五:测试连接
在城市笔记本上:
1
2
3
4
5
6
7
8
# 查看 ZeroTier 网卡(名字类似 ztxxxxx)
ifconfig
# Ping 老家主机
ping 10.144.0.100
# SSH 登录老家主机
ssh username@10.144.0.100
这时候,已经成功建立了一个跨越千里的私有网络!
4. 进阶玩法 - 访问虚拟机
场景升级
老家主机上运行着多个 KVM 虚拟机:
- 虚拟机 1:
192.168.122.10- 开发测试环境 - 虚拟机 2:
192.168.122.20- 数据库服务 - 虚拟机 3:
192.168.122.30- AI 模型训练
问题:虚拟机的 IP 是内网地址,城市笔记本无法直接访问。
解决方案:配置路由转发,让老家主机成为虚拟机的”网关”。
配置老家主机(作为网关)
(1) 开启 IP 转发
1
2
3
4
5
6
# 临时开启
sudo sysctl -w net.ipv4.ip_forward=1
# 永久开启
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
(2) 配置防火墙规则
1
2
3
# 允许 ZeroTier 和虚拟机网桥之间转发
sudo iptables -I FORWARD 1 -i ztxxxxxx -o virbr0 -j ACCEPT
sudo iptables -I FORWARD 1 -i virbr0 -o ztxxxxxx -j ACCEPT
提示:
ztxxxxxx是你的 ZeroTier 网卡名,用ifconfig查看;virbr0是 KVM 默认网桥。
为了保证开机自启生效,我门使用 systemd 创建服务:
1
sudo vim /etc/systemd/system/zt-forward.service
内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Unit]
Description=ZeroTier Forwarding Rules
After=zerotier-one.service network-online.target
Wants=network-online.target
Requires=sys-subsystem-net-devices-ztuku5clkz.device
[Service]
Type=oneshot
RemainAfterExit=yes
Environment="ZT_IFACE=ztuku5clkz"
Environment="BR_IFACE=virbr0"
# 启动时添加规则
ExecStart=/usr/sbin/iptables -I FORWARD 1 -i ${ZT_IFACE} -o ${BR_IFACE} -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD 1 -i ${BR_IFACE} -o ${ZT_IFACE} -j ACCEPT
# 停止时删除规则
ExecStop=/bin/bash -c '/usr/sbin/iptables -D FORWARD -i ${ZT_IFACE} -o ${BR_IFACE} -j ACCEPT 2>/dev/null || true'
ExecStop=/bin/bash -c '/usr/sbin/iptables -D FORWARD -i ${BR_IFACE} -o ${ZT_IFACE} -j ACCEPT 2>/dev/null || true'
[Install]
WantedBy=multi-user.target
配置城市笔记本(添加路由)
方法一:手动添加路由(临时)
1
2
3
4
5
6
# 添加到虚拟机网段的路由
sudo ip route add 192.168.122.0/24 via 10.144.0.100 dev ztxxxxxx
# 测试
ping 192.168.122.10
ssh user@192.168.122.10
方法二:自动添加路由(开机启动)
创建 systemd 服务:
1
sudo nano /etc/systemd/system/zt-route.service
粘贴以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Unit]
Description=Add route to home VM network via ZeroTier
After=zerotier-one.service network-online.target
Wants=network-online.target
Requires=sys-subsystem-net-devices-ztuku5clkz.device
[Service]
Type=oneshot
Environment="ZT_INTERFACE=ztuku5clkz"
ExecStart=/bin/sh -c '\
for i in 1 2 3 4 5; do \
ip addr show ${ZT_INTERFACE} | grep -q "inet " && break; \
sleep 2; \
done; \
ip route add 192.168.122.0/24 via 10.144.0.100 dev ${ZT_INTERFACE} 2>/dev/null || true'
ExecStop=/bin/sh -c '\
ip route del 192.168.122.0/24 2>/dev/null || true'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启用服务:
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable zt-route.service
sudo systemctl start zt-route.service
验证效果
现在你可以在城市笔记本上:
1
2
3
4
5
6
7
8
# 直接访问老家的虚拟机
ssh user@192.168.122.10
# 连接虚拟机上的数据库
mysql -h 192.168.122.20 -u root -p
# 向虚拟机提交计算任务
scp large_dataset.tar.gz user@192.168.122.30:/data/
现在,你的老家主机现在就是一台”高性能的私有云服务器”!
5. 扩展应用 - 无限可能
场景 1:多地互联 - 打造分布式计算网络
假设你有三台主机:
- 老家主机(贵州):
10.144.1.100,虚拟机网段192.168.122.0/24 - 城市主机(深圳):
10.144.2.100,虚拟机网段192.168.123.0/24 - 朋友主机(北京):
10.144.3.100,虚拟机网段192.168.124.0/24
配置要点:
每台主机都:
- 开启 IP 转发
- 配置 iptables 转发规则
- 添加到其他主机虚拟机网段的路由
例如,老家主机添加路由:
1
2
3
4
5
# 到深圳虚拟机的路由
sudo ip route add 192.168.123.0/24 via 10.144.2.100 dev ztxxxxxx
# 到北京虚拟机的路由
sudo ip route add 192.168.124.0/24 via 10.144.3.100 dev ztxxxxxx
最终效果:三地的所有虚拟机可以互相访问,形成一个跨越千里的”超级局域网”。
场景 2:办公室 + 家庭网络 - 无缝办公
痛点:办公室电脑上的文件、开发环境无法在家访问。
解决方案:
- 办公室台式机:
10.144.10.100 - 家里笔记本:
10.144.11.100
通过 ZeroTier 连接后:
- 在家 SSH 到办公室电脑继续写代码
- 用 Samba/NFS 共享办公室的文件
- 远程使用办公室的高性能 GPU
不过要注意的是:你要确保你公司允许你使用 ZeroTier。
场景 3:云服务器 + 本地设备 - 混合云架构
架构设计:
- 云服务器(腾讯云/阿里云):
10.144.20.100 - 家里 NAS:
10.144.21.100 - 笔记本:
10.144.21.101
应用场景:
- 云服务器作为公网入口(跳板机)
- 家里 NAS 存储私密数据(不上传公有云)
- 笔记本随时随地访问家里的文件和服务
场景 4:移动办公 - 笔记本漫游
场景:
- 家里台式机:
10.144.30.100(固定运行) - 笔记本:
10.144.30.101(随身携带)
无论笔记本在哪里(咖啡厅、高铁、酒店),都能通过 ZeroTier 访问家里的台式机:
- 远程桌面
- 同步文件
- 调用家里的打印机、扫描仪
6. 实用技巧与优化
技巧 1:固定 IP 分配
在 ZeroTier 控制台给每台设备分配固定 IP,避免每次重启 IP 变化:
1
2
3
老家主机:10.144.0.100
城市笔记本:10.144.1.100
手机:10.144.1.101
另外,每个实际的物理局域网,只需要将一个设备加入 ZeroTier,其他设备通过该设备访问即可,减少管理复杂度。
技巧 2:监控网络状态
1
2
3
4
5
6
7
8
# 查看 ZeroTier 状态
sudo zerotier-cli status
# 查看连接的对等节点
sudo zerotier-cli listpeers
# 查看网络信息
sudo zerotier-cli listnetworks
7. 总结
解决方案回顾
通过 ZeroTier,我们实现了:
- 🏠 老家的主机成为你的私有云
- 💻 城市的笔记本随时调用远端算力
- 🌐 多地设备组成分布式网络
你不再受限于物理位置,计算资源可以跨越山川河流为你服务。这一切都是免费的,配置简单,维护成本几乎为零。
ZeroTier 常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装
curl -s https://install.zerotier.com | sudo bash
# 加入网络
sudo zerotier-cli join <NETWORK_ID>
# 离开网络
sudo zerotier-cli leave <NETWORK_ID>
# 查看状态
sudo zerotier-cli status
sudo zerotier-cli listnetworks
sudo zerotier-cli listpeers
# 启动/停止服务
sudo systemctl start zerotier-one
sudo systemctl stop zerotier-one
sudo systemctl restart zerotier-one
结语
注:本文基于作者实际使用需求和经验编写,所有配置均已验证可用。如有疑问或改进建议,欢迎交流讨论!
关键词:ZeroTier、异地组网、虚拟局域网、KVM虚拟机、私有云、远程访问、内网穿透、分布式网络
本文原创首发自公众号: 【极客开发者】,禁止转载。