查看: 21122|回复: 14

[教程] 华为光猫上配置动态域名更新(IPV6)-DnsPod&DynV6

[复制链接]
发表于 2021-6-8 09:23:02 |陕西| 显示全部楼层 |阅读模式
本帖最后由 panfeng.gao 于 2021-6-8 11:25 编辑
  首先,向ChinaADSL团队及热心的朋友们致敬。非常感谢@achaoge在我开通OpenWRT时的耐心回复与指导。
  我这个人比较懒,很多时候在问题处理后,没有写点东西的习惯。在ChinaADSL论坛,很多有关光猫、路由器配置问题都可以找到解决方案,那是因为有很多热心朋友把自己在工作中遇到的问题,记录下来与别人分享。因此觉得自已还是应该写点什么,有需要的朋友可以参考,分享即是快乐。
  我的光猫是华为hs8145v,系统自带ddns,支持ORAY、dyndns、gnudip等动态域名解析,但是均不支持ipv6。补全shell后发现wget版本较低,没有crontab。可操作性较差。
  参考[光猫] 玩机:激活华为光猫的小宇宙-openwrt打开OpenWRT,该教程写的很详细,在实际操作过程中遇到的问题,楼主也给予了回复,仔细学习一下,应该都能够打开OpenWRT。
  这篇文档中用到的更新脚本,就是运行在OpenWRT上的。当然OpenWRT上更新ddns的脚本很多,Luci下也支持ddns更新配置。但是嵌入式设备的存储空间及CPU处理能力,肯定不能和服务器相提并论。因此在脚本的制作过程中,尽可能采用少安装插件,用系统自带命令实现的原则进行处理。当然,这样处理的方式,程序的容错能力稍差一些。
  以下是脚本内容,供大家学习参考。同时欢迎大家修改脚本中的Bug,喷子勿扰。我的猫粮较少,顺便卖点猫粮。^_^
  1. #!/bin/sh
  2. #
  3. #############################################################
  4. # ddnsupdate v1.0.0
  5. #
  6. # Dynamic DNS using DNSPod API && dynv6.com for hs8145v
  7. #
  8. # Author: trotter, https://gist.github.com/gaopfeng
  9. #
  10. # Usage: please refer to `ddns_update.sh`
  11. #
  12. #############################################################

  13. dynv6_token="your token"
  14. dynv6_hostname="example.dynv6.net"

  15. dnspod_token="your ID,your token"
  16. dnspod_hostname="example.dnspod.cn"

  17. #Check whether the parameters of dynv6 are complete
  18. if [ -z "$dynv6_token" ] || [ -z "$dynv6_hostname" ]; then
  19.         echo "Usage: dynv6_token="your-authentication-token";dynv6_hostname="example.dynv6.net""
  20.         exit
  21. fi

  22. #Check whether the parameters of dnspod are complete
  23. if [ -z "$dnspod_token" ] || [ -z "$dnspod_hostname" ]; then
  24.         echo "Usage: dnspod_token="your-authentication-token";dnspod_hostname="example.dnspod.cn""
  25.         exit
  26. fi

  27. file=$HOME/.ddnsupdate.addr
  28. if [ -e $file ];then
  29.         lastIp=`cat $file`
  30. fi

  31. #Get WAN Ip Addresses  
  32. current_Ip_v4=$(ifconfig | grep "P-t-P" | sed 's/^.*addr://g' | sed 's/  P-t-P.*$//g')
  33. current_Ip_v6=$(ifconfig | grep "Scope:Global" | sed 's/^.*addr: //g' | sed 's/\/128.*$//g')

  34. if [ -z "$current_Ip_v4" ] || [ -z "$current_Ip_v6" ]; then
  35.         echo "Can't get ip address"
  36.         exit
  37. fi

  38. if [ "$lastIp" = "$current_Ip_v6" ]; then
  39.         echo "IPv6 address unchanged"
  40.         exit
  41. fi

  42. if [ -e /usr/bin/wget ]; then
  43.         dynv6_bin="wget -q -O-"
  44.         dnspod_bin="wget -q -O- --no-check-certificate --post-data"
  45.         else
  46.                 echo "wget not found"
  47.         exit
  48. fi

  49. dnspod_domain=${dnspod_hostname#*.}
  50. dnspod_sub_domain=${dnspod_hostname%%.*}

  51. dnspod_search_recordId_params_ipv4="login_token=$dnspod_token&format=json&domain=$dnspod_domain&sub_domain=$dnspod_sub_domain&record_type=A"
  52. dnspod_search_recordId_params_ipv6="login_token=$dnspod_token&format=json&domain=$dnspod_domain&sub_domain=$dnspod_sub_domain&record_type=AAAA"

  53. dnspod_record_list_ipv4=$($dnspod_bin $dnspod_search_recordId_params_ipv4 https://dnsapi.cn/Record.List)
  54. dnspod_record_list_ipv6=$($dnspod_bin $dnspod_search_recordId_params_ipv6 https://dnsapi.cn/Record.List)

  55. dnspod_record_id_ipv4=$(echo $dnspod_record_list_ipv4 | sed 's/.*"id":"\([0-9]*\)".*/\1/')
  56. dnspod_record_id_ipv6=$(echo $dnspod_record_list_ipv6 | sed 's/.*"id":"\([0-9]*\)".*/\1/')

  57. dnspod_update_addresses_params_ipv4="login_token=$dnspod_token&format=json&domain=$dnspod_domain&record_id=$dnspod_record_id_ipv4&sub_domain=$dnspod_sub_domain&record_type=A&record_line_id=0&value=$current_Ip_v4"
  58. dnspod_update_addresses_params_ipv6="login_token=$dnspod_token&format=json&domain=$dnspod_domain&record_id=$dnspod_record_id_ipv6&sub_domain=$dnspod_sub_domain&record_type=AAAA&record_line_id=0&value=$current_Ip_v6"

  59. # Send Ip Addresses to dnspod
  60. $dnspod_bin $dnspod_update_addresses_params_ipv4 https://dnsapi.cn/Record.Modify
  61. $dnspod_bin $dnspod_update_addresses_params_ipv6 https://dnsapi.cn/Record.Modify

  62. # Send Ip Addresses to dynv6
  63. $dynv6_bin "http://dynv6.com/api/update?hostname=$dynv6_hostname&ipv6=$current_Ip_v6/128&token=$dynv6_token"
  64. $dynv6_bin "http://ipv4.dynv6.com/api/update?hostname=$dynv6_hostname&ipv4=$current_Ip_v4&token=$dynv6_token"

  65. # Save current IPv6 address
  66. echo $current_Ip_v6 > $file
复制代码







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2023-9-15 14:53:30 |广西| 显示全部楼层
正需要这方面知识,谢谢
发表于 2023-9-14 08:50:12 |广东| 显示全部楼层
正需要这方面知识,谢谢
发表于 2022-4-3 17:13:54 |中国| 显示全部楼层
我也要向向ChinaADSL团队及热心的朋友们致敬,让我学到了很多,其实最主要还是我太缺猫粮了,有好多要学习的,等着我学习,顺便谢谢楼主
发表于 2022-2-7 16:12:18 |中国| 显示全部楼层
新手来看看
发表于 2022-2-7 10:23:53 |四川| 显示全部楼层
感谢楼主分享!不知道我的猫粮够不够
发表于 2021-12-10 12:57:41 |北京| 显示全部楼层
谢谢谢谢谢谢谢
发表于 2021-10-17 21:42:39 |中国| 显示全部楼层
  我这个人比较懒,很多时候在问题处理后,没有写点东西的习惯。在ChinaADSL论坛,很多有关光猫、路由器配置问题都可以找到解决方案,那是因为有很多热心朋友把自己在工作中遇到的问题,记录下来与别人分享。因此觉得自已还是应该写点什么,有需要的朋友可以参考,分享即是快乐。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

相关侵权、举报、投诉及建议等,请发 E-mail:yesdong@qq.com

Powered by Discuz! X5.0 Licensed © 2001-2026 Discuz! Team.44152102000001

在本版发帖QQ客服返回顶部