先决条件

  1. 完成Zerotier网络的部署,每个Zerotier节点必须在控制台设置主机名

  2. 有一台稳定的机器用作DNS
    此处以Debian 11实例

  3. 启用Zerotier客户端的DNS解析(包括用作DNS的机器)

    1
    zerotier-cli set [YOUR_NETWORK_ID] allowDNS=1

    在Debian 11中,Zerotier的DNS设置可能无法生效
    笔者前前后后使用过同为Debian 11发行版的不同实例,Zerotier网络中的DNS设置都无法生效
    但如果只是单纯使用Debian 11机器作为DNS,其他设备依然可以通过该机器解析域名
    如果有同好能够找出原因,欢迎提供解决方案提交PR
    此外,建议在Android平台使用Zerotier-Fix作为客户端

申请API令牌

ZeroTier Central>Account中的API Access Tokens条目下,点击New Token。页面会要求你为该令牌命名。

点击Generate完成生成,网页会输出令牌。

将令牌写入/var/lib/zerotier-one/token,并授予zerotier-one用户组相应权限。

1
2
3
sudo bash -c "echo [YOUR_TOKEN] > /var/lib/zerotier-one/token"
chown zerotier-one:zerotier-one /var/lib/zerotier-one/token
chmod 600 /var/lib/zerotier-one/token

部署ZeroNSD

Releases · zerotier/zeronsd · GitHub下载最新版的ZeroNSD

1
2
wget -c https://github.com/zerotier/zeronsd/releases/download/v0.5.2/zeronsd_0.5.2_amd64.deb
sudo dpkg -i zeronsd_0.5.2_amd64.deb

设置你想要的顶级域名

1
sudo zeronsd supervise -t /var/lib/zerotier-one/token -w -d [TOP_LEVEL_DOMAIN] [YOUR_NETWORK_ID]

顶级域名建议设置得更具个性,最好不使用ICANN已有的顶级域名

笔者亲身经验,使用ICANN已有域名有概率会无意造成DNS污染

接着根据提示,启动服务

1
2
3
systemctl daemon-reload
systemctl enable zeronsd-8286ac0e470cc9e6
systemctl start zeronsd-8286ac0e470cc9e6

访问测试

目标主机名为hanekawa,设置的域名为moe,只要ping hanekawa.moe,能够得到目标回应,则表明DNS搭建成功。