使用指定 DNS 服务器解析域名并更新 hosts 绑定

Eric 杂记 381 次浏览 抢沙发

为解决一个小众需求写的 Shell 脚本,记录分享下。它可以以指定 DNS 服务器解析设置域名,并将结果更新 hosts 文件绑定。

脚本流程:指定 DNS 服务器解析目标域名,将结果储存到临时文件 -> 判断解析是否成功再继续 -> 当解析成功,将最新解析 IP 替换之前 hosts 里绑定的 IP -> 当解析失败,删除临时文件。

安装依赖组件,这里使用 dig 命令获取域名解析,因此需要安装相应软件包。

# RHEL & CentOS
yum -y install bind-utils

# Debian & Ubuntu
apt-get -y install dnsutils

脚本代码:

#!/usr/bin/env bash

if dig @8.8.8.8 www.example.com +short > /tmp/digout 2>&1
then
    now_ip=$(awk '/www.example.com/ {print $1}' /etc/hosts)
    new_ip=$(cat /tmp/digout | tail -n1)
    sed -i "s/$now_ip/$new_ip/" /etc/hosts
else
    rm -f /tmp/digout
fi

使用方法:

# 新建脚本文件
vi /root/dig_hosts.sh

# 赋予运行权限
chmod +x /root/dig_hosts.sh

# 使用 crontab -e 命令添加定时任务。例如设置每天上午 9 点 30 运行
30 9 * * * /root/dig_hosts.sh > /dev/null 2>&1

注:在使用脚本前,需要先手动在 hosts 里绑定好域名,不然运行脚本将找不到替换目标。

发表评论

电邮地址用于 Gravatar 头像显示,不会被公开可见。