panfeng.gao 发表于 2021-6-8 09:23:02

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

本帖最后由 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,喷子勿扰。我的猫粮较少,顺便卖点猫粮。^_^

#!/bin/sh
#
#############################################################
# ddnsupdate v1.0.0
#
# Dynamic DNS using DNSPod API && dynv6.com for hs8145v
#
# Author: trotter, https://gist.github.com/gaopfeng
#
# Usage: please refer to `ddns_update.sh`
#
#############################################################

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

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

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

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

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

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

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

if [ "$lastIp" = "$current_Ip_v6" ]; then
        echo "IPv6 address unchanged"
        exit
fi

if [ -e /usr/bin/wget ]; then
        dynv6_bin="wget -q -O-"
        dnspod_bin="wget -q -O- --no-check-certificate --post-data"
        else
                echo "wget not found"
        exit
fi

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

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

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

dnspod_record_id_ipv4=$(echo $dnspod_record_list_ipv4 | sed 's/.*"id":"\(*\)".*/\1/')
dnspod_record_id_ipv6=$(echo $dnspod_record_list_ipv6 | sed 's/.*"id":"\(*\)".*/\1/')

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"
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"

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

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

# Save current IPv6 address
echo $current_Ip_v6 > $file






梦无极 发表于 2023-9-15 14:53:30

正需要这方面知识,谢谢

xujiancai1991 发表于 2023-9-14 08:50:12

正需要这方面知识,谢谢

qq21671706 发表于 2022-4-3 17:13:54

我也要向向ChinaADSL团队及热心的朋友们致敬,让我学到了很多,其实最主要还是我太缺猫粮了,有好多要学习的,等着我学习,顺便谢谢楼主

811431394 发表于 2022-3-23 01:53:17

谢谢分享

811431394 发表于 2022-3-18 01:16:23

谢谢分享

hkony 发表于 2022-3-8 00:21:06

我想看看

sveiqpl 发表于 2022-2-7 16:12:18

新手来看看

nadoo 发表于 2022-2-7 10:23:53

感谢楼主分享!不知道我的猫粮够不够

ionli 发表于 2021-12-10 12:57:41

谢谢谢谢谢谢谢

mengtw 发表于 2021-10-17 21:42:39

  我这个人比较懒,很多时候在问题处理后,没有写点东西的习惯。在ChinaADSL论坛,很多有关光猫、路由器配置问题都可以找到解决方案,那是因为有很多热心朋友把自己在工作中遇到的问题,记录下来与别人分享。因此觉得自已还是应该写点什么,有需要的朋友可以参考,分享即是快乐。
页: [1] 2
查看完整版本: 华为光猫上配置动态域名更新(IPV6)-DnsPod&DynV6