当前位置:首页 » 《随便一记》 » 正文

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

11 人参与  2024年03月08日 18:01  分类 : 《随便一记》  评论

点击全文阅读


我使用的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 = False        else:            logger.warning('enginx配置更新失败.')     

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

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

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

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

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/76087.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1