Параметры DNS на серверах обычно настраиваются вручную. Выполнение массовых обновления, когда необходимо заменить адреса DNS-серверов или изменить их порядок, может стать серьезной проблемой для администраторов, особенно в средних или крупных ЦОД.

В этой статье рассматриваются методы, которые позволяют централизованно управлять конфигурациями DNS на серверах, а также проверить соответствие конфигурации DNS корпоративному стандарту.

Использование SCCM для централизованного управления обновлениями и параметрами соответствия конфигурации DNS:

SCCM является лучшим кандидатом для обработки массовых проверок и обновления конфигурации DNS на серверах, которые находятся под его управлением. Дело в том, что Параметры Соответствия это функция, которая позволяет настраивать правила соответствия для обнаружения текущих конфигураций и исправлению последствий несоблюдения, если это требуется.

Все, что вам нужно это:

  • Сценарий PowerShell, для проверки соответствия конфигурации DNS стандарту вашей компании
  • Сценарий PowerShell для обновления конфигурации DNS, если сервер не соответствует стандартам вашей компании.
  • Элемент и шаблон соответствия конфигурации SCCM для выполнения проверки соответствия и восстановления, если это потребуется.
Ниже приводится сценарий Powershell, который может использоваться для проверки, что конфигурация DNS сервера соответствует стандарту вашей компании сценарий был разработан для проверки первичного и вторичного DNS-серверов). Вам нужно заменить переменные $server1 и $server2 IP-адресами DNS-серверов, которые используются в вашей среде. Сценарий возвратит значение Compliant, если конфигурация DNS-сервера соответствует вашему стандарту и Not Compliant если это не так.
###############################################################
 
# CheckDNSConfiguration_v1.0.ps1
 
# input : n/a
 
# output : none (logs)
 
# Version 1.0
 
# Changelog : n/a
 
# MALEK Ahmed - 15 / 04 / 2013
 
###################
 
        
 
        
 
##################
 
#--------Main
 
##################
 
$server1 = "x.x.x.x"
 
$server2 = "y.y.y.y"
 
$IPList = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .
 
$i = 0
 
$nicwithdnscount = 0
 
$conformity = "Not Compliant"
 
if ($IPList.Count -ne $null)
 
{
 
while ($i -ne $IPList.Count)
 
    {
 
try{
 
if ($IPList[$i].DNSServerSearchOrder[0] -ne $null)
 
            {
 
$nicwithdnscount++
 
           }
 
if (($IPList[$i].DNSServerSearchOrder[0] -ne $null) -and ($IPList[$i].DNSServerSearchOrder[1] -ne $null))
 
           {
 
if (($IPList[$i].DNSServerSearchOrder[0] -eq $server1) - ($IPList[$i].DNSServerSearchOrder[1] -eq $server2))
 
              {
 
$conformity = "Compliant"
 
              }
 
else
 
              {
 
$conformity = "Not Compliant"
 
              }
 
         }
 
    }
 
catch
 
    {
 
    }
 
$i++
 
if ($nicwithdnscount -ne 1)
 
    {
 
$conformity = "Not Compliant"
 
    }
 
    }
 
}
 
else
 
{
 
try{
 
if ($IPList.DNSServerSearchOrder[0] -ne $null)
 
            {
 
$nicwithdnscount++
 
            }
 
if (($IPList.DNSServerSearchOrder[0] -ne $null) -and ($IPList.DNSServerSearchOrder[1] -ne $null))
 
           {
 
if (($IPList.DNSServerSearchOrder[0] -eq $server1) -and ($IPList.DNSServerSearchOrder[1] -eq $server2))
 
              {
 
$conformity = "Compliant"
 
              }
 
else
 
              {
 
$conformity = "Not Compliant"
 
              }
 
         }
 
    }
 
catch
 
    {
 
    }
 
}
 
Return $conformity

Ниже приводится сценарий Powershell, который может использоваться для обновления DNS конфигурации, если сервер не является совместимым со стандартами вашей компании (сценарий был разработан для обновления первичного и вторичного серверов DNS, если это требуется). Вам просто нужно заменить переменные $server1 и $server2 IP-адресами DNS-серверов, которые вы используете в своей среде.
###############################################################
 
# RemediationDNSConfiguration_v1.0.ps1
 
# input : n/a
 
# output : none (logs)
 
# Version 1.0
 
# Changelog : n/a
 
# MALEK Ahmed - 26 / 04 / 2013
 
###################
 
        
 
        
 
##################
 
#--------Main
 
##################
 
$server1 = "x.x.x.x"
 
$server2 = "y.y.y.y"
 
$IPList = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .
 
$i = 0
 
$nicwithdnscount = 0
 
$conformity = "Not Compliant"
 
if ($IPList.Count -ne $null)
 
{
 
while ($i -ne $IPList.Count)
 
    {
 
try{
 
if ($IPList[$i].DNSServerSearchOrder[0] -ne $null)
 
       {
 
$nicwithdnscount++
 
       }
 
if (($IPList[$i].DNSServerSearchOrder[2] -eq $null))
 
        {
 
if (($IPList[$i].DNSServerSearchOrder[0] -ne $null) -and ($IPList[$i].DNSServerSearchOrder[1] -ne $null))
 
           {
 
if (($IPList[$i].DNSServerSearchOrder[0] -eq $server1) -and ($IPList[$i].DNSServerSearchOrder[1] -eq $server2))
 
              {
 
$conformity = "Compliant"
 
              }
 
else
 
              {
 
$conformity = "Not Compliant"
 
              }
 
         }
 
     }
 
    }
 
catch
 
    {
 
    }
 
$i++
 
if ($nicwithdnscount -ne 1)
 
    {
 
$conformity = "Not Compliant"
 
    }
 
    }
 
}
 
else
 
{
 
try{
 
if ($IPList.DNSServerSearchOrder[0] -ne $null)
 
        {
 
$nicwithdnscount = $nicwithdnscount + 1
 
        }
 
if (($IPList.DNSServerSearchOrder[2] -eq $null))
 
        {
 
if (($IPList.DNSServerSearchOrder[0] -ne $null) -and ($IPList.DNSServerSearchOrder[1] -ne $null))
 
           {
 
if (($IPList.DNSServerSearchOrder[0] -eq $server1) -and ($IPList.DNSServerSearchOrder[1] -eq $server2))
 
              {
 
$conformity = "Compliant"
 
              }
 
else
 
              {
 
$conformity = "Not Compliant"
 
              }
 
         }
 
     }
 
    }
 
catch
 
    {
 
    }
 
}
 
$i = 0
 
if (($conformity -eq "Not Compliant") -and ($nicwithdnscount -eq 1))
 
    {
 
if ($IPList.Count -ne $null)
 
        {
 
while ($i -ne $IPList.Count)
 
           {
 
try{
 
if ($IPList[$i].DNSServerSearchOrder[0] -ne $null)
 
               {
 
$arrDNSServers = $server1, $server2
 
$IPList[$i].SetDNSServerSearchOrder($arrDNSServers)
 
               }
 
           }
 
catch
 
           {
 
           }
 
$i++
 
        }
 
    }
 
else
 
    {
 
try{
 
if ($IPList.DNSServerSearchOrder[0] -ne $null)
 
            {
 
$arrDNSServers = $server1, $server2
 
$IPList.SetDNSServerSearchOrder($arrDNSServers)
 
            }
 
        }
 
catch
 
        {
 
        }
 
    }
 
}

Для создания элемента SCCM соответствия параметров и базовых обратитесь к следующей статье Microsoft:

Параметры соответствия в Configuration Manager:http://TechNet.Microsoft.com/en-US/Library/gg681958.aspx 


Примечание: Вам нужно будет установить, что настройки DNS сервера соответствуют требованиям, если значение, возвращаемое сценарием Powershell равно Compliant


После того, как вы подготовили новый шаблон соответствия параметров SCCM, необходимо применить его на целевой коллекции (можно создать несколько шаблонов соответствия параметров для применения различных конфигураций DNS на различных коллекциях).

Еще одним преимуществом использования SCCM является то, что он позволяет формировать отчеты, а это позволяет иметь лучшее представление о состоянии параметров соответствия и их восстановления. 

Использование стартового скрипта GPO для управление обновлениями конфигурации DNS:

Для управления обновлением и соответствием параметров DNS также возможно использование стартового сценария GPO.

По сравнению с SCCM, этот метод имеет следующие недостатки:

  • Изменения могут применяться только после перезагрузки серверов
  • Нет возможности следить за состоянием процессов проверки и приведения параметров в соответствие стандарту.

Для управления обновлениями конфигурации DNS с помощью стартового сценария GPO, можно поступить следующим образом:

  • Создать новый объект GPO , а затем перейти к Конфигурация компьютера > Политики > Конфигурация Windows > Сценарии (Запуск/Завершение) и затем дважды щелкните на Автозагрузка.

  • Выберите вкладку сценарии Powershell , а затем добавить сценарий восстановления (это второй сценарий, рассмотренный в разделе «Использование SCCM для централизованного управления обновлениями и соответствия конфигурации DNS»)

После этого необходимо связать объект групповой политики к целевому сайту или Организационной единице (OU).


Другие языки


English: Wiki: Central Management of DNS Configuration Compliance and Updates (en-US)