标签: aws

  • 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