随着互联网技术的发展和互联网法律法规的逐渐完善,企业和家庭娱乐对网络的细分功能的需求愈发提升。在企业内网构建方面,虚拟局域网提供了一种灵活的网络划分方式,允许不同部门或团队之间实现独立的通信与资源共享,提高了网络的安全性和性能。此外,对于 peer-to-peer 游戏,将玩家连接在同一局域网中,可以提供更稳定和低延迟的游戏体验。通过虚拟局域网技术,企业和家庭用户能够更好地满足其对网络功能的特定需求,实现高效的网络管理和娱乐体验。下面介绍一种成熟稳定的工具,为企业和个人提供可靠的虚拟局域网解决方案。

TL;DR: 直接告诉我怎么做

1. 背景

1.1 Zerotier 是什么?

ZeroTier 是一种软件定义网络(SDN)解决方案,用于创建安全的虚拟网络。它允许用户通过互联网连接位于不同地理位置的设备,就像它们在同一个本地网络中一样。

1.2 与 Zerotier 类似的实现

Zerotier 可以替代过去的 Hamachi、Teamviewer、Radmin 等等软件的异地组网功能。基于以下原因,个人认为是眼下虚拟局域网的最佳解决方案。

  • 提供了更高的可扩展性和灵活性
  • 具有简单而强大的配置和管理功能
  • 该项目开源,并且仍在积极维护
  • 可以自建 planet 服务器,降低延迟并提升稳定性
  • 完全脱离对官方服务器的依赖

1.3 Zerotier 与 VPN 的关系

ZeroTier 是一种 L2 VPN 软件,与传统的 VPN 软件有所不同。它不采用客户端-服务器模型,而是使用 P2P 模型。节点之间通过 NAT 打洞尽可能地建立直接连接,只有在无法建立直接连接时才使用服务器进行中转。这种方式解决了在没有公网 IP 的情况下进行远程连接的困难。然而,这一优势在多层 NAT 网络下并不显著,详情请见下文。

1.4 困境

ZeroTier 在中国大陆的使用可能会受到一些限制和挑战。中国大陆的互联网基础设施中普遍存在多层 NAT 的问题。这使得在中国大陆的网络环境下,节点之间通过 NAT 打洞建立直接连接变得更加困难。当节点无法通过 NAT 打洞建立直接连接时,ZeroTier 会尝试通过中转服务器进行数据传输。然而,从中国大陆访问 ZeroTier 的中转服务器可能会受到限制,导致连接速度较慢或不稳定。

1.5 Zerotier 节点的三种角色

Zerotier 包含三种不同的角色:PLANET(行星服务器)、MOON(卫星服务器)和 LEAF(网络客户端)。

  • PLANET 是 Zerotier 的根服务器,它负责管理整个网络的连接和通信,并为其他角色提供服务。

  • MOON 是用户自行搭建的私有根服务器,作为卫星服务器存在。它在网络中充当代理和加速器的角色,提供更快速的连接和数据传输。

  • LEAF 是网络中的客户端,代表每个连接到网络的设备。它们可以是计算机、手机、服务器或其他设备。LEAF 连接到网络后,可以与其他 LEAF 节点进行通信和数据交换。

1.6 为什么要自建 planet 服务器

综合前文所述,由于国内 NAT 打洞的成功率较低,而作为备选方案的中心服务器(PLANET)全部位于海外,这导致了在中国大陆访问 Zerotier 时的稳定性较差且延迟较高,从而使得 Zerotier 在国内的可用性非常有限。为了解决这一问题,Zerotier 官方提供了一种解决方案,即允许用户自行建立自己的 PLANET 服务器,自行搭建网络。与自建 MOON 服务器相比,自建 PLANET 服务器更进一步地完全绕过对官方服务器的依赖。

这种方案符合 Zerotier 的开源许可协议,非商业目的所有用户均可免费使用该方案。

通过这种方法,通过该 Zerotier 网络的全部流量只经过我们自建的 planet 服务器,有以下几个重要好处:

  • 降低延迟,提高稳定性、可用性。
  • 数据不出海,所有数据只经过国内服务器,有助于用户更好地遵守数据安全的法律法规,保护数据的安全和隐私。
  • 突破官方服务器节点数量限制。
  • 即使官方服务器出现故障或关闭,本地建立的服务器仍然可以继续稳定运行,确保服务的持续性和可靠性。

2. 动手自建 Planet 服务器

2.1 实现思路

由于 PLANET 服务器的 IP 地址在构建阶段被固定在 Zerotier 二进制文件中,因此在部署 PLANET 服务器时,必须根据本机的 IP 地址进行自行编译构建。

这种必要性主要是因为 PLANET 服务器在网络中担当重要角色,需要确保与其他网络组件的通信和交互的正确性。通过根据本机的 IP 地址进行编译构建,可以确保 PLANET 服务器具有正确的网络配置,以适应本地网络环境。这样可以提高网络连接的稳定性和可靠性,并减少潜在的通信问题。

为了根据本机的 IP 地址进行编译构建 Zerotier,以下是具体的步骤和思路

下载 Zerotier 源代码:从 Zerotier 的官方代码仓库获取 Zerotier 的源代码。

修改相关文件:根据本机的 IP 地址,修改 Zerotier 源代码中与服务器 IP 地址相关的配置文件或代码段。这可能涉及修改网络配置、路由设置或其他相关参数。

编译 Zerotier:使用合适的编译工具,按照 Zerotier 的编译指南或文档中的说明对修改后的源代码进行编译。这将生成自定义的 Zerotier 二进制文件。

部署自定义的 PLANET 服务器:将编译生成的自定义 Zerotier 二进制文件部署到服务器上。

配置和启动服务器:根据 Zerotier 的文档或配置说明,设置和配置自定义的 PLANET 服务器。这可能包括指定 IP 地址、端口号、路由规则等。然后,启动服务器以确保其正常运行。

通过这些步骤,根据本机的 IP 地址自行编译构建 Zerotier 的 PLANET 服务器,可以确保服务器与本地网络环境相匹配,并提供稳定可靠的网络连接。这样,可以更好地满足特定需求,并提高 Zerotier 网络的性能和可用性。这些步骤可能需要一定的技术知识和经验。

2.2 硬件需求

可靠的网络服务总是依赖一个可靠的商业服务器,在这个项目上我们又要借助熟悉的云服务来实现公网 IP 提供的优质高可用性。经过实际测试,发现 Zerotier 在使用 CPU 和内存资源方面的消耗非常小,因此只需要关注服务器的带宽和流量费用。系统推荐使用 CentOS 或 Debian 操作系统。云服务提供商的选择就不做推荐了。

2.3 轮子

在互联网上并没有很多成熟的构建 Planet 服务器的方案,官方的支持文档也并不丰富。更有大量声称可以建立 Planet 服务器的方案实际上只是在自建 Moon 甚至是 Leaf 节点。

经过多次试错,所幸在 Github 上找到 xubiaolin 发布的项目,该项目能够在 Linux 系统上构建一个容纳了 Zerotier 服务器的 Docker 容器,具备出色的可用性和兼容性。经过实际测试,该方案可以正常运行作为一个 Planet 服务器,并提供了 ZTNUI 作为管理平台,具备非常高的易用性。

2.4 具体步骤

首先取得一台运行 linux 系统的,具有公网 IP 的服务器。

开放特定端口(通常被称为“安全组策略”或“防火墙”)以允许互联网连接。如果全部使用默认设置,你需要开放的端口有:22/tcp, 3443/tcp, 9994/tcp&udp. 如果你不想配置,可以暂时选择放通全部端口。

依次执行以下指令:(以 CentOS 为例)

[root@centos ~]# yum install git

[root@centos ~]# git clone https://github.com/fanmuchen/docker-zerotier-planet.git

[root@centos ~]# cd docker-zerotier-planet

[root@centos ~]# ./install-docker-on-centos.sh

[root@centos ~]# systemctl start docker

[root@centos ~]# ./deploy.sh

进行到最后一步时可能会因网络波动而失败,建议多尝试几次。

3. 结语

通过自建 Zerotier PLANET 服务器,可以提高在中国大陆的 Zerotier 使用体验。自建的服务器可以降低延迟、提高稳定性和可用性,并确保数据不出海,符合中国相关的数据安全法规。此外,自建服务器还可以突破官方服务器节点数量限制,并保证服务的持续性和可靠性。

在实现自建 PLANET 服务器时,需要根据本机的 IP 地址进行编译构建 Zerotier,并进行相关的配置和启动。这涉及一些技术知识和经验。在选择服务器时,需要考虑带宽和流量费用,并选择可靠的商业服务器提供商。

通过寻找合适的解决方案,例如使用 xubiaolin 在 Github 上发布的 Docker 容器项目,可以方便地构建和部署 Zerotier PLANET 服务器,并提供易用的管理平台。

自建 Zerotier PLANET 服务器是提高 Zerotier 在中国大陆可用性的一种有效方法,它可以提供更好的网络连接和服务体验。然而,使用任何网络工具时,都需要遵守当地的法律法规,并确保网络安全和数据隐私。