找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2073|回复: 8

openwrt 的DDNS中的dnspod不好用, 自己写了一个

[复制链接]
发表于 2021-5-10 23:29 | 显示全部楼层 |阅读模式
本帖最后由 gbam 于 2021-5-10 23:42 编辑

DDNS里面的DNSPOD还是用户名密码的老方式. 使用不了.
于是自己写了一个脚本. 把下面的脚本修改成自己的信息放的计划任务里面执行即可


脚本逻辑

1.通过PING先获取到需要解析的域名IP
2.根据第一条网关路由,获取到PPOE分配的外网IP(解决多拨获取到多个外网IP)
3.获取到本地的IP和解析的IP不一致,修改DNSPOD里面的解析记录


++++++++++++++   以下为脚本



#!/bin/bash

######
##    20210510
##    For Boco
######

Dnspod_ID="你自己的Dnspod ID"
Dnspod_TOKEN="你自己的Dnspod Token"
Dnspod_DOMAIN="你自己的主域名"
Dnspod_SUB_DOMAIN="需要提交的二级域名"

Get_Dnspod_Info()
{
Dnspod_Domain_Id=`curl -sX POST https://dnsapi.cn/Domain.Info -d "login_token=$DNSPOD_ID,$DNSPOD_TOKEN&format=json&domain=$DNSPOD_DOMAIN"|sed 's/,/\n/g'|grep -w id|awk -F "\"" '{print $4}'`
Dnspod_Record_Id=`curl -sX POST https://dnsapi.cn/Record.List -d "login_token=$DNSPOD_ID,$DNSPOD_TOKEN&format=json&domain=$DNSPOD_DOMAIN" | sed 's/{/\n/g'|grep -w "$DNSPOD_SUB_DOMAIN"|grep -w '"type":"A"'|awk -F "\"" '{print $4}'`
}
GetOldIP()
{
ping $Dnspod_SUB_DOMAIN.$Dnspod_DOMAIN -c 1 -w 1 | sed '1{s/[^(]*(//;s/).*//;q}' >/dev/shm/$Dnspod_SUB_DOMAIN.$Dnspod_DOMAIN
Dnspod_Old_Ip=`cat /dev/shm/$Dnspod_SUB_DOMAIN.$Dnspod_DOMAIN`
}
GetNewIp()
{         
default_route=`ip route|grep default|head -1|awk '{print $3}'|awk -F '\.' '{print $1"."$2"."$3}'`
default_wan_ip=`ip a|grep $default_route |awk '{print $2}'`                                      
}                                                                                                
IpMatching()                                               
{           
GetOldIP   
GetNewIp
if [ "$Dnspod_Old_Ip" = "$default_wan_ip" ] ;then
Dnspod_Matching="1"                              
fi                                               
}                  
Dnspod_push()
{            
IpMatching
Get_Dnspod_Info
if [ "$Dnspod_Matching" != "1" ] ;then
curl -sX POST https://dnsapi.cn/Record.Modify -d "login_token=$DNSPOD_ID,$DNSPOD_TOKEN&format=json&domain_id=$Dnspod_Domain_Id&record_id=$Dnspod_Record_Id&sub_domain=$DNSPOD_SUB_DOMAIN&value=$default_wan_ip&record_type=A&record_line_id=0"
fi                                                                                                                                 
}                                                                                                                                 

Dnspod_push

本帖子中包含更多资源

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

×
发表于 2021-5-10 23:54 来自手机 | 显示全部楼层
逻辑不对,你ping得到的ip是有延迟/缓存的。直接把之前的ip记录在本地,和当前的对比就行

获取接口ip也最好用ifconfig或者ip address,别用ip route
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-11 00:07 | 显示全部楼层
rightuser2 发表于 2021-5-10 23:54
逻辑不对,你ping得到的ip是有延迟/缓存的。直接把之前的ip记录在本地,和当前的对比就行

获取接口ip也 ...

解析延时的考虑过, 主要避免多次调用API接口被临时冻结
ifconfig 或者 ip address 里面有坑.
因为某些运营商会发放^192.*.*.*的A类IP
用这两种方式如果是多拨状态下,shell判断次数比较多
为啥用ip route,因为不用管它双拨还是10拨我只判断第一条 "default" 默认网关路由即可,
回复 支持 反对

使用道具 举报

发表于 2021-5-11 00:29 来自手机 | 显示全部楼层
gbam 发表于 2021-5-11 00:07
解析延时的考虑过, 主要避免多次调用API接口被临时冻结
ifconfig 或者 ip address 里面有坑.
因为某些 ...

本地判断,并不需要调用api,判断ip变化后才调用api更新

没明白你说的a类ip啥意思,pppoe拨号获得192.xxx的内网ip?内网ip还要ddns干嘛?

多拨多接口就ifconfig加接口名字,ip route绝对不是最佳用法
回复 支持 反对

使用道具 举报

发表于 2021-5-11 10:13 | 显示全部楼层
有些固件busybox集成ip命令,有些不集成,这个比较烦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-23 21:25 | 显示全部楼层
rightuser2 发表于 2021-5-11 00:29
本地判断,并不需要调用api,判断ip变化后才调用api更新

没明白你说的a类ip啥意思,pppoe拨号获得192. ...

嗯 其实你提醒了一下 可以第一次运行的时候echo出dnspod内的IP信息
以后只要判断本地的文件即可
如果不对 在push
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-23 21:25 | 显示全部楼层
wulishui 发表于 2021-5-11 10:13
有些固件busybox集成ip命令,有些不集成,这个比较烦

好像都有ip 这个命令吧..  
回复 支持 反对

使用道具 举报

发表于 2021-5-25 11:41 | 显示全部楼层
gbam 发表于 2021-5-23 21:25
嗯 其实你提醒了一下 可以第一次运行的时候echo出dnspod内的IP信息
以后只要判断本地的文件即可
如果不 ...

不需要获取远程的ip,每次更新ddns时把当前的ip记录到本地文件,下次跟这个文件内的ip做对比
回复 支持 反对

使用道具 举报

发表于 2021-9-28 22:39 | 显示全部楼层
谢谢你的分享这个东西稳定吗,会不会出现不解析的情况呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-6-12 10:26

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表