您现在的位置是:首页 > 技术教程 正文

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

admin 阅读: 2024-03-31
后台-插件-广告管理-内容页头部广告(手机)

我使用的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:

  1. #nginx的维护程序
  2. def mtNginx():
  3.    logger.info('执行nginx维护')
  4.    global nginxNeedReload
  5.    #检查nginx的配置缓存文件是否存在.
  6.    if not(os.path.exists(NGINX_CONF_CACHE)):
  7.        logger.warning('nginx配置缓存不存在,复制缓存到制定位置.')
  8.        os.system(f'cp {NGINX_CONF_SOURCE} {NGINX_CONF_CACHE}')    
  9.    #检查nginx的配置文件是否需要更新
  10.    if os.path.getsize(NGINX_CONF_CACHE) != os.path.getsize(NGINX_CONF):
  11.        logger.warning('nginx配置文件异常,执行更新.')
  12.        os.system(f'cp {NGINX_CONF_CACHE} {NGINX_CONF}')  
  13.        #重启samba服务
  14.        os.system(f'/etc/rc.d/rc.samba -restart')
  15.        nginxNeedReload = True
  16.    #检查nginx配置是否需要更新
  17.    if nginxNeedReload:
  18.        res = os.popen('nginx -s reload').read()
  19.        if res == '':
  20.            logger.warning('enginx配置更新成功.')
  21.            nginxNeedReload = False
  22.        else:
  23.            logger.warning('enginx配置更新失败.')    

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

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

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

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

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

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜