【问题标题】:DNS A record and PTR record deleteDNS A 记录和 PTR 记录删除
【发布时间】:2018-08-20 15:30:14
【问题描述】:

添加新实例时,我的 DNS 记录中有重复项。如果找到新的实例 IP,我的目标是使用“nsupdate”能够通过 IP 删除 A 记录。这就是我所做的。但是,运行此脚本时它没有删除任何重复项。最好的走走是什么?

domain=${domainname}
nodename=(hostname | awk -F. '{print $1}')
local_ip=$(ifconfig eth0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')     
nslookup ${local_ip} | grep SERVFAIL
if [[ $? < 0 ]] ; then
echo "Record already exists"
echo -e "update  ${local_ip} IN A"
else
echo "creating forward Record: ${codename}.${domain}"
echo -e "update add ${nodename}.${domain} 3600 A ${local_ip}\nsend" | nsupdate -g
fi 

【问题讨论】:

  • 您的代码中似乎有几个拼写错误以及逻辑上的不一致。例如,在更新时,您不会在第 7 行通过管道将您的命令传递给 nsupdate
  • FWIW,你的很多问题都可以通过简单的校对来解决。
  • “这是我做的。请帮忙” - 请帮忙做什么?您没有说明问题或错误。 (以及 +1 用于询问与编程和开发有关的 Bash 问题)。
  • 我说明了问题。你能读一下我的脚本打算实现的目标吗?

标签: linux bash scripting dns system-administration


【解决方案1】:

看来你有几个问题

Grep 不会返回小于 0 的值,因此执行更新的代码将永远不会运行。即使它确实运行了,您也不会将该命令回显到 nsupdate,因此您的记录仍然不会更改。此外,您的代码中有几个拼写错误

domain=${domainname}
nodename=(hostname | awk -F. '{print $1}')
local_ip=$(ifconfig eth0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')     
if nslookup ${local_ip} | grep SERVFAIL; then
    echo "creating forward Record: ${nodename}.${domain}"
    echo -e "update add ${nodename}.${domain} 3600 A ${local_ip}\nsend" | nsupdate -g
else
    echo "Record already exists"
    echo -e "update  ${local_ip} IN A" | nsupdate -g
fi 

我个人从未使用过 nsupdate,但我假设您打算以与“添加”相同的方式将更新命令发送给它。

【讨论】:

  • 如果新的实例 IP 已经存在于 A 记录(DNS) 中,脚本应该在添加新的实例 IP 之前将其删除。如果我不这样做,这两个实例将具有相同的 IP 地址
  • 如果您有两个实例在同一子网上使用相同的 IP,那么 DNS 是您最不必担心的问题。此外,据我所知,您的脚本不会尝试 删除任何内容。如果您有问题,我不介意提供帮助,但这不是开发服务。您的“问题”在各种方面都被错误地框定,最大的(尽管不是孤立的)是写得不好的脚本,带有简单的印刷错误。你应该从man nsupdate 开始而不是在这里发帖,因为你需要知道的一切,结合我写的代码,都在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多