能根据ping值自动切换dns记录的工具

39次阅读

共计 2115 个字符,预计需要花费 6 分钟才能阅读完成。

有没有一个 docker 镜像或者 python 脚本,能 ping 测试 ip 延迟,如果 ping 值大于 300ms,就修改相应的 DNS 的 A 记录

我的使用场景是又个香港服务器,有时如果被打 ip 就绕路到美国地址了,相应的 ping 值就高了,那我就要切换 dns 的 A 记录,把域名解析到新加坡服务器上,有以上的解决方案吗?

网友回复:

注册 我以前做过类似的, 这个东西太简单,用 python 有点大材小用,用 shell 就完成了,我用的是 dns.he.net 的 Dynamic DNS Record 功能,先要在 dns.he.net 新建一个 a 记录,开启 Enable entry for dynamic 功能 然后点击新建的 a 记录(下面的 dyn.example.com) 后的 ddns 选项图标生成 dynamic  key(下面的的 passwd 用于认证)然后新建一个定时任务 shell cd /root vi  ddns.sh 加入以下代码自己定义代码 #!/bin/bash #定义大于该值时,dns 更新 i=300 while true; do #定义取 ping 某个 ip 的平均值,c 后是 ping 次数,理论上数值越大越准确,默认是 3。a=`ping   -c 3 -i 0.2 -W 3  8.8.8.8|grep avg|awk ‘{print $4}’|awk -F ‘/’ ‘{print $3}’|awk ‘{print int($0)}’` echo $i echo $a date if [$a -gt $i] then     #延迟大于设定值 i 时将 dyn.example.com 的 a 记录改为 192.168.0.1     curl -s “https://dyn.dns.he.net/nic/update?hostname=dyn.example.com&password=password&myip=192.168.0.1”     echo “a > i, DNS uplpad” else    #延迟小于设定值 i 时将 dyn.example.com 的 a 记录改为 192.168.0.2     curl -s  “https://dyn.dns.he.net/nic/update?hostname=dyn.example.com&password=password&myip=192.168.0.2”     echo “a <= i,DNS uplpad” fi #定义间隔时间,默认 30 秒 sleep 30 done 复制代码 给权限 chmod  +x  /root/ddns.sh 复制代码 后台运行 nohup ./ddns.sh& 复制代码 查看日志 tail -f nohup.out

Right 阿里云全局解析

咯拉无米 我看收费的,太贵了

Hude 要接入 dns 提供商的 api,很繁琐的工作 自用针对特定的一两个 dns 提供商写一个不难

Right 可以自己写个 bash 脚本,用 cf 的 API 自动修改 DNS 记录

aru Azure 的 Traffic Manager 根据延时返回结果好像可以,其他的应该也支持

henrry 感谢大佬 @咯拉无米 的思路,我使用的是 dnspod,稍为修改了一下支持在我的云服务器上运行 部分代码我加了 #,以支持 crontab 定时运行,每小时运行一次 #!/bin/bash #定义大于该值时,dns 更新 i=100 #while true; do #定义取 ping 某个 ip 的平均值,c 后是 ping 次数,理论上数值越大越准确,默认是 3。a=`ping   -c 3 -i 0.2 -W 3  192.168.2.1|grep avg|awk ‘{print $4}’|awk -F ‘/’ ‘{print $3}’|awk ‘{print int($0)}’` echo $i echo $a date if [$a -gt $i] then     #延迟大于设定值 i 时将 dyn.example.com 的 a 记录改为 192.168.2.1     #修改 login_token 值,domain 值,record_id 值,sub_domain 值,value 值,下同     curl -X POST https://dnsapi.cn/Record.Modify -d ‘login_token=XXX,XXX&format=json&domain=example.com&record_id=13511117&sub_domain=dyn&value=192.168.2.1&record_type=A&record_line=%E9%BB%98%E8%AE%A4’     echo “a > i, DNS uplpad” else    #延迟小于设定值 i 时将 dyn.example.com 的 a 记录改为 192.168.2.2     curl -X POST https://dnsapi.cn/Record.Modify -d ‘login_token=XXX,XXX&format=json&domain=example.com&record_id=13511117&sub_domain=dyn&value=192.168.2.2&record_type=A&record_line=%E9%BB%98%E8%AE%A4’     echo “a <= i,DNS uplpad” fi #定义间隔时间,默认 30 秒 #sleep 3600 #done 复制代码

正文完
 0