Skip to content

这个库是阿里云的ddns,用java1.5写的,可以放在mipsel-openwrt路由器中

Notifications You must be signed in to change notification settings

924060929/aliyun_ddns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简介

这个库调用阿里云的云解析API做到动态域名解析,使用Java 1.5编写,可以放在路由器的openwrt系统中运行

参考了阿里云SDK的源码,并做精简

安装运行

  1. 使用maven编译
    mvn package
    
  2. 从aliyun_ddns/target中获取aliyun_ddns.jar,将其上传到路由器或服务器上
  3. 在aliyun_ddns.jar同级目录中编写config.properties,内容如下:
    # 区域ID,一般填写cn-hangzhou即可
    regionId=<regionId>
    # 阿里云API访问ID
    accessKeyId=<accessKeyId>
    # 阿里云API访问秘钥
    secret=<secret>
    # 域名
    domainName=<example.com>
    # 匹配RR的正则表达式
    recordPattern=
    
    请参考如何选择 RegionId地域和可用区获取AccessKey
    recordPattern填写正则表达式,用来匹配RR的值。RR指的是二级url,如@wwwwap等。只有匹配了recordPattern的、而且是A记录的才会被匹配,只匹配第一个。如果不填写recordPattern的值,则会找到第一个A记录进行匹配
  4. 运行aliyun_ddns.jar即可,
    java -jar aliyun_ddns.jar
    

代码逻辑

  1. DescribeDomainRecords接口获取域名解析记录列表
  2. 用正则表达式去匹配查找域名解析记录及其记录值(获取记录的ip)
  3. 获取公网ip
  4. 判断公网ip和域名解析记录的值是否相等,如果不等则使用UpdateDomainRecord接口去修改记录,否则不做修改

注意事项

  1. 这个库只修改域名解析记录的值,不添加记录,因此需要先手动在阿里云云解析中增加记录
  2. 如果修改解析记录成功,则退出码(exit code)是66;不修改则是0,其他退出码代表出错。可以编写一个shell脚本来对退出码进行判断做特殊逻辑
  3. 请不要在意我那蹩脚的英文日志,本来我是输出中文日志的,但我那破路由器跑java有乱码QAQ,我不知道怎么解决所以才改成英文日志的

定时任务脚本

/root/ddns/ddns.sh:

#!/bin/sh

# 加载环境变量
. /etc/profile > /dev/null

basepath=$(cd `dirname $0`; pwd)
cd "$basepath"

mkdir -p "$basepath/logs"
time_var=$(date '+%Y-%m-%d %H:%M:%S')
log_file="$basepath/logs/$time_var.log"

java -jar aliyun_ddns.jar 1>$log_file 2>&1

exit_code=$?
if [ $exit_code -eq 0 ]; then
  # 大部分情况下ip没有变化,此时不需要记录日志
  rm "$log_file"
else
  date_var=${time_var:0:10}
  mkdir -p logs/$date_var
  # 修改失败或修改成功的日志将会记录到logs/yyyy-MM-dd/目录中
  if [ $exit_code -eq 66 ]; then
    mv "$log_file" "$basepath/logs/$date_var/${time_var}_success.log"
  else
    mv "$log_file" "$basepath/logs/$date_var/${time_var}_fail.log"
  fi
fi

crontab配置每分钟定时检查:

* * * * * sh /root/ddns/ddns.sh

开机启动,配置/etc/rc.local

sh /root/ddns/ddns.sh

About

这个库是阿里云的ddns,用java1.5写的,可以放在mipsel-openwrt路由器中

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages