Luotianyi

「一个“反人类”解析记录变更需求的实现」

| 代码片段,技巧向 | 507字

需求

说是“反人类”其实有点标题党了,那么这里列一下具体的需求吧

  • 应用服务器全部在国内某云
  • 通过Nginx反向代理这些应用
  • Nginx放在非大陆的服务器
  • 非大陆服务器与某云的服务器通讯不同时间段通讯质量不一
  • 非大陆服务器某种程序上可能还存在受到长城防火墙的干扰

由于上面最后两点的原因,所以还要做的一个就是

  • 非大陆服务器选两个不同机房(线路)服务器

最后就是:
域名的A记录只指向一个IP,也就是说只有一台服务器对外工作。
当前域名指向的IP所在的服务器一旦发生故障,需要及时更新A记录到另外的线路节点上去。

当然,最坏的情况就是非大陆的服务器全部故障了,还是要把线路切换到某云上来。
还有,切到某云后要在一定时间后再次切换线路出去。

听着可能有点一头雾水的样子....说白了就是要实时根据连接好坏,如果连接情况差就自动切换线路。

那么就用shell写一个吧。

简要说明

依赖服务

目标

  • 根据站点当前的超时状况自动更新记录的解析值
  • 连连超时微信通知
  • 更新记录微信通知结果

实现

TIME_INTERVAL()
函数对上次更新解析记录做间隔判断,切换到最稳定线路后至少1小时后方可再更新解析记录。
TIME_OUT()
函数对监控的服务器进行超时检测,当连续3次超过7秒没有收到其回应认定访问超时。
UPDATE_DNS_1()
脚本

curl -X PUT "https://api.cloudflare.com/client/v4/zones/462fcdeaab0f3e9c4d90d5c06c722dee/dns_records/a2ac6dbb488378c116e4c12989c02b20" \
-H "X-Auth-Email: 0@lvmoo.com" \
-H "X-Auth-Key: dc70e6beb51a4947bbc2fb7c5312701a26da3" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"lvmoo.com","content":"3.3.3.3","ttl":1,"proxied":false}

作用:用于更新解析记录
可以参照Cloudflare官方API进行设置。
脚本

curl https://pushbear.ftqq.com/sub --data 'sendkey=3920-fec0e0ffc173ae055c227f65c3748a08&text='$text2'&desp='$desp2''  --compressed

作用:微信通知

举个栗子

我把代码贴到Github

总之,不会再有人会遇到这样的需求吧😓

-EOF-

上一篇: 浅谈SNI 兼容性导致 HTTPS 出错问题

下一篇: 肥宅快乐站の日常

Kay

@2018-06-20 11:15:17

SHELL DNS 解析
文章有 7 条评论
  1. 远哥制造
  2. 小霖

    各种key那么逼真吓得我还以为你没删 →_→

    1. Kay

      你是不是还真的执行了一遍

  3. 香菇

    动图很棒o(////▽////)q

    1. Kay

      方糖自个画的,我只是一个搬运工~

  4. 夏目贵志

    标题让我误解了 原来是这样∠( ᐛ 」∠)_

    1. Kay

      哈哈哈哈哈哈 我自己读起来都很绕⌇●﹏●⌇

评论的人最可爱~