jxyblog

jxyblog

email

openwrt路由器通过脚本进行华为域名API自动更新WAN口的域名解析

大家好,动态域名解析应该都不陌生吧,很多路由器甚至集成 ddns 动态域名解析服务,但是没有华为域名的解析服务,所以我们只能自己用脚本调用 API 进行华为的域名解析。
这里推荐一个管理路由器的软件WinSCP 工具放百度网盘了。
有了这软件很多操作就不用敲代码了,很方便用 scp 协议登入就行

1,准备工作
开始之前我们需要获得一些必要的参数,大家先登入自己的云控制台,创建一个 iam 账户,管理员账号似乎不行,我调试的时候一直报错,在统一身份认证服务里面。

1111
创建好后打开控制台的修改域名解析界面,多个域名的要单独打开其中一个域名,我们可以获得这个域名的 zone_id,每个域名都有单独的 zone_id,如下图所示。
提取出域名 zone_id 备用。

22222

2,获得 recordset_id
由于每个域名下面有很多个解析记录,每个解析记录都有一个 recordset_id, 我们需要打开华为的 API 调试工具查看一下域名下的每个解析记录的 id, 地址 API 调试,要先登入华为账号才能用,界面如下,在 zone_id 那里填入你刚才获得的一串字符。

333
输入 zone_id 点击调试,在右边的界面选取你需要解析的那个域名的 recordset_id 就是最上面那个,注意别选错了,我这边设置的是 ipv6 的解析,也就是 AAAA。

44444
3,最后需要准备的数据大概如下:
adminname='hw123456789' 管理员账号
username='123456' 新建的账号
password='123456' 新建账号的密码
zoneid='ff80808287asdadadasd7d1b56243'
recordsetid='ff80808287asdasdad3b1d031404c4'
domain='jxyblog.top' 需要修改解析的域名,我直接使用根域名
4,先进行路由器端口 IP 地址获取调试
不然待会儿运行脚本会出错
ssh 登入路由器界面,运行以下命令看看能不能正常获得 wan 口的 ipv6 地址,我的是 pppoe 拨号的。
ifconfig pppoe-pppoe | grep inet6 | awk 'NR==1{print $3}' | cut -d'/' -f1
正常的话出来是下面图片这样的

5555

如果不是的话先单独输入 ifconfig 查看所有端口,我的是 pppoe-pppoe,然后过滤只显示带 inet6 的行,NR==1 打印第一行,print $3 打印第三列,自己慢慢改,调试出单独的 ipv6 地址就行了。

5,路由器要安装的软件,打开路由器软件包界面安装以下两个软件
curl
调试工具

bash
脚本工具
以上几个步骤准备完大概就可以运行脚本了。

6,以下是脚本代码

#!/bin/bash
adminname='hw123456789'     #这部分上面说过了正常填就行了
username='123456'
password='123456'
zoneid='ff8080828732b7946445465b56243'
recordsetid='ff80808654665156173b1d031404c4'
domain='jxyblog.top'


token=$(curl -L -k -s -D - -X POST 'https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens' \
--header 'Content-Type: application/json;charset=UTF-8' \
--data-raw '{"auth":{"identity":{"methods":["password"],"password":{"user":{"domain":{"name":"'$adminname'"},"name":"'$username'","password":"'$password'"}}},"scope":{"domain":{"name":"'$adminname'"}}}}' | grep X-Subject-Token | awk '{print $2}')

wanip=$(ifconfig pppoe-pppoe | grep inet6 | awk 'NR==1{print $3}' | cut -d'/' -f1)    #这里之前上面调试过的,如果有更改的话改一下就行了

curl -i --location --request PUT 'https://dns.myhuaweicloud.com/v2.1/zones/'$zoneid'/recordsets/'$recordsetid'' \
--header 'Content-Type: application/json;charset=UTF-8' \
--header 'X-Auth-Token: '$token'' --data-raw '{"name":"'$domain'.","type":"AAAA","ttl":300,"records":["'$wanip'"]}'

创建一个后缀是.sh 的文件,保存到路由器里,比如我保存到 /mnt,运行以下代码
/bin/bash /tmp/ddns.sh
如果返回正常应该是以下图所示

666
这里就已经更新了服务器上的解析记录了。

7,设置定时更新解析记录或者定时检测 IP 变化更新解析记录。
比如在路由器里面设置每 12 小时运行脚本,如下图所示

0 */12 * * * /bin/bash /mnt/ddns1.sh

777

如果设置每 10 分钟检测 IP 变化进行域名解析,我前面文章有发过检测 IP 变化的脚本,脚本如下,详细可看之前的文章链接:
【详细教程】Openwrt 公网 IP 地址变动自动邮件通知(IPv4、IPv6 都可)【转载重新整理】

#!/bin/bash
current_ipv6=$(ip -6 addr show br-lan | grep -oE 'inet6 [0-9a-fA-F:]+(/[0-9]+)?' | awk '{print $2}')
if [ ! -f /tmp/wan_ip.txt ]; then
echo "$current_ipv6" > /tmp/wan_ip.txt
echo -e "Subject: OpenWRT WAN IP\n\n首次运行脚本,WAN IPv6 地址为: $current_ipv6" | msmtp -a default [email protected]
fi
saved_ip=$(cat /tmp/wan_ip.txt)
if [ "$current_ipv6" != "$saved_ip" ]; then
echo -e "Subject: OpenWRT WAN IP Changed\n\nWAN IPv6 已更改为: $current_ipv6\n之前的 IP 地址为: $saved_ip" | msmtp -a default [email protected]
echo "$current_ipv6" > /tmp/wan_ip.txt
/bin/bash /mnt/ddns1.sh       #这里直接插入域名解析脚本,ip变化直接ddns
fi

到此结束,如果有帮到你们的话真的太好了

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。