zerotier DNS配置
测试版
此功能仍处于测试阶段。这很快就会集成到 ZeroTier 2.0 中,但目前,它是隔离的,以便我们快速迭代。
概念先决条件
当 ZeroTier 加入网络时,它会创建一个虚拟网络接口。
当ZeroTier加入多个网络时,将会有多个网络接口。
当 ZeroNSD 启动时,它会绑定到 ZeroTier 网络接口。
当 ZeroTier 连接到多个网络时,它需要多个 ZeroNSD,每个接口一个。
这意味着:
ZeroNSD 可以从运行它的节点进行访问。
ZeroNSD 可以从 ZeroTier 网络上的其他节点访问。
ZeroNSD 将与节点可能所在的其他网络隔离。
技术先决条件
本快速入门是使用两台机器编写的 - 一台位于 Digital Ocean 上的 Ubuntu 虚拟机,一台位于住宅 ISP 上的 macOS 笔记本电脑。要逐步进行操作,您需要配置等效的基础设施。如果您使用不同的平台,您应该能够以最少的努力弄清楚该怎么做。
创建 ZeroTier网络
您可以通过ZeroTier Central WebUI手动执行此操作,
安装ZeroTier
必须安装 ZeroTier 并将其加入到您打算提供 DNS 服务的网络。以下内容应该可以在大多数平台上通过 CLI 运行。Windows 用户可以从ZeroTier 下载页面下载 MSI 。对于本文档的其余部分,请将示例网络替换af78bf94364e2035
为您自己的网络 ID。
notroot@ubuntu:~$ curl -s https://install.zerotier.com | sudo bash
notroot@ubuntu:~$ sudo zerotier-cli join af78bf94364e2035
notroot@ubuntu:~$ sudo zerotier-cli set af78bf94364e2035 allowDNS=1
授权节点
通过单击ZeroTier Central WebUIMembers
部分 中的“Auth”按钮,向网络授权节点 。
从 ZeroTier Central
在开始之前,我们需要登录my.zerotier.com并在“帐户”部分下创建一个 API 令牌 。ZeroNSD 将使用此令牌读取网络成员,以便生成记录并更新 DNS 设置。
您需要将其存储在文件中以供 ZeroNSD 读取。
sudo bash -c "echo ZEROTIER_CENTRAL_TOKEN > /var/lib/zerotier-one/token"
sudo chown zerotier-one:zerotier-one /var/lib/zerotier-one/token
sudo chmod 600 /var/lib/zerotier-one/token
ZeroTier Systemd管理器
Zerotier-systemd-manager 发布了 rpm 和 deb 软件包,网址为https://github.com/zerotier/zerotier-systemd-manager/releases
wget https://github.com/zerotier/zerotier-systemd-manager/releases/download/v0.1.9/zerotier-systemd-manager_0.1.9_linux_amd64.deb
sudo dpkg -i zerotier-systemd-manager_0.1.9_linux_amd64.deb
最后,重新启动所有 ZeroTier 服务。
sudo systemctl daemon-reload
sudo systemctl restart zerotier-one
sudo systemctl enable zerotier-systemd-manager.timer
sudo systemctl start zerotier-systemd-manager.timer
安装ZeroNSD
ZeroNSD 只能在每个网络的一个节点上运行。DNS 的延迟确实很重要,因此请尝试将其放置在尽可能靠近客户端的位置。
包
ZeroNSD 发布了 rpm、deb 和 msi 软件包,可在此处获取。
下面未反映最新版本。转到上面的链接即可获取链接!
wget https://github.com/zerotier/zeronsd/releases/download/v0.1.7/zeronsd_0.1.7_amd64.deb
sudo dpkg -i zeronsd_0.1.7_amd64.deb
Cargo
如果我们没有适合您平台的软件包,您仍然可以使用 Cargo 安装它。
sudo /usr/bin/apt-get -y install net-tools librust-openssl-dev pkg-config cargo
sudo /usr/bin/cargo install zeronsd --root /usr/local
服务DNS
对于您想要为其提供 DNS 服务的每个网络,请执行以下操作(替换af78bf94364e2035
为您的网络 ID)
sudo zeronsd supervise -t /var/lib/zerotier-one/token -w -d beyond.corp af78bf94364e2035
sudo systemctl start zeronsd-af78bf94364e2035
sudo systemctl enable zeronsd-af78bf94364e2035
验证功能
您应该能够通过笔记本电脑的 DNS 名称(或任何前面的子域,因为我们设置了通配符标志)对笔记本电脑执行 ping 操作
notroot@ubuntu:~$ ping laptop.beyond.corp
PING laptop.beyond.corp (172.22.192.177) 56(84) bytes of data.
64 bytes from 172.22.192.177 (172.22.192.177): icmp_seq=1 ttl=64 time=50.1 ms
64 bytes from 172.22.192.177 (172.22.192.177): icmp_seq=2 ttl=64 time=49.5 ms
64 bytes from 172.22.192.177 (172.22.192.177): icmp_seq=3 ttl=64 time=48.6 ms
或者
notroot@ubuntu:~$ ping laptop.beyond.corp
PING travel.laptop.beyond.corp (172.22.192.177) 56(84) bytes of data.
64 bytes from 172.22.192.177 (172.22.192.177): icmp_seq=1 ttl=64 time=50.1 ms
64 bytes from 172.22.192.177 (172.22.192.177): icmp_seq=2 ttl=64 time=49.5 ms
64 bytes from 172.22.192.177 (172.22.192.177): icmp_seq=3 ttl=64 time=48.6 ms
如果linux上无法解析,可以将本机的节点ip加入/etc/resolv.conf中
nameserver 172.30.66.1
如果zeronsd无法安装可以改用docker模式安装
docker run --net host -it \
-v /var/lib/zerotier-one/authtoken.secret:/authtoken.secret \
-v /var/lib/zerotier-one/token:/token.txt \
zerotier/zeronsd start -s /authtoken.secret -t /token.txt \
35c19网络id
更新标志设置
要更改设置(例如 TLD),请执行以下操作(替换af78bf94364e2035
为您的网络 ID)
sudo zeronsd supervise -t /var/lib/zerotier-one/token -w -d beyond.corp af78bf94364e2035
sudo systemctl daemon-reload
sudo systemctl enable zeronsd-af78bf94364e2035
默认情况下,大多数 Linux 发行版没有开箱即用的每接口 DNS 解析。要在没有 的情况下测试 ZeroNSD 的 DNS 查询 zerotier-systemd-manager
,请找到 ZeroNSD 已将自身绑定到的 IP 地址,并显式地对其运行查询。
sudo lsof -i -n | grep ^zeronsd | grep UDP | awk '{ print $9 }' | cut -f1 -d:
172.22.245.70
直接用dig命令查询DNS服务器
Ubuntu 机器可以通过以下方式查询:
dig +short @172.22.245.70 zt-3513e8b98d.beyond.corp
172.22.245.70
dig +short @172.22.245.70 server.beyond.corp
172.22.245.70
macOS 笔记本电脑可以通过以下方式查询:
dig +short @172.22.245.70 zt-eff05def90.beyond.corp
172.22.245.70
dig +short @172.22.245.70 laptop.beyond.corp
172.22.192.177
添加一行/etc/hosts
并再次查询。
bash -c 'echo "1.2.3.4 test" >> /etc/hosts'
dig +short @172.22.245.70 test.beyond.corp
1.2.3.4
查询公共 DNS 上的域以验证失败
dig +short @172.22.245.70 example.com
93.184.216.34
macOS
macOS 用于dns-sd
DNS 解析。不幸的是,nslookup
、host
、 和dig
在 macOS 上被破坏。 ping
作品。
user@osx:~$ ping server.beyond.corp
PING server.beyond.corp (172.22.245.70): 56 data bytes
64 bytes from 172.22.245.70: icmp_seq=0 ttl=64 time=37.361 ms
64 bytes from 172.22.245.70: icmp_seq=1 ttl=64 time=38.129 ms
64 bytes from 172.22.245.70: icmp_seq=2 ttl=64 time=37.569 ms
要检查系统解析器设置,请使用:scutil --dns
。
Ubuntu 机器可以通过以下方式查询
dns-sd -G v4 server.beyond.corp
dns-sd -G v4 zt-3513e8b98d.beyond.corp
可以查询 macOS 机器
dns-sd -G v4 laptop.beyond.corp
dns-sd -G v4 zt-eff05def90.beyond.corp
客户端配置
在每个客户端上allowDNS都设置成true