虚拟局域网!跨地域访问!在现有的Mesh VPN中,ZeroTier是最用户友好且易于使用的,但它也有一个致命的问题:即使建立了自己的moon,连接不是很稳定。在本篇文章中,我们将自建ZeroTier网络控制器,尝试解决这一问题。

ZeroTier基础根服务器并不能自建,很遗憾。

2022/9/11注:解决不了,别试了。还是去看看Headscale这篇吧!

0x00 参考文档

https://docs.zerotier.com/self-hosting/network-controllers https://github.com/key-networks/ztncui
读者可以先阅读以上文档,以确保使用最新的项目特性。

0x01 准备搭建基础网络控制器

文章假设您已经在目标机器上安装了 zerotier-one 软件包。

根据官方文档,我们可以通过调用API的方式创建自己的网络,不过那样不够low code,这里我们直接来使用 ztncui 网页端帮助我们调用API来创建属于自己的网络。

0x02 一转搭建ztncui

ztncui 需要安装在与网络控制器相同的主机上

ztncui 是一个 node.js 项目,如果你之前没有接触过 node.js ,那么以下是简要的安装说明:
https://nodejs.org/en/download/package-manager/
建议安装LTS版本,以保证依赖正常安装。

注: ztncui 也提供主流发行版的二进制软件包与 docker 镜像,这里我们采用最追新也最方便自定义的方式。

又注:如果你想使用 docker 镜像,还想让服务器上的应用可以直接受益于 虚拟局域网,请额外注意docker network的配置。

之后我们安装 yarn 替代 npm 进行依赖管理,安装同样很简单:

sudo npm install --global yarn

虽然安装 node.js 时会提示使用系统包管理器安装 yarnpkg ,但是不建议。

  1. 安装 g++node-gyp ,因为 ztncui 需要它们进行密码散列。

g++ 可通过包管理器安装,而对于 node-gyp :

    yarn global add node-gyp
  1. 克隆 ztncui 项目到机器上

    git clone https://github.com/key-networks/ztncui

  2. 安装项目所需依赖

    cd ztncui/src
    yarn

然后耐心等待 4. 让 ztcnui 读取 zerotier 的认证token

为了不搞乱用户权限组关系,我们选择手动建立 .env 文件提供密钥:

    sudo cat /var/lib/zerotier-one/authtoken.secret # 显示authtoken
    tee .env
    ZT_TOKEN=#################### # 替换成刚刚的authtoken
    NODE_ENV=production
    HTTP_ALL_INTERFACES=yes
    按Ctrl+C 结束

我不用variable,因为我用语法不兼容的fish shell 5. 启动项目

推荐使用 pm2 保持项目运行:

    yarn global add pm2
    自行添加~/.yarn/bin至PATH
    pm2 startup # 按输出提示运行命令 使pm2守护下的项目开机自启
    pm2 start bin/www --name ztncui
    pm2 save

0x03 回到搭建网络控制器的正轨

现在我们可以登录 ztncui 控制面板了!

首先我们打开 http://<服务器IP>:3000 如果打不开可以检查你的防火墙设置。

选择Login,并输入默认账号:用户名 admin 密码 password ,并按照提示更改密码: 之后我们进入 Add Network 菜单,建立我们的新网络 页面会跳转到我们的新network,点击 Easy Setup 设定我们的IP Range: 然后就完事了!