解决用IPV6+DDNS访问UNRAID webui周期性失效的问题,smb不能访问的问题

我使用的unraid系统使用ddns(DDNSGO)绑定域名(阿里域名)与主机的ipv6地址进行远程访问,unraid是6.12.8。

遇到的问题是,配置当时是没问题的,但是过几天就会失效,无法通过域名访问webui了。这种情况在之前使用威联通的NAS的时候没有遇到过。但是docker里面的应用还是正常的,通过这个现象基本锁定是nginx的问题了。

通过看nginx的配置文件(/etc/nginx/conf.d/servers.conf),这个配置文件是unraid自动生产的,会直接把当前的ipv6地址写到配置里面:

自动生产的nginx配置文件

只有匹配了地址才能正常访问,但是一旦IPV6地址变更了,系统又不会自动更新,就不能通过webui访问了。而且在使用的过程中,发现一旦IPV6地址变更,系统自带的SMB共享功能也不能通过IPV6进行访问了。

解决这个问题的方法有好几个:

1、安装zerotier,映射到内网,通过内网IP地址访问,同时在unraid里面添加对应的虚拟网卡:

​在uraid的网络配置里面加入zerotier的虚拟网卡

系统会自动把这个网段加入到nginx的配置里面。由于zerotier的地址是内网地址,而且不会变更,所以这个问题可以一定程度的解决这个问题,但是要求访问的设备也装zerotier,这个不方便。

2、周期性重启nginx和smb服务

定期执行/etc/rc.d/rc.nginx -restart 可以重新生产nginx配置文件,并应用。

同理,定期执行/etc/rc.d/rc.samba -restart 也可以恢复samba的访问。

但问题是,重启周期是多少?太短,如一分钟,那么webui和samba每分钟都会断开;太长,则IPV6地址变更到重启的间隔之内,都不能访问到,问题没有很好的解决。

3、通过优化nginx配置,并监测nginx文件是否变化,在变化后更新配置。这种是我目前正在使用的方式,优点是灵活,空窗期比较短,缺点是你得自己写代码。

首先优化nginx的配置。不要使用IPV6绑定访问,而是使用域名绑定访问:

 

注意这个修改在全文有两三个地方,都要改好了。

然后把conf文件存在/boot/下面,这个文件夹是在启动盘里面的,不会随着重启而消失。

后面就简单了,写个python,监控/etc/nginx/conf.d/servers.conf 是否和改好的 conf 一致,若不一致,复制一份覆盖过去,并重启nginx和samba:

#nginx的维护程序
def mtNginx():logger.info('执行nginx维护')global nginxNeedReload#检查nginx的配置缓存文件是否存在.if not(os.path.exists(NGINX_CONF_CACHE)):logger.warning('nginx配置缓存不存在,复制缓存到制定位置.')os.system(f'cp {NGINX_CONF_SOURCE} {NGINX_CONF_CACHE}')    #检查nginx的配置文件是否需要更新if os.path.getsize(NGINX_CONF_CACHE) != os.path.getsize(NGINX_CONF):logger.warning('nginx配置文件异常,执行更新.')os.system(f'cp {NGINX_CONF_CACHE} {NGINX_CONF}')  #重启samba服务os.system(f'/etc/rc.d/rc.samba -restart') nginxNeedReload = True#检查nginx配置是否需要更新if nginxNeedReload:res = os.popen('nginx -s reload').read()if res == '':logger.warning('enginx配置更新成功.')nginxNeedReload = Falseelse:logger.warning('enginx配置更新失败.')     

上面的代码块里面先复制了一份文件到内存中,避免对启动盘的重复访问。然后检测配置文件是否被更改,如果更改(网络变更的时候,有时候会触发nginx配置文件的自动变更),那就重新覆盖一份,并重启smaba。并让nginx重新使用新的应用新的配置文件。注意此处不能使用rc.nginx -restart 的方式重启nginx,因为这样conf文件就会重新生成,达不到想要的效果。

上述代码可以使用定时任务的形式周期执行(例如一分钟一次),当conf文件异常才会触发服务的重置。

也可以使用nobup在后台托管的形式(我使用这种方式,因为这个脚本还带读取硬盘温度,调整主机风扇转速的功能)。

需要在GO文件里面配置开机运行。

感觉unraid的最大卖点就是硬盘的利用率,但是它的使用习惯,以及自己DIY的难度,比OMV那些难不少,主要是安装的包啥的重启后全部没了,这点太不方便了,希望官方能改改吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux查看磁盘占用命令

查看系统整体的磁盘占用情况 df -h查看当前文件夹下所有子文件夹的磁盘占用情况 du -ah --max-depth1按照文件大小从大到小排序 du -ah --max-depth1 .|sort -hr查看当前文件夹以及所有子文件夹的磁盘占用汇总 du -sh *按照文件大小从大到小排序 du -sh *|sort -nr

MongoDB聚合运算符:$arrayElemAt

MongoDB聚合运算符$arrayElemAt用于返回数组中指定位置的元素。 语法 { $arrayElemAt: [ <array>, <idx> ] }<array>可以是任何能被解析为数组的表达式。<idx>可以是任何可以被解析为整数的表达式。 使用 如果<idx>为0或正整数&#xff0c;则…

【SQL注入】基于extractvalue函数的报错注入原理

一、ExtractValue函数 ExtractValue()函数是MySQL数据库中用于提取XML数据中指定路径的值的函数。它基于XPath语法&#xff0c;允许用户根据特定的路径表达式从XML格式的数据中获取所需信息。以下是关于MySQL中ExtractValue()函数的详细讲解&#xff1a; 1.1语法 EXTRACTVAL…

【国产MCU】-CH32V307-通用定时器(GPTM)-编码模式与旋转编码器驱动

通用定时器(GPTM)-编码模式与旋转编码器驱动 文章目录 通用定时器(GPTM)-编码模式与旋转编码器驱动1、通用定时器编码模式介绍2、旋转编码器介绍3、驱动API介绍4、编码模式使用示例本文将详细介绍如何使用CH32V307通用定时器的编码模式。 1、通用定时器编码模式介绍 编码器…

Maven高级(一)

文章目录 Maven高级&#xff08;一&#xff09;1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

扫码即可快速协作:草料二维码底部协作面板功能详解

功能介绍 在二维码上添加 底部协作面板 功能后 &#xff0c;扫码后不仅可以阅读设备信息、产品资料等基本信息&#xff0c;还可以在二维码底部输入内容评论并他人快速协作&#xff0c;支持添加图文、语言、手写签名等操作。 底部协作面板是提供给组织内部成员快速协作的功能&…

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令 10.1 ret 和 retf检测点 10.1 10.2 call 指令10.3 依据位移进行转移的 call 指令检测点 10.2 10.4 转移的目的地址在指令中的 call 指令检测点 10.3 10.5 转移地址在寄存器中的 call 指令10.6 转移地址在内存中的 call 指令检…

数据模型概念

一、概念 (1) 定义 在数据库系统中针对不同的使用对象和应用目的&#xff0c;采用不同的数据模型。根据模型的应用的不同目的&#xff0c;可以将这些模型划分为两类&#xff1a; (2) 分类 A&#xff1a;概念数据模型 它也称信息模型它是按用户的观点&#xff08;观念世界&…

Android 基础技术——Synchonized 关键字

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于Synchonized 关键字 Synchronized 关键字的作用是什么&#xff1f; 原子性&#xff1a;确保线程互斥访问同步代码 可见性&#xff1a;保证共享变量的修改能够及时可见&#xff0c;就是通过 Java 内存…

JVM(2)实战篇

1 内存调优 1.1 内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。 内存泄漏绝…

5G LAN

5G LAN定义 5G LAN 是企业专用蜂窝网络解决方案。5G LAN 集成到组织现有的 IT 基础设施中以提供 5G 的所有优势&#xff0c;以确定的性能和延迟为整个企业的关键任务数字计划创建高速可预测的无线连接。根据定义&#xff0c;5G LAN 消除了在企业自己的环境中采用私有 5G 无线技…

单调队列和优先队列

本篇记录下一下关于单调队列和优先队列&#xff08;堆&#xff09;的方法以及解题思路. 文章目录 一. 单调队列1. 绝对差不超过限制得最长连续子数组2. 跳跃游戏 VI3. 设计自助结算系统4. 和至少为k的最短子数组5. 满足不等式的最大值 二. 优先队列1. 最后一块石头的重量2. 数据…

SQL实现模糊查询的四种方法总结

目录 一、一般模糊查询 二、利用通配符查询 1. _ 表示任意的单个字符 2. % 表示匹配任意多个任意字符 3. [ ]表示筛选范围 4. 查询包含通配符的字符串 一、一般模糊查询 1. 单条件查询 //查询所有姓名包含“张”的记录select * from student where name like 张 2. 多条…

十二:枚举与注解

文章目录 01、枚举类的使用1.1、枚举类的理解1.2、自定义枚举类1.3、使用enum关键字定义枚举类1.4、Enum类中的常用方法1.5、使用enum关键字定义的枚举类实现接口 02、注解的使用2.1、注解的理解2.3、如何自定义注解2.4、jdk中4个基本的元注解的使用12.5、jdk中4个基本的元注解…

uniapp 适配鸿蒙next调研

1.官方的一些回答 DCloud有资源第一时间得到鸿蒙无apk手机的上市计划。我们和华为保持着紧密沟通&#xff0c;会把握好节奏&#xff0c;不用担心。大家可以观察一个信号&#xff0c;等微信的鸿蒙next版敲定了&#xff0c;鸿蒙无apk手机就可以明确上市计划了。鸿蒙的开发语言是a…

算法竞赛STL:bitset使用方法

STL-bitset使用方法 文章目录 STL-bitset使用方法 容器描述&#xff1a; bitset是一种特殊的数组&#xff0c;它的每一个元素只能是0或1。每个元素只占用1bit空间&#xff0c;所以它是一种空间效率极高的数据结构。bitset在处理大量的位级数据时非常有用。 使用方法&#xff1…

数据结构:动态内存分配+内存分区+宏+结构体

一、作业 1.定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h>…

UE蓝图 Cast节点和源码

系列文章目录 UE蓝图 Cast节点和源码 文章目录 系列文章目录Cast节点功能一、Cast节点用法二、Cast节点使用场景三、Cast节点实现步骤四、Cast节点源码 Cast节点功能 在Unreal Engine&#xff08;UE&#xff09;中&#xff0c;Cast节点是一种蓝图系统中的节点&#xff0c;用于…

【性能测试入门必看】性能测试理论知识

一、性能测试理论知识 1、常用的七种性能测试方法 (1) 后端性能测试&#xff1a;其实&#xff0c;你平时听到的性能测试&#xff0c;大多数情况下指的是后端性能测试&#xff0c;也就是服务器端性能测试。后端性能测试&#xff0c;是通过性能测试工具模拟大量的并发用户请求&…

linux系统Grafana关联zabbix显示

Grafana关联zabbix 服务器下载浏览器配置开启zabbix插件配置zabbix数据源可视化Zabbix数据 服务器下载 grafana-cli plugins list-remote grafana-cli plugins list-remote|grep -i zabbix grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-…