你是否曾经遇到DNS问题,而最后的答案总是"这一定是DNS问题"?ZeroNSD是专为ZeroTier用户设计的DNS服务器,它可以帮助你解决与ZeroTier网络相关的DNS查询问题。本文将引导你快速入门使用ZeroNSD,以便在ZeroTier网络上提供高效的DNS服务。
简介
ZeroNSD是一个专为ZeroTier用户设计的DNS服务器,它允许你为ZeroTier网络提供定制的DNS解析服务。通过ZeroNSD,你可以实现以下目标:
- 为ZeroTier网络提供高性能的DNS解析服务。
- 自定义DNS记录以满足你的需求。
- 通过ZeroTier网络轻松访问DNS服务器。
请注意,ZeroNSD目前仍处于Beta测试阶段,但它已经可以在你的ZeroTier网络上提供可靠的DNS解析服务。
先决条件
在开始使用ZeroNSD之前,请确保你已经满足以下先决条件:
概念上的先决条件
- 当ZeroTier加入一个网络时,它会创建一个虚拟网络接口。
- 当ZeroTier加入多个网络时,将会存在多个网络接口。
- 当ZeroNSD启动时,它会绑定到一个ZeroTier网络接口。
- 当ZeroTier加入多个网络时,需要多个ZeroNSD实例,每个网络接口对应一个实例。
这意味着:
- ZeroNSD将从运行它的节点访问。
- ZeroNSD将从ZeroTier网络上的其他节点访问。
- ZeroNSD将与节点可能连接的其他网络隔离开来。
技术上的先决条件
本快速入门使用了两台机器 - 一个是在Digital Ocean上的Ubuntu虚拟机,另一个是在住宅ISP上的OSX笔记本电脑。为了一步一步跟随本文,你需要提供类似的基础设施。如果你使用不同的平台,你应该能够以最少的努力弄清楚应该怎么做。
步骤
创建一个ZeroTier网络
首先,你需要手动通过ZeroTier Central WebUI创建一个ZeroTier网络。
- 登录ZeroTier Central WebUI。
- 创建一个新的网络。
安装ZeroTier
接下来,你需要安装ZeroTier并将其加入你打算提供DNS服务的网络中。以下是在大多数平台的CLI上执行的命令。Windows用户可以从ZeroTier下载页面下载MSI安装程序。在本文的其余部分,请将示例网络ID“af78bf94364e2035”替换为你自己的网络ID。
在Ubuntu上执行以下命令:
$ curl -s https://install.zerotier.com | sudo bash
$ sudo zerotier-cli join af78bf94364e2035
$ sudo zerotier-cli set af78bf94364e2035 allowDNS=1
授权节点
在ZeroTier Central WebUI的成员部分,通过点击“Auth”按钮,将节点授权加入网络。
获取ZeroTier Central的API令牌
在开始之前,我们需要登录到my.zerotier.com并在“帐户”部分创建一个API令牌。ZeroNSD将使用此令牌读取网络成员以生成记录,并更新DNS设置。
执行以下命令将API令牌存储到文件中,以便ZeroNSD读取:
$ sudo bash -c "echo YOUR_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 Manager
ZeroTier Systemd Manager发布了rpm和deb软件包,可以在这里下载。
下载并安装ZeroTier Systemd Manager:
$ 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 YOUR_DOMAIN af78bf943
64e2035
$ sudo systemctl start zeronsd-af78bf94364e2035
$ sudo systemctl enable zeronsd-af78bf94364e2035
验证功能
你应该能够通过DNS名称ping到笔记本电脑(或任何前置子域名,因为我们设置了通配符标志):
$ ping laptop.YOUR_DOMAIN
PING laptop.YOUR_DOMAIN (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
或者:
$ ping travel.laptop.YOUR_DOMAIN
PING travel.laptop.YOUR_DOMAIN (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
更新标志设置
如果要更改设置(例如TLD),请执行以下操作(将“af78bf94364e2035”替换为你的网络ID):
$ sudo zeronsd supervise -t /var/lib/zerotier-one/token -w -d YOUR_DOMAIN af78bf94364e2035
$ sudo systemctl daemon-reload
$ sudo systemctl enable zeronsd-af78bf94364e2035
测试DNS查询
要在没有zerotier-systemd-manager的情况下测试与ZeroNSD的DNS查询,请找到ZeroNSD绑定的IP地址,并使用dig命令明确对其进行查询。执行以下命令:
$ 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.YOUR_DOMAIN
172.22.245.70
$ dig +short @172.22.245.70 server.YOUR_DOMAIN
172.22.245.70
对OSX笔记本电脑执行:
$ dig +short @172.22.245.70 zt-eff05def90.YOUR_DOMAIN
172.22.245.70
$ dig +short @172.22.245.70 laptop.YOUR_DOMAIN
172.22.192.177
添加到/etc/hosts并再次查询
如果要添加自定义DNS记录,请执行以下操作:
$ sudo bash -c 'echo "1.2.3.4 test" >> /etc/hosts'
$ dig +short @172.22.245.70 test.YOUR_DOMAIN
1.2.3.4
验证通向公共DNS的查询
为了验证失败的情况下,查询会落到公共DNS服务器,执行以下命令:
$ dig +short @172.22.245.70 example.com
93.184.216.34
附加信息
OSX上的DNS解析
在OSX上,DNS解析使用dns-sd。遗憾的是,nslookup、host和dig在OSX上可能无法正常工作,但ping可以。
$ ping server.YOUR_DOMAIN
PING server.YOUR_DOMAIN (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.YOUR_DOMAIN
$ dns-sd -G v4 zt-3513e8b98d.YOUR_DOMAIN
对于OSX机器,可以执行以下查询:
$ dns-sd -G v4 laptop.YOUR_DOMAIN
$ dns-sd -G v4 zt-eff05def90.YOUR_DOMAIN
Windows
如果你是Windows用户,请尝试使用默认设置。如果有任何问题,请提供反馈或提交拉取请求以帮助改进ZeroNSD在Windows上的兼容性。
提供非ZeroTier记录
注意: 以下部分主要面向希望充分利用zeronsd的服务的高级用户。
zeronsd还将在两种情况下提供非ZeroTier记录:
-
在TLD不匹配时,它将转发/etc/resolv.conf中的名称服务器。此行为类似于Linux上常用的DNS服务器dnsmasq。
-
为了提供自定义记录,你可以使用-f标志和一个hosts格式的文件,它将在提供的TLD下提供来自该文件的记录,与ZeroTier节点合并。以下是示例。
注意: 如果按照上述步骤进行了操作,请在继续之前执行以下命令以停止ZeroNSD的服务和监督:
$ systemctl stop zeronsd-<network id>
$ zeronsd unsupervise <network id>
创建一个名为hosts的文件,将以下内容放入其中:
1.1.1.1 cloudflare-dns
然后,我们将只使用zeronsd的start子命令启动一个临时服务器。这将在前台运行,因此请在新终端中运行或使用&
运行。
$ zeronsd start -t
/var/lib/zerotier-one/token -f ./hosts -d YOUR_DOMAIN <network id>
最后,我们可以查询cloudflare-dns.YOUR_DOMAIN以查找CloudFlare的DNS服务器,速度非常快!
$ host cloudflare-dns.YOUR_DOMAIN 1.2.3.4
cloudflare-dns.YOUR_DOMAIN has address 1.1.1.1
结论
使用ZeroNSD,你可以为你的ZeroTier网络提供高性能的DNS解析服务,并根据需要自定义DNS记录。这可以帮助你更好地管理你的网络,提高性能,减少DNS查询的延迟,并提供更好的用户体验。
如果你是ZeroTier用户,ZeroNSD绝对值得一试。通过按照本指南的步骤进行操作,你可以轻松地将ZeroNSD集成到你的网络中,并提供可靠的DNS解析服务。