跨出边界
发布于 2024-01-10 / 212 阅读 / 0 评论 / 0 点赞

zerotier DNS配置

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-sdDNS 解析。不幸的是,nslookuphost、 和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


评论