22 个不稳定版本 (4 个破坏性更新)
0.5.0 | 2022年5月14日 |
---|---|
0.4.0 | 2022年3月30日 |
0.2.4 | 2021年8月28日 |
0.2.3 | 2021年7月28日 |
#1896 in 网络编程
120KB
2.5K SLoC
ZeroNS:围绕 ZeroTier Central API 的命名服务
ZeroNS 提供了 ZeroTier Central 配置的 网络 中的名称;一旦提供了具有 IPv4 功能的网络,它
- 将监听连接到该网络的本地接口——您将为每个 ZeroTier 网络启动一个 ZeroNS。
- 提供通用的 DNS 服务,通过将所有查询转发到不匹配 TLD 的
/etc/resolv.conf
解析器,类似于dnsmasq
。 - 告诉中央将所有具有“管理 DNS”设置开启的客户端指向它进行解析。
- 提供 UDP、TCP 和 DNS-over-TLS 支持(如果配置了证书)。
- 最后,设置提供的 TLD(默认为
.home.arpa
,由 IANA 推荐),以及配置A
(IPv4)和AAAA
(IPv6)记录- 成员 ID:
zt-<memberid>.<tld>
将解析为它们的 IPv4 和 IPv6 地址。 - 名称:如果名称与 DNS 名称兼容,则将它们转换为这样的形式:到
<name>.<tld>
。- 请注意,可能存在冲突,并且防止冲突的责任在于管理员。
- 此外,还包括成员的 PTR 记录,除了 6plane 之外的所有场景。
- 通配符一切模式:此模式(通过传递
-w
标志启用)为 TLD 下的所有名称启用通配符;例如my-site.zt-<memberid>.<tld>
将解析为成员的 IP,命名主机以相同方式工作。
- 成员 ID:
安装
在继续之前,请记住 zeronsd 是 测试版软件。话虽如此,如果您想快速开始使用 zeronsd,请点击此处获取用户友好的指南!
软件包
- Linux/Windows:发布版包含 Linux 的
*.deb
、*.rpm
和 Windows 的 MSI 格式的软件包。注意:Windows MSI 将为端口 53 安装防火墙例外,以便 zeronsd 可以通信。- Arch Linux 软件包由 @devvick 提供!
- Mac OS X:
brew tap zerotier/homebrew-tap && brew install zerotier/homebrew-tap/zeronsd
- Docker:
docker pull zerotier/zeronsd
(有关 Docker 的更多信息,请参阅下文)
其他方法
从 Cargo 获取发布版
请先获取一个可工作的 rust 环境。
cargo install zeronsd
从 Git(通过 Cargo)
cargo install --git https://github.com/zerotier/zeronsd --branch main
Docker
在存储库中存在一个 Dockerfile
,您可以使用它来构建镜像,而不是我们的一些 官方镜像。
有一些控制行为的构建参数
IS_LOCAL
:如果设置,则使用本地源代码树,并尝试获取。VERSION
:这是要获取的分支或标签。IS_TAG
:如果非零,告诉 cargo 获取标签而不是分支。
示例
docker build . # builds latest master
docker build --build-arg VERSION=somebranch # builds branch `somebranch`
docker build --build-arg IS_TAG=1 --build-arg VERSION=v0.1.0 # builds version 0.1.0 from tag v0.1.0
构建完成后,镜像会自动运行 zeronsd
。默认子命令是 help
。
Docker(alpine 版本)
请参阅 Dockerfile.alpine。
用法
必须在环境(或提供指向包含此值的文件的 -t
标志)中设置 ZEROTIER_CENTRAL_TOKEN
。您必须能够管理 ZeroTier 网络,才能使用 zeronsd
。此外,作为 root
运行是必需的,因为 许多客户端解析器仅在端口 53 上工作。您的 zeronsd
实例将监听 udp
和 tcp
,端口 53
。
裸命令行
提示:运行 sudo
?通过传递 -E
标志来导入您当前 shell 的环境,使其更容易添加 ZEROTIER_CENTRAL_TOKEN
,或使用 -t
标志来完全避免环境。
zeronsd start <network id>
配置
zeronsd 0.3 版本开始,通过 -c
标志接收配置文件,该标志与所有命令行选项相关联。 --config-type
对应配置文件的格式:默认为 yaml
,也支持 json
和 toml
。
配置指令如下
- domain: (字符串) 为您的记录设置顶级域名(TLD);默认为
home.arpa
。 - log_level: (字符串) 调整使用的日志级别。默认为
info
,但提供[off, trace, debug, error, warn, info]
选项。请注意,在较低的日志级别下,可能会有大量输出! - hosts: (字符串) 将解析
/etc/hosts
格式的文件并将其追加到您的记录中。 - secret: (字符串)
authtoken.secret
文件的路径,该文件是本地主机与 ZeroTier 通信所需的。您可以使用此参数提供此文件,但它在包括 Linux、OS X 和 Windows 在内的多个平台上自动检测。 - token: (字符串) 包含您的 ZeroTier Central 令牌 的文件的路径。
- wildcard: (布尔值) 启用通配符模式,所有成员名称都将获得一个如下格式的通配符:
*.<name>.<tld>
;它指向成员的 IP 地址。
作为服务运行
目前,此行为仅支持 Linux 和 Mac OS X;我们将接受其他平台上的补丁。
使用 zeronsd supervise
和 zeronsd unsupervise
命令可以操作与您的网络相关的 systemd 单元文件。对于 supervise
的情况,只需传递您通常传递给 start
的参数,它将根据这些参数生成一个单元。
示例
# to enable
zeronsd supervise -t ~/.token -f /etc/hosts -d mydomain 36579ad8f6a82ad3
# generates systemd unit file named /lib/systemd/system/zeronsd-36579ad8f6a82ad3.service
systemctl daemon-reload
systemctl enable zeronsd-36579ad8f6a82ad3.service && systemctl start zeronsd-36579ad8f6a82ad3.service
# to disable
systemctl disable zeronsd-36579ad8f6a82ad3.service && systemctl stop zeronsd-36579ad8f6a82ad3.service
zeronsd unsupervise 36579ad8f6a82ad3
systemctl daemon-reload
日志记录
根据 env_logger 规范,设置 ZERONSD_LOG
或 RUST_LOG
为各种日志级别或其他参数。
Docker
在 docker 中运行稍微复杂一些。您必须能够拥有一个可以导入(加入网络)的网络接口,并且必须能够访问主机上的 localhost:9999
。目前,为了简洁起见,我们建议使用 --net=host
运行,直到我们有更多时间调查一个可能更安全的解决方案。
您还需要挂载您的 authtoken.secret
文件,这是我们用来与 zerotier-one
通信的。
docker run --net host -it \
-v /var/lib/zerotier-one/authtoken.secret:/authtoken.secret \
-v <token file>:/token.txt \
zeronsd:alpine start -s /authtoken.secret -t /token.txt \
<network id>
其他注意事项
您必须已经加入了一个网络,并且显然,zerotier-one
应该正在运行!
它应该在与您的 zerotier-one
实例通信后打印一些诊断信息,以确定要监听的 IP 地址。之后,它应该与中央 API 进行通信并自动设置其他一切。
start
和 supervise
子命令的标志
-d <tld>
将为您的记录设置 TLD;默认为home.arpa
。-f <hosts 文件>
将解析/etc/hosts
格式的文件并将其追加到您的记录中。-s <秘密文件>
指向authtoken.secret
的路径,这是在与本地主机的 ZeroTier 通信时所需的。您可以通过此参数提供此文件,但它在包括 Linux、OS X 和 Windows 在内的多个平台上自动检测。-t <中心令牌文件>
指向包含您的 ZeroTier Central 令牌 的文件。-w
启用通配符模式,其中所有成员名称都获得以下格式的通配符:*.<名称>.<顶级域名>
;这指向成员的 IP 地址。-v
启用详细日志。重复使用以增加详细程度。-V
打印版本。
生存时间(TTL)
当前记录具有 60 秒的生存时间,并通过 API 每 30 秒刷新一次 Central 的记录。我觉得这比让超时发生更安全。
每个接口的 DNS 解析
OS X 和 Windows 用户默认获得此功能,因此不需要它。请注意,但在此刻,PTR 解析在这两个平台上都不能正确工作。这是 ZeroTier 的一个缺陷,应该很快得到纠正。
强烈建议 Linux 用户使用 systemd-networkd
和 systemd-resolved
来获取可以隔离到您想要使用的域的每个接口解析器。如果您想尝试一些可以帮助您快速开始的东西,请查看 zerotier-systemd-manager 存储库。
BSD 系统仍需要一点工作;如果我们了解您选择的 BSD 的环境,我们可以真正使用您的帮助来完成这项工作。如果您对此感兴趣,请设置一个问题。
致谢
ZeroNS 对 trust-dns 工具包要求很高,我个人非常感激这样一个库套件的存在。它使我的工作变得非常简单。
许可证
作者
Erik Hollensbe [email protected]
依赖关系
~20–36MB
~586K SLoC