OpenWrt中zerotier-one配置保存问题的解决方案
问题背景
在OpenWrt系统中使用zerotier-one时,用户可能会遇到通过zerotier-cli命令进行的配置在系统重启后丢失的问题。这是由于OpenWrt系统的特殊设计导致的,需要采取特定的解决方案来确保配置持久化。
问题分析
OpenWrt系统中,/var目录默认是内存盘(tmpfs),这意味着其中的数据在系统重启后会丢失。而zerotier-one默认会将运行时配置存储在/var/lib/zerotier-one目录下,这就导致了配置无法持久保存的问题。
通过分析发现,在OpenWrt的istore环境中,zerotier的luci插件实际上将配置存储在/var/lib/zerotier-luci目录下,这个目录通过符号链接指向/etc/config/zero,而/etc目录是持久化存储的。这就是为什么通过luci界面进行的配置能够保存的原因。
解决方案
方法一:手动绑定挂载
最直接的解决方案是通过绑定挂载(bind mount)将持久化目录映射到zerotier期望的目录位置:
mount -o bind /var/lib/zerotier-luci /var/lib/zerotier-one
执行此命令后,zerotier-cli命令就可以正常工作了,因为现在它访问的实际上是持久化存储的位置。
方法二:创建开机自动执行脚本
为了确保每次系统启动后自动执行上述操作,可以创建一个启动脚本:
- 创建脚本文件:
echo '
mkdir -p /var/lib/zerotier-one
mount -o bind /var/lib/zerotier-luci /var/lib/zerotier-one
zerotier-cli set xxxxxxxxxxx allowGlobal=true
' > /opt/config_zerotier.sh
chmod +x /opt/config_zerotier.sh
- 添加到开机启动:
echo 'sleep 60 && /opt/config_zerotier.sh &' >> /etc/rc.local
方法三:使用官方软件源
如果问题是由于软件包版本导致的,可以考虑使用OpenWrt官方软件源中的zerotier-one包,这通常是最稳定的选择。
技术原理
OpenWrt系统设计上为了减少对存储设备的写入,延长设备寿命,将/var目录设置为内存文件系统(tmpfs)。这种设计带来了性能优势,但也导致了数据持久化的问题。
zerotier-luci插件通过将配置存储在/etc目录下解决了这个问题,但zerotier-cli工具仍然默认查找/var/lib/zerotier-one目录。通过绑定挂载,我们可以在不改变zerotier-cli行为的情况下实现配置持久化。
注意事项
- 不建议使用第三方软件源,这可能导致系统不稳定或安全问题
- 修改系统配置前建议备份重要数据
- 如果使用luci界面配置zerotier,通常不需要额外操作,因为插件已经处理了持久化问题
- 对于高级配置如allowGlobal,可能需要通过CLI方式设置
总结
OpenWrt系统中zerotier配置保存问题源于系统设计特性,通过理解其存储机制并采取适当的解决方案,可以确保zerotier配置的持久化。绑定挂载是最直接有效的解决方案,既保持了系统原有设计,又满足了配置持久化的需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考