自建zerotier-one服务器,随时随地访问内网设备
相信每一个自建博客的人都有一个自己的服务器,笔者也是。再加上前段时间组建了nas,便准备通过服务器访问家里的一些设备。一些主流的方法如frp方法虽好,但是将家里的设备都暴露在公网上。有很大的不安全性。像zerotier这种组网方式,因为服务器在海外,所以体验并不是很好。
但是可以通过自建服务器解决这个问题。最近折腾完了,遂记录下来。
参考链接:
- https://github.com/xubiaolin/docker-zerotier-planet
- https://blog.csdn.net/zc_mk/article/details/137743742
必要条件
如果你没有这些条件,就不用看下去了
- 一台有ipv4公网的服务器
服务器操作
安装docker-zerotier-planet
刚开始我是不愿意使用docker的,但是中间踩了不少坑,最后搭建的也不是正确的planet节点,最终妥协使用了大佬编译好的docker镜像和一键脚本。最开始写这篇博客的时候用的ztncui是中文界面,但是后续改成的docker页面是英文界面,不过操作相同,就不重新截图了。
首先git下来脚本
1 | git clone https://github.com/xubiaolin/docker-zerotier-planet.git |
加速地址:
1 | git clone https://ghproxy.imoyuapp.win/https://github.com/xubiaolin/docker-zerotier-planet.git |
进入目录
1 | cd docker-zerotier-planet |
运行脚本
1 | ./deploy.sh |
根据提示设置端口并进入到你服务器的安全组设置开放对应端口号。根据提示设置公网ip后,会有一个下载连接,根据连接把planet
下载下来。
管理操作
这时候打开http://你的服务器ip:3443 即可进行管理,默认账号admin
,密码password
。
点击添加网络:
名字随便起
点击简易安装,名称后面的是网络id,记录一下,后面会用到。
点击生成网络地址并提交
至此,服务器操作结束。
客户端操作
windows客户端
以windows为例,其他操作系统大同小异,其核心为替换官方客户端的planet
为你自己编译的planet
。
首先下载zerotier客户端:https://www.zerotier.com/download/
如果你已经加入过zerotier官方服务器的网络,请disconnect
并forget
。win
+R
调出运行框,搜索services.msc
并确定
右键ZeroTier One
,选择属性
,找到其所在文件夹并打开。
替换其中的planet
文件为你自己在第一步编译出的planet
文件。
重启服务
任务栏找到zerotier,右键join新网络:
输入之前提到的网络id
右键zerotier选择网络id进行链接。
这时候还不能操作,需要去后台http://你的服务器ip:3443 允许其联网。
就是把这个√打上
可以去CMD输入Zerotier-cli peers
查看链接状态,DIRECT
代表直连,RELAY
代表中继,服务器网络一般的话中继会非常慢。
注意:这里就是我踩坑的地方,如果搭建成功,这里应该只有一个planet
!!!!
安卓客户端
其他平台都是一样的操作,本质上就是更换planet
文件,不再赘述。
这里提供第三方zerotier安卓客户端地址,可以更换planet:https://github.com/kaaass/ZerotierFix
内网互访
到此,自建zerotier服务器就结束了,但是针对一些特殊需求,比如我需要远程玩ps5,但是ps5本身不可能安装zerotier,怎么办呢。
这时候就可以用zerotier的路由功能来实现。
linux系统
正好我家有一台nas,就准备用它来实现了;
开启ip转发
- 进入终端,输入
vim /etc/sysctl.conf
编辑sysctl.conf文件。 - 增加代码:
1
2net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1 - 输入
sysctl -p
加载内核参数
配置客户端路由
- 输入
ifconfig
,记录下物理网卡以及 ZeroTier 的虚拟网卡,这个根据你在后台看到的虚拟ip和你物理机的真实ip就可以找到。 - 将网卡名字导出为环境变量
1
2PHYSICAL_IFACE=<物理网卡>
ZEROTIER_IFACE=<ZeroTier 虚拟网卡> - 更新路由表
1
2
3
4iptables -t nat -A POSTROUTING -o $PHYSICAL_IFACE -j MASQUERADE
iptables -A FORWARD -i $PHYSICAL_IFACE -o $ZEROTIER_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $ZEROTIER_IFACE -o $PHYSICAL_IFACE -j ACCEPT
iptables-save - 持久化路由表
1
2mkdir -p /etc/sysconfig/
sh -c "iptables-save > /etc/sysconfig/iptables" - 在
/etc/rc.local
文件的末尾添加一行1
/sbin/iptables-restore < /etc/sysconfig/iptables
配置 ZeroTier 路由规则
到我们的服务器后台,选择网络的路由选项。
在添加新路由这里进行配置
其中目标是你内网的ip,比如你的家庭内网的路由器是192.168.1.1
,那么你就填192.168.1.0/24
,网关是你希望转发的那台设备加入zerotier网络时分配的ip。
这时候,你应该就可以像连接内网一样用家里路由器的ip进行设备访问了。