相信每一个自建博客的人都有一个自己的服务器,笔者也是。再加上前段时间组建了nas,便准备通过服务器访问家里的一些设备。一些主流的方法如frp方法虽好,但是将家里的设备都暴露在公网上。有很大的不安全性。像zerotier这种组网方式,因为服务器在海外,所以体验并不是很好。

但是可以通过自建服务器解决这个问题。最近折腾完了,遂记录下来。
参考链接:

必要条件

如果你没有这些条件,就不用看下去了

  • 一台有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官方服务器的网络,请disconnectforget
win+R调出运行框,搜索services.msc并确定
运行
右键ZeroTier One,选择属性,找到其所在文件夹并打开。
属性
替换其中的planet文件为你自己在第一步编译出的planet文件。
文件

重启服务
重启服务

任务栏找到zerotier,右键join新网络:
加入新网络
输入之前提到的网络id
网络id
右键zerotier选择网络id进行链接。
这时候还不能操作,需要去后台http://你的服务器ip:3443 允许其联网。
就是把这个√打上
打勾
可以去CMD输入Zerotier-cli peers查看链接状态,DIRECT代表直连,RELAY代表中继,服务器网络一般的话中继会非常慢。
注意:这里就是我踩坑的地方,如果搭建成功,这里应该只有一个planet!!!!
CMD

安卓客户端

其他平台都是一样的操作,本质上就是更换planet文件,不再赘述。
这里提供第三方zerotier安卓客户端地址,可以更换planet:https://github.com/kaaass/ZerotierFix

内网互访

到此,自建zerotier服务器就结束了,但是针对一些特殊需求,比如我需要远程玩ps5,但是ps5本身不可能安装zerotier,怎么办呢。
这时候就可以用zerotier的路由功能来实现。

linux系统

正好我家有一台nas,就准备用它来实现了;

开启ip转发

  • 进入终端,输入vim /etc/sysctl.conf编辑sysctl.conf文件。
  • 增加代码:
    1
    2
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1
  • 输入sysctl -p加载内核参数

配置客户端路由

  1. 输入ifconfig,记录下物理网卡以及 ZeroTier 的虚拟网卡,这个根据你在后台看到的虚拟ip和你物理机的真实ip就可以找到。
  2. 将网卡名字导出为环境变量
    1
    2
    PHYSICAL_IFACE=<物理网卡>
    ZEROTIER_IFACE=<ZeroTier 虚拟网卡>
  3. 更新路由表
    1
    2
    3
    4
    iptables -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
  4. 持久化路由表
    1
    2
    mkdir -p /etc/sysconfig/
    sh -c "iptables-save > /etc/sysconfig/iptables"
  5. /etc/rc.local文件的末尾添加一行
    1
    /sbin/iptables-restore < /etc/sysconfig/iptables

配置 ZeroTier 路由规则

到我们的服务器后台,选择网络的路由选项。
路由

在添加新路由这里进行配置
添加新路由
其中目标是你内网的ip,比如你的家庭内网的路由器是192.168.1.1,那么你就填192.168.1.0/24,网关是你希望转发的那台设备加入zerotier网络时分配的ip。
路由

这时候,你应该就可以像连接内网一样用家里路由器的ip进行设备访问了。