ZeroTier & ztncui
环境
aliyun 2vC 2GiB 3Mbps, Debian bookworm 12.8
安装
ZeroTier
- 脚本安装
# https://www.zerotier.com/download/
$ curl -s https://install.zerotier.com | sudo bash
私有网络
zerotier 划分为 LEAF 和 PLANET 两种节点。LEAF 节点作为客端加入 PLANET 节点网络形成局域网络,要求 PLANET 节点拥有公网 IP 可以被访问。
安全组—开放服务端口 UDP 访问策略
安全组—开放服务端口 TCP 访问策略
/var/lib/zerotier-one/identity.* (身份标识)
$ cd /var/lib/zerotier-one
$ rm identity.*
$ zerotier-idtool generate identity.secret identity.public
$ systemctl restart zerotier-one.service
$ journalctl -u zerotier-one -f
- /var/lib/zerotier-one/local.conf(服务端口修改)
{
"settings": {
"primaryPort": 9993
}
}
var/lib/zerotier-one/planet(节点配置)
制作 plant 文件需要下载对应版本的源码,修改
attic/world/mkworld.cpp
文件并编译。 mkworld.cpp 中含有的 “Los Angeles”、“Miami”、“Tokyo”、“Amsterdam” 四个 PLANET 节点可以将其注释,之后根据其格式配置私有的 PLANET节点。
# 获取相同版本的源码
$ cd /opt
$ wget https://github.com/zerotier/ZeroTierOne/archive/refs/tags/1.14.2.tar.gz
$ tar -xzvf 1.14.2.tar.gz
$ cd ZeroTierOne-1.14.2/attic/world
$ cp mkworld.cpp mkworld.cpp.bak
# 编辑文件删除 “Miami”、“Tokyo”、“Amsterdam” 节点配置
# 替换 “Los Angeles” 节点配置
$ sed -i s#3a46f1bf30:0:76e66fab33e28549a62ee2064d1843273c2c300ba45c3f20bef02dbad225723bb59a9bb4b13535730961aeecf5a163ace477cceb0727025b99ac14a5166a09a3#$(cat /var/lib/zerotier-one/identity.public)#g mkworld.cpp
$ sed -i s#185.180.13.82#$(curl ifconfig.me)#g mkworld.cpp
$ sed -i s#roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c815::/9993"));#//roots.back().stableEndpoints.push_back(InetAddress("2a02:6ea0:c815::/9993"));#g mkworld.cpp
$ source ./build.sh
$ ./build.sh
$ ./mkworld
$ cp ./world.bin ./planet
# LEAF 节点,替换 planet 文件并重启服务
# Windows: `C:\ProgramData\ZeroTier\One\planet
# Linux: `/var/lib/zerotier-one/planet
$ systemctl restart zerotier-one.service
# 验证有 PLANET 节点的信息及ip 则配置成功
$ zerotier-cli peers
- 另一种不修改 planet 文件的方法
$ cd /var/lib/zerotier-one
$ zerotier-idtool initmoon identity.public >> moon.json
$ sed -i 's/"stableEndpoints": []/"stableEndpoints": ["ServerIP/9993"]/g' moon.json
$ zerotier-idtool genmoon moon.json
# 如果没有 moons.d 目录的话先创建
$ mv 000000*.moon moons.d
$ systemctl restart zerotier-one.service
# 验证
$ zerotier-one peers
# LEAF 节点,把 000000*.moon 文件拷贝 moons.d 目录下重启服务之后验证
# Windows: `C:\ProgramData\ZeroTier\One\moons.d
# Linux: `/var/lib/zerotier-one/moons.d
ztncui
ztncui - ZeroTier network controller user interface
https://key-networks.com/ztncui/
私有 PLANT 节点安装 “Key Networks” WEB 界面。
- 安装
$ cp /opt
$ curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb
$ apt install ./ztncui_0.8.14_amd64.deb
$ cd key-networks/ztncui
$ cat > .env << EOF
ZT_TOKEN=$(cat /var/lib/zerotier-one/authtoken.secret)
HTTPS_HOST=<your ip>
HTTPS_PORT=3443
NODE_ENV=production
EOF
$ chmod 400 .env
$ chown ztncui:ztncui .env
$ systemctl restart zntcui
访问
https://<your-ip>:3443
user: admin password: password若忘记密码
key-networks/ztncui/etc/default.passwd
有初始密码,修改 passwd 文件即可。
编译 ZeroTier
ZeroTier-one v1.14.2
- 编译工具安装
$ apt install pkg-config libssl-dev
rust 1.70.0
# 设置镜像
$ export RUSTUP_DIST_SERVER=https://mirrors.aliyun.com/rustup
$ export RUSTUP_UPDATE_ROOT=https://mirrors.aliyun.com/rustup/rustup
# rustup install
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ source ~/.bashrc
# rust 版本查看
$ rustc --version
# rust 切换版本
$ rustup default <version>
# 设置 cargo 库镜像
cat > ~/.cargo/config << EOF
[source.crates-io]
replace-with = 'aliyun'
[source.aliyun]
registry = "sparse+https://mirrors.aliyun.com/crates.io-index/"
EOF
- 源码获取
$ wget https://github.com/zerotier/ZeroTierOne/archive/refs/tags/1.14.2.tar.gz
- 编译
$ tar -zxvf 1.14.2.tar.gz
$ cd ZeroTierOne-1.14.2
$ make
$ make install
$ cp debian/zerotier-one.service /etc/systemd/system/
$ systemctl start zerotier-one
参考
ZeroTier/private deployment@Orangenschalen
GitHub - zerotier/ZeroTierOne: A Smart Ethernet Switch for Earth