zerotier 专用根服务器
创建你自己的根服务器(亦称“月球”)
行星上的所有ZeroTier节点实际上都位于一个数据中心。这使得在任何地方直接连接设备变得很容易,但它的缺点是没有互联网连接就无法工作。网络连接也不一定完全可靠,有时出于安全原因,用户可能希望完全“air gap”互联网外的一组节点。
在1.2.0中,ZeroTier引入了添加用户自定义根服务器的功能。已有的数据中心是行星,用户定义的根服务器被称为月球。当节点“轨道”是月球时,它会将月球的根服务器添加到其(行星)根服务器中。绕月球运行的节点仍将使用行星根服务器,但如果它们看起来更快或没有其他东西可用,它们将使用月球的根服务器。
创建月球的第一步是部署一组根服务器。在大多数情况下,我们建议使用两个。这些是常规的ZeroTier节点,但总是打开并具有静态(物理)IP地址的节点。这些静态IP可以是全球互联网IP或只能在内部访问的物理内联网IP。在后一种情况下,你的月亮根在办公室外不起作用,但这无关紧要。漫游节点只会使用行星根服务器。
我们建议根服务器不要充当网络控制器、加入网络或执行任何其他重叠功能。他们需要良好的可靠网络连接,但在其他方面只需要很少的RAM、存储或CPU。根服务器可以是小型虚拟机、VPS或云实例,也可以是树莓派等小型设备。如果您将根服务器配置为虚拟机,请注意它们不会都驻留在同一个物理硬件上。这将违背建议两个的目的。
下一步是使用zerotier-idtool创建一个世界定义。您需要来自每个根服务器的theidentityidentity.public文件。选择一个根(无论哪个),然后运行zerotier-idtool initmoon <identity.public of one root> >>moon.json。这个zerotier-idtool命令将向您的世界定义的JSON版本输出到标准输出,因此我们将它重定向到moon.json。
检查此文件。它将包含以下内容:
1 | { |
世界ID在技术上是任意的,可以是任何随机的64位值。根据惯例,我们使用其中一个词根的地址。
世界定义的JSON文件包含secrets,因此将其保存在安全的地方很重要。signingKey_SECRET 将允许您将来自动更新世界定义。
现在添加其他根并定义它们的稳定端点。你最终会得到一些看起来像:
1 | { |
您使用的静态IP地址必须可以从您希望这些根服务的所有位置访问。如果您要将这些部署到物理位置使用,请使用内部IP。如果您希望它们在场外可用,请使用DMZ的公共IP或将它们托管在数据中心附近的云提供商处。提供简单静态直接IP寻址和双堆栈IPv4/IPv6支持的低成本云主机,如Digital Ocean、Vultr和Linode,是托管根的理想场所。在大多数情况下,这些提供商的最低价格案例就足够了。
第三步是使用zerotier-idtool genmoon moon.json生成实际的签名世界。在这种情况下,这将生成一个名为000000000000deadbeef00.moon的文件。这不包含密钥,但由JSON文件中的秘密签名。
现在转到您的根目录,创建(如果不存在)他们工作目录的子目录(通常在Linux上为/var/lib/zerotier-one),称为 moons.d,并在那里复制签名的 moon 文件。现在重新启动根,它们应该可以准备好了。
您可以通过以下两种方式之一将这些根添加到常规节点:将相同的世界定义文件放在它们的 moons.d 目录中或使用 zerotier-cli orbit 命令:zerotier-cli track deadbeef00 deadbeef00。第一个参数是世界 ID(我们可以通过删除两个前导零来缩短它),第二个参数是其任何根的地址。如果它在线且可访问,这将联系根并从中获取完整的世界定义。
一旦你“轨道”了月球,试试zerotier-cli listpeers。您应该看到您创建的根被列为MOON而不是LEAF。它们现在将用作替代根服务器。