使用ECS搭建Zerotier虚拟局域网

第一部分

作者目前就读于西安电子科技大学,计算机硕士一年级。其实大学期间就知道云服务器包括阿里云的云翼计划等,不过本科期间对云服务器没有什么需求就没有继续了解过。读研期间因为个人业余时间多了起来,而且通过云服务器拿到公网ip也可以做一些实验和其他便利自己的操作,就在知乎等地方对比了一下几个云服务器提供商的方案,最后选了阿里云来入门云服务器。

第二部分

使用场景

本地网络联机游戏
远程桌面
程序远程调试
远程文件传输等

前情提要

Zerotier作为一款开源异地虚拟局域网构建工具,已经被广泛关注和应用,相比蒲公英、花生壳等工具,ze ro tier免费、可加入节点多,数据传输安全,但有时两台都在内网的主机打通udp隧道较为困难,而且通常延迟较高,好在官网提供了解决方案,即使用一台接入公网的主机作为MOON节点,用于初始化打通两节点之间的隧道,使延迟可以从几百ms降至十几ms,故我选择了阿里云2核2g内存的ecs作为moon节点,十分有效。

ecs/MOON端

出于个人习惯,我选择ubuntu20.04作为操作系统
1.下载Zerotier
参考官网指南

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

2.启动zerotier服务

service zerotier-one start

3.加入zerotier网络

zerotier-cli join <your_network_id>

之后在web端控制台允许此节点接入网络
4.生成MOON节点
首先进入zerotier目录“/var/lib/zerotier-one”

cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public >> moon.json

然后修改moon.json

{
  ..
  {
    ..
    ”stableEndpoints”:[]
  }
  ..
}

添加ECS的公网ip地址

{
  ..
  {
    ..
    ”stableEndpoints”:[“<your_ip_addr>/9993”]
  }
  ..
}

保存并退出
5.生成签名文件

Zerotier-idtool genmoon moon.json

命令执行后,当前目录生成一个名为000000xxxxxxxxxx.moon的文件

其他主机/PLANET端

6.配置moon
将签名文件放在当前目录的子目录“moons.d”(首次需要新建目录)下,并拷贝该签名文件至所有需要配置moon节点的主机中,对于windows系统的节点,找到该路径“C://ProgramData/Zerotier/One/”,在此目录下新建moons.d文件夹,并放入签名文件。最后重启zerotier服务

Service zerotier-one restart

7.测试效果
使用命令:

Zerotier-cli peers

查看各节点状态(windows系统下zerotier-cli位于“C://Program Files(x86)/ZeroTier/One/”下),
出现为“MOON”的节点则配置成功,如果MOON节点对应为“—1–”,等待一段时间即可自动修改为ecs公网ip地址,可以通过分别ping moon节点的公网地址和虚拟局域网内网地址对比延迟来确定是否打通局域网。

第三部分

通过“高校学生在家实践”的活动还是学到了不少关于服务器的基本操作,对于一些没有实习过、没参与过什么项目的学生,这个活动确实可以让学生体验并了解一些实际开发环境,对我个人而言,通过有公网ip的主机搭建异地虚拟局域网让我的个主机之间通信延迟降到了极低,甚至可以媲美本地运行的程度,主机间文件传输也变得相当便利,而且云服务器还可以体验一些有趣的项目比如部署code-server,在浏览器端使用vscode。这里也算是给大家提供一个方案吧,当你希望将一些大型项目部署在远程,但云服务器性能不足以支撑起项目时,可以用云服务器作为跳板,组建网络,转发至网络内的高性能本地主机,祝大家都可以愉快玩耍,希望我这篇文章可以通过续期任务。

上一篇:全链路灰度这样做,新需求迭代上线也能放心干饭


下一篇:NgRx createSelector 工具函数的三个类型参数