V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zsg1994
V2EX  ›  程序员

阿里云域名动态 IP 解析 Shell 小脚本

  •  
  •   zsg1994 · 2020-03-30 15:25:12 +08:00 · 3143 次点击
    这是一个创建于 1702 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github:https://github.com/risfeng/aliyun-ddns-shell

    当你手里面有一个闲置的域名,有一个漂浮不定的外网 ip,你又想在外网 ip 变更后自动解析到域名上,此情此景此脚本可能会帮上你。


    使用步骤:

    • 在阿里云域名管理中解析自己的域名
      • 记录类型:A
      • 主机记录:按你需要输入
      • 解析路线:默认(随你)
      • 记录值:随便输入一个 Ip 地址(运行脚本后会自动更新到正确的)
      • TTL 值:10 分钟
    • 需要通过阿里云域名解析 Api 操作,所以需要申请阿里云的 Acesskeys
    • 运行自动解析域名脚本
      • git clone https://github.com/risfeng/aliyun-ddns-shell.git
      • aliyun-ddns.sh 脚本赋可执行权:chmod +x aliyun-ddns-shell/src/aliyun/aliyun-ddns.sh
      • 运行脚本,根据提示进行配置(第一次运行需要配置)
      • 如需要使用钉钉自定义机器人推送成功失败消息,请新建自定义钉钉机器人,配置 access_token 和消息加签密钥
      • 脚本支持 2 种运行方式:
        • 直接运行脚本根据提示选择需要使用的功能
            > aliyun-ddns.sh (mac: > bash aliyun-ddns.sh)
            1.配置并执行脚本
            2.仅配置
            3.仅执行脚本
            4.恢复出厂设置
            5.清理日志文件
            0.退出
    
    
        - 带参数运行:
    
            aliyun-ddns.sh -config -run     配置并执行脚
            aliyun-ddns.sh -run             执行脚本(前提需要有配置文件)
            aliyun-ddns.sh -config          仅配置信息
            aliyun-ddns.sh -restore         恢复出厂设置(会清除配置文件等)
            aliyun-ddns.sh -clearn          清理日志文件
            aliyun-ddns.sh -version         显示脚本说明及版本信息
    
    
    • 实时监听外网 IP 变更后自动解析到域名
      • 利用定时任务服务:crond
      • 检测是否安装:crond -V 有输出版本号即已安装。
      • 如未安装:yum install vixie-cron crontabs -y 如有疑问请自行查找资料解决
      • crond 服务常用命令
        service crond status   # 查看服务运行状态  
        service crond start    # 启动服务
        service crond stop     # 停止服务 
        service crond restart  # 重启服务  
        service crond reload   # 不中断服务,重新载入配置 
        crontab -e             # 编辑配置文件 
        crontab -l             # 列出某个用户的任务计划
    
    
    - 配置任务定时任务
        - 建议不要把任务执行频率设置小于等 10,因为域名解析记录生效时间最短理论上是 10 分钟,往往都会超过 10 分,建议 15-20 分钟。
        - 开始配置
    
            crontab -e
            # 按 i 进入标记模式
            # 输入:
            */20 * * * * XXXXXX/aliyun-ddns-shell/src/aliyun/aliyun-ddns.sh -run >> XXXX/aliyun-ddns-shell/src/aliyun/crontab-log.log
            # 说明:
            # */20 * * * * :每 20 分钟执行一次 需要执行都脚本全路径 >> 执行日志输出位置全路径
            # 按 esc 后 输入:wq 回车 保存并退出
    
    
        - 重新加载配置:`service crond reload`
        - 注意观察任务是否成功执行,如有疑问请自行百度
    

    效果图

    启动页面 配置页面 运行页面

    欢迎 star 给予支持

    GitHub


    版权声明:本文为 ByteBlogs 博主「 risfeng 」的原创文章。
    原文链接: https://www.byteblogs.com/article/488

    8 条回复    2020-04-02 17:40:38 +08:00
    koolpass
        1
    koolpass  
       2020-03-30 15:59:42 +08:00
    感谢 已经加星
    zsg1994
        2
    zsg1994  
    OP
       2020-03-30 16:05:05 +08:00
    @koolpass 感谢支持
    chwhsen
        3
    chwhsen  
       2020-03-30 16:07:05 +08:00
    如果路由器是 openwrt 或者 lede 的话,没必要做定时任务;把脚本放在 hotplug 文件夹下就行了;有奇效
    goodryb
        4
    goodryb  
       2020-03-30 16:08:03 +08:00
    强烈建议使用子账号,只授予 DNS 解析配置权限。

    主账号风险太高了
    zsg1994
        5
    zsg1994  
    OP
       2020-03-30 16:08:57 +08:00
    @goodryb 感谢您的建议,我会考虑的。
    syuraking
        6
    syuraking  
       2020-03-30 16:55:06 +08:00
    建议添加 IPV6 支持
    zsg1994
        7
    zsg1994  
    OP
       2020-03-30 16:59:39 +08:00
    @syuraking 好的,后面版本加上,可以 star 支持一下
    frlee
        8
    frlee  
       2020-04-02 17:40:38 +08:00
    优点是他确实可以用,缺点是。。。

    臃肿庞大 修改 shell 几个配置就好 还搞什么配置文件 配置文件目录在 debian 下目录是这样的 : /home/xxx/'~' 看起来很迷惑

    再者,不需要先判断 ip 是否为新获取的吗,ip 不更新时每次运行脚本请求阿里云返回'The DNS record already exists' 你先判断为接口请求失败 最后又提示记录更新成功。。。

    感觉刚需的功能没做好 一大堆没用的东西倒是加不少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1057 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:18 · PVG 04:18 · LAX 12:18 · JFK 15:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.