IPv6访问NAS

嗯嗯,拖了好久没有把这个发出来了。自从移动可以用IPv6后,想办法可以在外面用IPv6访问自家NAS,主要是用transmission下载,然后Nextcloud保存手机上的照片。基本上这些功能已经实现,但是中间也碰到了一些问题。思路就是将域名AAAA记录改为当前NAS的IPv6地址。正好DigitalOcean的有这个功能,提供了API,可以用API修改域名记录。

  1. 网络结构

家里网络是一光猫,桥接,后面连一个Buffalo的路由器(刷了OpenWRT),然后一个CISCO千兆非网管的交换机,再接到各终端设备。无线用的是新的华为新的AX6路由器,当一个无线接入点AP。这里提一点是,光猫比较早了,大概是2016年办的,烽火HG266GU,有个大坑,后面LAN口只有LAN1口是千兆,其他是百兆,当时升级宽带的时候速率一直达不到要求,后来找移动才知道。还有一个无线的问题,当时用的是TP-LINK AC1200,用无线下NAS的东西,最大只有4MB/s,用Wireshark抓包,一直有丢包,速度上不去,换了它后一切都好了,笔记本Intel AX210网卡2402/2402Mbps,测试到NAS的网速,卡在1000Mbps,卡在有线网络上了,当然从NAS下东西速率还是卡在硬盘上面。

  1. 路由器设置

此时Buffalo的路由器成了上网关键设备,设置好IPv4防火墙,保证网络安全,禁止内网非法设备上网。暂时IPv6防火墙没有太多规则,考虑到现在IPv6可能被扫的机率比较低。

  1. DigitalOcean设置

可以在DO界面生成新的API Token,这样就可以利用API来远程修改DNS信息。具体方法可以参考官方文档。可以用cURL,Python等,当时可能正在用Python,所以后来我就用Python来修改DNS记录了。其中用到了python-digitalocean,主要是用到了Listing records of a domain/Update a domain record。在DigitalOcean的DNS管理界面,设置一条AAAA的记录,后面脚本会根据NAS实际IPv6的地址进行修改。

  1. 获取NASIPv6地址

这部分是修改最多的地方吧,最开始也是用Python来获取IPv6地址,但是不太理想,NAS的IPv6地址有很多,其中临时的IPv6大概是一段时间就会失效,然后会生成一个新的IPv6地址,这里查本机IPv6地址会有很多。

后来改成用SHELL脚本来搞。拿到网卡的所有IPv6地址,去掉link环路,过时地址,临时地址这时候大概会获取1到2个地址。基本可用,然后得到的地址传给Python脚本去修改DO的DNS记录。

1
IPs=`ip -6 addr show enp1s0 | grep inet6 | grep -v -E "link|host|deprecated|temporary" | awk '{print $2}' | awk -F'/' '{print $1}'`

后来发现一个问题,因为路由器重启的话,IPv6地址会有上次拨号的记录和这次拨号的记录,会导致AAAA记录错误。后来想了一些办法没成功,最后来了个最笨的办法,直接从路由器拿到最的IPv6地址,跟NAS的地址进行对比,这样DNS就可以更新成最新的记录了。

1
IPPre=`ssh -p PORT root@IPADDR ip -6 addr show br-lan | grep inet6 | grep -v -E "link|host" | awk '{print $2}' | awk -F'/' '{print $1}' | awk -F'::' '{print $1}'`