使用Zerotier可以方便的将处于不同层级内网中的设备整合到一个VPN中实现互相连接 (比如家里的电脑和学校的电脑都能上网, 但是家里的电脑无法直接连接学校的电脑), 但是它有两个局限性: 1. 配置网络的时候可能需要翻墙; 2. 只有各个设备的网络都支持IPv6的情况下才能够实现跨内网的点对点连接, 一旦有设备没有IPv6网络, 通过官方的服务器 (Zerotier中称为Planet, 部署在国外) 中继大概率无法连接.
如果自己有拥有公网IPv4 IP的服务器, 可以自己设置中继服务器 (Zerotier中称为Moon) 从而实现各个IPv4内网设备之间的互联.
配置Zerotier
首先需要再Zerotier的网站控制台https://my.zerotier.com/注册账号、创建VPN网络, 获取16位的网络ID, 选择网络自动分配的IP地址段, 并将网络设置为私人网络.
然后在各个入网设备 (包括Moon服务器) 中安装Zerotier. 对于GNU/Linux系统, 可以使用命令sudo zerotier-cli join 16位网络ID来加入网络, 使用sudo zerotier-one -d来启动Zerotier, sudo zerotier-cli info来查找10位设备ID; 对于Windows系统, 启动Zerotier后会在任务栏右下角出现Zerotier图标, 在它的右键菜单中找到设备ID, 并且找到对应选项填入网络ID即可.
然后回到Zerotier的网站控制台, 在Members里面找到设备ID, 修改其信息, 配置其IP、别名和勾上”Authorized”. 如果找不到设备ID, 可以手动添加.
理论上这样操作后, VPN网络中的IPv6设备之间可以互相访问了.
可以在https://test-ipv6.com/检测自己设备是否拥有IPv6连接.
配置Moon服务器
首先确认Moon服务器有公网IP且能够被所有设备直接访问到, 通过上述操作在Moon服务器中安装Zerotier并且加入自己的VPN网络, 记录Moon服务器的10位设备ID.
随后进入Zerotier数据目录 (GNU/Linux下是/var/lib/zerotier-one; Windows下是C:\ProgramData\ZeroTier\One), 以管理员权限打开终端或者命令行, 运行zerotier-idtool initmoon identity.secret > moon.json. 然后用文本编辑器编辑moon.json, 找到"stableEndpoints": [], 在中括号中输入"公网IP地址/9993" (一定得用""括起来). 随后管理员权限运行: zerotier-idtool genmoon moon.json, 创建moon.d目录, 将生成的*.moon文件移动入moon.d中, 重启Zerotier客户端.
最后设置防火墙放行9993端口的udp流量. (GNU/Linux: sudo ufw allow 9993/udp; Windows在高级防火墙设置中操作”入站设置”)
配置Zerotier客户端
在VPN网络中的其余设备上找到Zerotier数据目录 (GNU/Linux下是/var/lib/zerotier-one; Windows下是C:\ProgramData\ZeroTier\One), 在其下创建moon.d目录, 将上一步生产的*.moon文件拷入进去. 以管理员权限打开终端或者命令行, 运行zerotier-cli orbit Moon服务器的设备ID Moon服务器的设备ID (Moon服务器的设备ID要输入两次), 随后重启Zerotier客户端.
这样在没有IPv6连接的时候就能够借用自己的公网服务器建立Zerotier中继连接了.
使用管理员权限执行命令
zerotier-cli peers可以观察到VPN网络下的设备间是点对点直连的 (DIRECT) 还是中继连接的 (RELAY).
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!