半self-hosted ZeroTier虚拟局域网方案
虚拟局域网!跨地域访问!在现有的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
,但是不建议。
- 安装
g++
与node-gyp
,因为ztncui
需要它们进行密码散列。
g++
可通过包管理器安装,而对于 node-gyp
:
yarn global add node-gyp
-
克隆
ztncui
项目到机器上git clone https://github.com/key-networks/ztncui
-
安装项目所需依赖
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:
然后就完事了!