华为光猫上配置动态域名更新(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
正需要这方面知识,谢谢 正需要这方面知识,谢谢 我也要向向ChinaADSL团队及热心的朋友们致敬,让我学到了很多,其实最主要还是我太缺猫粮了,有好多要学习的,等着我学习,顺便谢谢楼主 谢谢分享 谢谢分享 我想看看
新手来看看 感谢楼主分享!不知道我的猫粮够不够 谢谢谢谢谢谢谢 我这个人比较懒,很多时候在问题处理后,没有写点东西的习惯。在ChinaADSL论坛,很多有关光猫、路由器配置问题都可以找到解决方案,那是因为有很多热心朋友把自己在工作中遇到的问题,记录下来与别人分享。因此觉得自已还是应该写点什么,有需要的朋友可以参考,分享即是快乐。
页:
[1]
2