在使用Unraid的过程中,无论是插件安装还是应用商店,都会有网络连接失败的情况出现,这里主要是由于github与dockerhub这两个地址访问异常导致的。在工作环境中无论是我们的PC还是手机都有各种办法解决类似的问题,但Unraid作为一个linux类的NAS系统并不像上面的系统一样有很通用的网络代理方式。
所以这篇文章的重点前提就在于,你自己已经可以有办法在PC上解决这个问题,然后本文告诉你怎么让Unraid也通过相同途径访问那两个网站。
我有两个办法,并且都实际实施且成功过,当然这两个办法算是各有优劣,下面会分别说明。
方法一:透明代理网关
这里的思路是不在Unraid上做设置,直接在家中布设网关,并在网关上配置全局的透明代理,然后使你需要访问外部网站的设备网关都指向透明代理网关的IP地址,这样就解决了这个问题。
这可以说是最“优雅”的方案了,并且大部分鼓捣家用存储的玩家对软路由这些应该也有所了解,弄一个旁路由作为透明代理网关算是很多教程里面的通用流程了,但实际操作下来我发现旁路由并不算稳定,并且某些关键的插件也需要单独找资源安装。
然后我尝试了使用Debian或CentOS来自己搭建一个路由网关,用xray作为代理软件,通过iptables或nftables来进行流量转发,这套透明代理模式是xray官网的教程中的,但实际安装过程中发现教程有些问题说的并不算很详细。
并且在长期使用了一段时间后,我发现当服务重启透明网关有概率失效,需要手动执行一些命令。直到有一天,我睡觉前重启了系统,第二天上班时发现透明代理失效导致不能远程,回家之后调试了半天发现不起作用,终于放弃了这一方法。
另外,这个方法还存在两个问题。
如果只需要设备上网不需要端口映射,那没有问题,但当路由器上配置端口映射时,映射的端口必须写透明网关的地址,在路由器上显示的设备MAC也是透明网关的MAC。MAC问题可以忽视,端口问题可以在透明网关的防火墙上写特定的NAT规则来将端口映射到后面的业务端口上,但总归还是太过麻烦。
并且由于Unraid本身的限制,更改系统网关需要停止阵列,而我这种把软路由以及绝大部分业务都放在Unraid上的架构会导致暂时断网,这导致我在调试时可能会频繁断网,并不算是个多好的体验。
综上,于是我回归了方法二。
方法二:配置系统代理
1、编辑系统代理文件:
vim /boot/config/go
修改为:
http_proxy=http://[server]:[port] https_proxy=http://[server]:[port] /usr/local/sbin/emhttp &
echo "export http_proxy=\"http://[server]:[port]\"" >> /root/.bash_profile
echo "export https_proxy=\"http://[server]:[port]\"" >> /root/.bash_profile
2、编辑应用商店代理文件:
vim /boot/config/plugins/community.applications/proxy.cfg
写入:
port=[port]
tunnel=1
# proxy=http://[server]
proxy=socks5://[server]
上述两步修改完成后,重启Unraid使配置生效。
在上述两步修改中,所用的"[server]:[port]"是本地自建的代理,例如在Windows下使用v2rayN并通过端口给浏览器的Proxy SwitchyOmega插件提供代理,那同时v2rayN就可以开启允许局域网的链接然后通过相应的sock5和http端口为Unraid提供代理。
关于本地代理软件的选择,我尝试了如v2rayA与Qv2ray等Linux客户端,但前者代理始终链接异常,后者的开发组矛盾导致已经长期未更新,所以我还是选择了Windows环境下的v2rayN。由于我本身有一个极低功耗的Windows下载机,v2rayN本身也足够稳定和优秀,所以这对我来说是最佳的选择。