aws服务器ddns使用cloudflare域名

前言

我有一台日本的aws服务器,ip经常不能访问,好在aws可以免费更换静态ip,但是随之而来的问题来了,更换完ip,域名解析也得修改。

可不可以每次我修改完服务器的ip,域名解析也自动修改?

当然可以!

解决问题的原理

可以在服务器上写一个脚本,每隔5分钟,检查一下服务器的公网ip和域名解析的ip是否一致,不一致的话修改成一致,一样的话就不用操作

工具选择

代码语言 NODEJS

因为域名是在cloudflare上注册,所以在npm库里搜索了一下有没有现成的工具,这样就避免重复制造轮子

我搜关键词 cloudflare ddns

找到了一个叫cloudflare-ddns-sync的npm包

一 安装nodejs

在之前的文章中已经提到过,这里不再赘述,需要的朋友可以查看链接

二 node代码编写

新建项目文件夹并进入项目

mkdir cloudflare-ddns && cd cloudflare-ddns

初始化项目

npm init -y

npm安装需要的包

npm install cloudflare-ddns-sync

vim index.mjs
import Cddnss from 'cloudflare-ddns-sync'

//实例化
const cddnss = new Cddnss({
  token: '你自己的cloudflare网站的token',
});

// 获取本地ip
const localIp = await cddnss.getIp()

//获取解析的域名
const recordsOnline = await cddnss.getRecordDataForDomain('youdomain.com')



const oneRecordArr =  recordsOnline.filter(record=>{
  return record.name == 'youdomain.com' && record.type == 'A'
})

// dns解析的ip
const onlineIp = oneRecordArr[0].content

console.log('本地ip',localIp)
console.log('dns解析的ip',onlineIp)

if(localIp != onlineIp ){
  const myRecord = {
    name: "youdomain.com",
    type: "A",
    content: localIp
  }
  const result = await cddnss.syncRecord(myRecord)
}

三 crontab定时任务编写

查看当前定时任务

crontab -l

编辑定时任务

crontab -e
//分 时 天 月 周
*/5 * * * * node /path/to/cloudflare-ddns/index.mjs

这里需要注意一个问题就是,有可能定时任务没有找见node,没有执行成功,我们需要找到node的目录,并加入到全局路径中$PATH

which node

评论

发表回复