我们在工作时有一台 Microsoft SBS 2011 服务器,它负责处理我们公司的 DHCP 和 DNS。我们在 SBS 本身的共享目录中存储了一个 Excel 电子表格,其中包含我们拥有的所有公共 IP 地址。我们不断手动更新该 Excel 文档。如果我们可以使用这些 IP 地址的短名称动态更新我们的 DNS 服务器,那就太好了,这样当有人使用我们域上的任何机器 ping 或尝试连接到其中一个公共 IP 时,他们只需写出一个短名称,而不是整个 IP。
目前,我让 Linux 使用 bash 循环浏览该 excel 文档一次,并生成一个 Windows hosts 文件,人们可以手动将其复制到 C:\Windows\System32\Drivers\etc\hosts 中。这很有效,但需要将其复制粘贴到域中的每台机器上,而且它不是动态的 - 这正是 DNS 被发明的原因。
有没有办法让我们的 SBS 甚至 Linux 不断浏览 excel 文件并使用指向公共 IP 的一些简单记录更新 SBS AD DNS 服务器?映射的示例可能是:
123456r 196.16.56.56
123458r 196.65.89.56
我认为这些就是我们需要的 A 记录。如果我们不需要在这些条目中附加任何类型的域名,而只是让它们像这些示例一样简单,那就太好了。有什么好方法可以实现这一点?
答案1
你可以用 powershell 来做,但你需要将文件类型更改为 csv
请看这里。https://gallery.technet.microsoft.com/scriptcenter/Update-DNS-records-with-da10910d您将找到以下 powershell 脚本,只需将其设置为定期计划任务或用户可以自行运行的任务即可。我最近使用它对分布在许多区域中的 ips 进行了大规模更新,效果很好。
# Environment Setup
$DNSServer = "YourDNSServer"
$DNSZone = "YourZoneName"
$InputFile = "dnsrecords.csv"
# Read the input file which is formatted as name,type,address with a header row
$records = Import-CSV $InputFile
# Now we loop through the file to delete and re-create records
# DNSCMD does not have a modify option so we must use /RecordDelete first followed by a /RecordAdd
ForEach ($record in $records) {
# Capture the record contents as variables
$recordName = $record.name
$recordType = $record.type
$recordAddress = $record.address
# Build our DNSCMD DELETE command syntax
$cmdDelete = "dnscmd $DNSServer /RecordDelete $DNSZone $recordName $recordType /f"
# Build our DNSCMD ADD command syntax
$cmdAdd = "dnscmd $DNSServer /RecordAdd $DNSZone $recordName $recordType $recordAddress"
# Now we execute the command
Write-Host "Running the following command: $cmdDelete"
Invoke-Expression $cmdDelete
Write-Host "Running the following command: $cmdAdd"
Invoke-Expression $cmdAdd
}