ZeroTier 搭建虚拟局域网

什么是虚拟局域网(VLAN)

虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。

VLAN能做什么

  • 简化多个云服务器的管理:你可以用192.168.1.1来访问服务器1,用192.168.1.2来访问服务器2

  • 简化开发调试:通过VLAN实现的内网穿透可以实现用手机在不同的网络环境下调试开发机上的应用程序,可以在云服务器上配置nginx来将少部分请求分流到开发机上来直接进行生产调试

  • 在广域网内实现局域网联机:效果大概类似各类单机游戏对战平台,或者直接说hamachi吧

  • ……更多用途任你想象

ZeroTier是一个VLAN组建工具,与一般组建VLAN工具相比,它拥有这么几个优势

  • 配置简单:各平台下几乎一键即可配置完成

  • 可以固定自定义ip:不像hamachi一样随机分配地址,甚至可以使用233.233.233.233这样的广域网地址,方便记忆

  • 跨平台:几乎全平台的客户端,一些路由器也可以接入VLAN

官网https://www.zerotier.com/

创建网络

网络是一个16位ID,客户端通过网络ID来连接网络

打开https://my.zerotier.com/注册账号并登录(可能需要加速工具)

进入Networks页面选择Create a Network

图片

系统会生成16位网络ID

图片

点开它,可以对网络进行设置

图片

将网络设置为PUBLIC可以允许所有人加入,

PRIVATE在加入后需要审核

至此,你已经可以连接这个网络了

连接网络

连接网络无需登录ZeroTier账号

下载安装ZeroTier

图片

选择Join Network

图片

在弹出的窗口里输入16位网络ID后点击Join即可

图片

连接成功后客户端之间就可以互通了

图片

同时连接多个网络,软件会为每个网络创建一个独立的虚拟网卡

自建节点MOON

有时由于运营商的限制,客户端之间可能无法直接建立连接

这时只能由节点来转发流量

官方的节点叫做PLANET,位于国外,延迟很高

因此我们可以自建节点,自建的节点叫做MOON

搭建

这里使用Linux来演示节点的搭建,Windows节点的搭建过程大同小异

使用官方提供的安装脚本安装ZeroTier

curl -s https://install.zerotier.com | sudo bash

进入ZeroTier的工作目录,一般为/var/lib/zerotier-one

图片

生成moon.json

zerotier-idtool initmoon identity.public >> moon.json

编辑刚才生成的moon.json,在stableEndpoints里填入节点的ip和端口

推荐使用默认端口9993,如果使用自定义端口需要修改zerotier-one.port

图片

如果有防火墙需要将该udp端口放行

使用moon.json生成真正的.moon节点文件

zerotier-idtool genmoon moon.json

图片

生成.moon文件才是真正的节点文件,使用时不要修改文件名

图片

在/var/lib/zerotier-one中新建moons.d文件夹,把.moon文件放进去

图片

重启ZeroTier服务

systemctl restart zerotier-one

节点服务器配置完成

使用

进入ZeroTier的工作目录C:\ProgramData\ZeroTier\One

注意是ProgramData而不是Program Files(是一个隐藏的文件夹)

新建moons.d文件夹

图片

将之前生成的.moon文件拷贝进moons.d文件夹中

图片

重启ZeroTier服务后生效

图片

如果配置正确,在管理员权限的cmd中输入zerotier-cli peers可以看到你的MOON

图片

moons.d文件夹里可以存放多个节点,系统会自动选择最快的节点

Extra

各平台工作目录

  • Windows: C:\ProgramData\ZeroTier\One
  • Macintosh: /Library/Application Support/ZeroTier/One
  • Linux: /var/lib/zerotier-one
  • FreeBSD/OpenBSD: /var/db/zerotier-one

网络页面详解

在Advanced中可以设置ip地址池和路由图片

必须确保ip地址池中的ip都在路由里,否则会无法访问

下面可以设置是否分配IPv6地址
图片

勾选Enable Broadcast可以允许客户端发送广播

开启后可以直接用主机名代替ip地址

图片

当然,广播的用途远不止这个

连接的客户端可以在Members中看到
图片

命令行(Linux)客户端

Linux可以使用官方提供的安装脚本安装ZeroTier

curl -s https://install.zerotier.com | sudo bash

你会发现客户端和MOON服务器用的其实是同一个软件

加入网络

zerotier-cli join <网络ID>

图片

列出加入的网络

zerotier-cli listnetworks

图片

离开网络

zerotier-cli leave <网络ID>

使用zertier-cli -h可以查看所有命令

ZeroTier One version 1.4.6 build 0 (platform 1 arch 2)
Copyright (c) 2019 ZeroTier, Inc.
Licensed under the ZeroTier BSL 1.1 (see LICENSE.txt)
Usage: zerotier-cli [-switches] <command/path> [<args>]

Available switches:
-h                      - Display this help
-v                      - Show version
-j                      - Display full raw JSON output
-D<path>                - ZeroTier home path for parameter auto-detect
-p<port>                - HTTP port (default: auto)
-T<token>               - Authentication token (default: auto)

Available commands:
info                    - Display status info
listpeers               - List all peers
peers                   - List all peers (prettier)
listnetworks            - List all networks
join <network>          - Join a network
leave <network>         - Leave a network
set <network> <setting> - Set a network setting
get <network> <setting> - Get a network setting
listmoons               - List moons (federated root sets)
orbit <world ID> <seed> - Join a moon via any member root
deorbit <world ID>      - Leave a moon

Available settings:
Settings to use with [get/set] may include property names from 
the JSON output of "zerotier-cli -j listnetworks". Additionally, 
(ip, ip4, ip6, ip6plane, and ip6prefix can be used). For instance:
zerotier-cli get <nwid> ip6plane will return the 6PLANE address
assigned to this node.

Windows也可以在管理员权限的cmd中使用这些命令

MOON间互通

默认情况下,只有连接了同一个节点的客户端之间才能互相通讯

我们可以将多个.moon文件放在MOON的moons.d文件夹中来让这些节点互通

图片

局限性

软件在客户端之间能直连的情况下不会使用moon节点进行中转

这样的好处是速度更快,但是也同时带来了一些问题

有时候客户端之间直连会出现丢包的情况,而ZeroTier认为你们俩能直连,于是不走中转

据说在未来的2.0版本中会加入强制中转

相关推荐

发表评论

路人甲

网友评论(0)