lllvcs/huaweicloud_ddns

这是我在充分理解脚本后提出的几点修改建议

Opened this issue · 4 comments

1.TARGET_IP变量在调用系统命令ifconfig时可以加入| grep 'inet6 (ipv6固定前缀)'来避免某些情况下公网ipv6地址行数跳变的情况,ipv6固定前缀可以只输入头4位如2049即可
2.建议加入对云解析地址与本机ipv6地址的比较判断,不同时则调用api修改,相同时则不做修改,以下是我魔改后获取云解析地址的代码
HWcloud_IP=$(echo $(curl -X GET -L -k "https://$DNS/v2/zones/$ZONE_ID/recordsets/$RECORDSET_ID" \ -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "X-Project-Id: $PROJECT_ID")| sed 's/,/\n/g'|grep 'records'| grep -oE '(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))')
`其中有一个变量PROJECT_ID需要在华为云APIexplorer的showRecordSet中填写id后的调试结果中的请求头X-Project-Id看到

第一个问题,grep一个特定v6的前缀确实是一个可以避免跳变好方法,但是在部分网络环境下,可能存在着DHCPv6分配的、SLAAC产生的、虚拟地址等多个v6地址。所以我个人认为对于v6地址的获取而言,能在线获取还是尽量在线获取。
第二个问题,主要是为了偷懒,判断ip地址是否相同这件事让华为云的api去实现,减少本地计算资源的消耗。(狗头)

确实,但是我实际使用时有时候会遇到在线获取v6地址的网站无法访问的情况,当然也确实需要考虑DHCPv6、slaac等问题,所以我又有了一个想法,要不做成这样的逻辑:首先执行在线获取v6地址,用循环来依次访问那些网站,成功则跳出循环,若全部访问失败(可能性极低)时,通过“ifconfig”获取本机地址,选中除前缀为fe80的其他地址,,这样好一点?

顺便感谢一下你的ipv6识别方法,让我的封禁脚本在日志中可以识别到文本是否为ipv6,欢迎一起讨论https://www.bilibili.com/read/cv24074310/

:D

确实,但是我实际使用时有时候会遇到在线获取v6地址的网站无法访问的情况,当然也确实需要考虑DHCPv6、slaac等问题,所以我又有了一个想法,要不做成这样的逻辑:首先执行在线获取v6地址,用循环来依次访问那些网站,成功则跳出循环,若全部访问失败(可能性极低)时,通过“ifconfig”获取本机地址,选中除前缀为fe80的其他地址,,这样好一点?

说实话没必要,找个国内稳定的获取ip的api就行,我在代码里也附上了几个备用api。同时国内的v6发展的并不是很好,包括线路互联、应用支持等方面,我推荐有公网v4还是首先考虑用v4,v6这东西过于复杂。