🔧OpenWRT迁移后Zerotier无法连接的解决方案

2024-9-26|2024-12-5
Yawatasensei
Yawatasensei
type
status
date
slug
summary
tags
category
icon
password
😀
最近我入手了一台N4100的小主机,用来替代原来放在Hyper-V上的OpenWRT旁路网关(旁路由),目的是避免Windows系统自动更新导致的频繁重启及网络中断问题,这样不管我怎么乱动Windows,也不会造成家里网络中断被家属骂,同时也能尝试使用一下RouterOS作为主路由。这样做之后,原先在Hyper-V上运行的OpenWRT也需要迁移到新环境的PVE上。为了最大化保留原Hyper-V环境中的OpenWRT数据和配置,我选择直接迁移VHDX虚拟磁盘的方式。然而,在迁移后我发现,虽然大部分配置和数据都保留完好,唯独Zerotier无法正常获取服务器分配的内网IP地址。本文将详细介绍问题的原因及解决方案。

📝 主旨内容

在迁移对PVE环境下的OpenWRT内,问题的具体表现为,Zerotier的程序正常启动,网卡正常启动,同时IPv6的本地链路地址显示,但IP地址部分始终为空,也就是无法与Zerotier Planet建立有效的连接。但是通过RouterOS的日志和Wireshark抓包显示,Zerotier使用的9993端口已经处于开放状态,UPnP映射也正常建立,所以不是防火墙的原因。
作为AB测试,启动原有Hyper-V下的OpenWRT系统,Zerotier可以正常与Planet建立连接并获取到分配的虚拟局域网IPv4和IPv6地址。

Zerotier无法获取IP的原因

在采用VHDX虚拟磁盘的全量迁移方式后,原来Hyper-V环境中的OpenWRT数据和配置被完美地保留了下来。然而,Zerotier的身份验证信息(包括公钥、私钥和授权令牌)也随之迁移。这就导致新环境中的Zerotier节点身份与Zerotier服务器上存储的设备信息(如MAC地址等)不匹配,从而无法正常认证。
Zerotier的认证机制依赖于节点的公私钥对进行身份验证,迁移后的节点身份与原有信息不一致,导致无法通过认证。因此,即使在Zerotier控制面板中删除原有设备记录,或者在OpenWRT中卸载并重装Zerotier软件包,问题仍然存在。根本原因在于身份信息(私钥、公钥和令牌)没有被重新生成,节点身份与服务器上的记录始终不一致。

解决办法

解决这个问题其实很简单,核心思路是删除旧的Zerotier配置信息,让系统重新生成节点身份。

操作步骤

删除旧的配置文件

  • 如果你使用的是通过luci-app-zerotier安装的Zerotier,其配置文件位于/etc/config/zero目录下。可以使用以下命令删除该文件夹:
  • 删除上述配置文件后,重新启动Zerotier服务。

重新加入网络

  • 进入Luci控制面板,重新添加需要加入的网络。
  • 随后,在Zerotier官网控制面板上对新生成的设备进行授权并分配IP地址。

手动安装的情况

  • 如果是通过命令行安装的Zerotier,且没有Luci界面管理,配置文件可能位于/etc/zerotier/var/lib/zerotier-one/目录中。类似地,删除这些目录下的配置文件,然后重启Zerotier服务即可。

🤗 其他参考

理论上,不管是虚拟机迁移,还是OpenWRT的备份还原,或者虚拟机网卡设备变动(移除原来的网卡并使用了一个新的WAN口网卡等等),均可能会出现文中所出现的问题,因为硬件设备的信息产生了变动,例如网卡MAC地址等等,所以出现Zerotier无法获取到虚拟局域网IP的问题,可以尝试本文的解决办法。
 

附录

/etc/config/zero 内各文件作用:
  • authtoken.secret
    • 描述:授权令牌,用于本地API的访问和管理。
    • 作用:防止未经授权的管理,仅允许root用户访问。
  • controller.d/(目录)
    • 描述:用于控制器相关的配置。
    • 作用:当Zerotier作为网络控制器时存储相关信息。
  • identity.public & identity.secret
    • 描述:节点的公钥和私钥。
    • 作用:用于节点身份验证和加密通信,其中公钥公开共享,私钥严格保密。
  • metrics.prom
    • 描述:Prometheus格式的监控数据文件。
    • 作用:用于性能监控和调试。
  • networks.d/(目录)
    • 描述:包含加入的虚拟网络配置信息。
    • 作用:存储每个网络的路由、授权状态等。
  • peers.d/(目录)
    • 描述:存储与其他节点的连接信息。
    • 作用:用于与其他节点建立点对点连接。
  • planet
    • 描述:包含连接全球Zerotier网络的目录服务器信息。
    • 作用:帮助节点加入全球Zerotier网络。

📎 参考文章

 
💡
有关OpenWRT安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
OpenWRT从Hper-V迁移至PVE指引OpenWRT限速插件推荐:QoS Mate
Loading...