Создание dns записи powershell

Обновлено: 07.07.2024

В этой статье мы рассмотрим особенности настройки параметров сетевых адаптеров в Windows из PowerShell. Посмотрим, как узнать и назначить статический IP адрес, DNS сервера, или настроить сетевой интерфейс на получение конфигурации IP от DHCP сервера. Вы можете использовать эти командлеты для настройки сети в Сore/Nano версиях Windows Server, в Hyper-V Server , изменения настроек IP на удаленных компьютерах или по сети серверах или в PS скриптах.

Ранее для настройки параметров сети в Windows из CLI использовалась команда netsh interface ipv4. В PowerShell 3.0 и выше для управления сетевыми настройками Windows можно использовать встроенный PowerShell модуль NetTCPIP .

Чтобы получить список командлетов в этом модуле, выполните:

get-command -module NetTCPIP

В этот модуль также входит командлет Test-NetConnection , который можно использовать для проверки доступности TCP портов на удаленных компьютерах.

Управление сетевыми адаптерами из PowerShell

Выведем список доступных сетевых интерфейсов компьютера:

Командлет возвращает имя интерфейса, состояние (Up/Down), MAC адрес, скорость на порту.

В этом примере у меня на компьютере несколько сетевых адаптеров (кроме физического подключения Ethernet0 есть несколько сетевых интерфейсов от Hyper-V и VMWare Player).

Вы можете обращаться к сетевым интерфейсам по их именам или индексам (столбец ifIndex). В нашем примере, чтобы выбрать физический LAN адаптер Intel 82574L нужно набрать команду:

Get-NetAdapter -Name "Ethernet0"

Get-NetAdapter -InterfaceIndex 8

Можно изменить имя адаптера:

Rename-NetAdapter -Name Ethernet0 -NewName LAN

Чтобы выключить сетевой интерфейс, используйте команды:

Get-NetAdapter -InterfaceIndex 13| Disable-NetAdapter

При включении интерфейса нельзя указать его индекс, т.к. он не присвоен. Можно указать имя адаптера или его описание.

Enable-NetAdapter -InterfaceDescription “Hyper-V Virtual Ethernet Adapter"

Если для адаптера указан VLAN , можно вывести его так:

Get-NetAdapter | ft Name, Status, Linkspeed, VlanID

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

Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName

Информация о физических сетевых адаптерах (PCI слот, шина и т.д.).

Просмотр настроек TCP/IP сетевого интерфейса из PowerShell

Получить текущие настройки сетевого интерфейса (IP адрес, DNS, шлюз):

Get-NetIPConfiguration -InterfaceAlias Ethernet0

Чтобы вывести более подробную информацию о конфигурации сетевого интерфейса, используйте команду:

Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed

Получить значение только IP адрес интерфейса:

(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Address

Настроить статический IP адрес из PowerShell

Попробуем задать статический IP адрес для сетевого интерфейса. Чтобы изменить IP адрес, маску подсети и шлюз для сетевого интерфейса:

New-NetIPAddress –IPAddress 192.168.1.80 -DefaultGateway 192.168.1.1 -PrefixLength 24 -InterfaceIndex 8

Можно задать IP адрес, представив его в виде более массива (более наглядно):

$ipParams = @InterfaceIndex = 8
IPAddress = "192.168.1.22"
PrefixLength = 24
AddressFamily = "IPv4"
>
New-NetIPAddress @ipParams

Командлет New-NetIPAddress можно использовать для добавления второго IP адреса на сетевой интерфейс .

Если статический IP адрес уже настроен и нужно изменить его, используется командлет Set-NetIPAddress:

Set-NetIPAddress -InterfaceIndex 8 -IPAddress 192.168.1.90

Чтобы на интерфейсе отключить получение IP адреса от DHCP, выполните:

Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled

Для просмотра таблицы маршрутизации используется командлет Get-NetRoute. Чтобы добавить новый маршрут, используется New-NetRoute:

New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.0.1" -InterfaceIndex 8

Отключим IPv6 протокол для сетевого интерфейса:

Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled:$false -ComponentID ms_tcpip6

Set-DnsClientServerAddress: настроить адреса DNS серверов

Чтобы задать адреса первичного и вторичного DNS серверов в Windows, используется командлет Set-DNSClientServerAddress. Например:

Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 192.168.1.11,10.1.1.11

Можно также задать DNS сервера через массив:

$dnsParams = @InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
>
Set-DnsClientServerAddress @dnsParams

После изменения настроек DNS, можно очистить DNS кэш:

PowerShell: Настройка получения IP адреса от DHCP сервера

Чтобы сетевой интерфейс компьютера получал динамический IP адрес от DHCP сервера, выполните команду:

Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled

Очистите настройки DNS серверов:

Set-DnsClientServerAddress –InterfaceIndex 8 -ResetServerAddresses

И перезапустите интерфейс для получения IP адреса:

Restart-NetAdapter -InterfaceAlias Ethernet0

Если ранее у вас был настроен шлюз, удалите его:

Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$false

Удаленное изменение IP/DNS настроек в Windows

Вы можете использовать PowerShell чтобы удаленно изменить настройки IP адресов или DNS серверов на нескольких удаленных компьютерах. Допустим, ваша задача – изменить настройки DNS для всех серверов в указанном контейнере AD. Для получения списка компьютеров в скрипте ниже примере используется командлет Get-ADComputer , а удаленное подключение к компьютерам выполняется через WinRM (командлет Invoke-Command):

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

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Введение

Чтобы создавать записи DNS в Azure DNS, нужно понимать, как Azure DNS организует записи DNS в соответствующие наборы записей.

Имена записей

Типы записей

У каждой записи DNS есть имя и тип. Записи разделяются на разные типы в зависимости от данных, которые они содержат. Наиболее распространенный тип — запись A, которая сопоставляет имя с IPv4-адресом. Другой распространенный тип — запись MX, которая сопоставляет имя с почтовым сервером.

Azure DNS поддерживает все общие типы записей DNS: A, AAAA, CAA, CNAME, MX, NS, PTR, SOA, SRV и TXT. Обратите внимание, что записи SPF, представлены в виде записей TXT.

Наборы записей

Azure DNS управляет всеми записями DNS, используя наборы записей. Набор записей (также называется набором записей ресурсов) — это коллекция записей DNS в зоне, которые имеют одно имя и принадлежат к одному типу. Большинство наборов записей содержат одну запись. Однако встречаются и наборы с несколькими записями (как в примере выше).

Наборы записей типа SOA и CNAME являются исключениями. По стандартам DNS несколько записей с одним и тем же именем для этих типов не допускаются, поэтому такие наборы записей могут содержать только одну запись.

Дополнительные сведения о записях DNS в Azure DNS см. в статье Зоны и записи DNS.

Создание записи DNS

Имя и тип создаваемого набора записей должны отличаться от существующих записей. Если вы создаете запись с такими же именем и типом, как у существующей записи, эту новую запись нужно добавить в существующий набор записей.

Создание записей А в новом наборе записей

Для создания наборов записей используется командлет New-AzDnsRecordSet . Создавая набор записей, вам нужно определить для него имя, зону, срок жизни (TTL), тип записей и сами создаваемые записи.

Параметры для добавления записей в набор записей зависят от типа набора записей. Например, при использовании набора записей типа A вам нужно указать IP-адрес с использованием параметра -IPv4Address . Различные типы записей будут иметь дополнительные параметры.

Чтобы создать набор записей, содержащий несколько записей, сначала создайте локальный массив и добавьте записи, а затем передайте этот массив в New-AzDnsRecordSet :

Метаданные набора записей используются для связывания данных приложения с каждым набором записей в виде пар "ключ — значение". В следующем примере показано, как создать набор с двумя записями метаданных: dept=finance и environment=production.

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

Создание записей других типов

Вы уже узнали, как создавать записи типа А. В следующем примере показано, как создавать записи других типов, поддерживаемые в Azure DNS.

Мы покажем, как создать набор записей каждого типа, который будет содержать одну запись. Создавать наборы записей других типов (пустые наборы записей или содержащие несколько записей с метаданными) можно на основе представленных выше примеров с записями типа A.

Пример создания набора записей типа SOA отсутствует, поскольку SOA создаются и удаляются с каждой зоной DNS. Запись типа SOA нельзя создать или удалить отдельно. Однако SOA можно изменить, как показано в следующем примере.

Создание набора записей типа AAAA с одной записью

Создание набора записей типа CAA с одной записью

Создание набора записей типа CNAME с одной записью

Стандарты DNS не допускают использование записей типа CNAME на вершине зоны ( -Name '@' ), а также использование наборов записей, содержащих более одной записи.

Дополнительные сведения см. в разделе Записи типа CNAME.

Создание набора записей типа MX с одной записью

Создание набора записей типа NS с одной записью

Создание набора записей типа PTR с одной записью

Создание набора записей типа SRV с одной записью

Создавая набор записей SRV, укажите в его имени _службу и _протокол. Нет необходимости включать @ в имя набора записей при создании набора записей SRV на вершине зоны.

Создание набора записей типа TXT с одной записью

В следующем примере показано, как создать запись типа ТХТ. Дополнительные сведения о максимальной длине строки, поддерживаемой в записях типа TXT, см. в разделе Записи типа TXT.

Получение набора записей

Чтобы извлечь существующий набор записей, используйте команду Get-AzDnsRecordSet . Этот командлет возвращает локальный объект, представляющий набор записей в Azure DNS.

Как и в случае с командлетом New-AzDnsRecordSet , имя записи должно быть относительным, т. е. оно не должно содержать имя зоны. Также необходимо определить тип записи и зону, содержащую набор записей.

В следующем примере показано, как получить набор записей. В этом примере зона определяется с помощью -ZoneName и -ResourceGroupName параметров.

Вместо этого зону можно указать с помощью объекта зоны, переданного с помощью параметра -Zone .

Перечисление наборов записей

Чтобы перечислить наборы записей в зоне, можно использовать Get-AzDnsZone , опустив параметр -Name и (или) -RecordType .

В следующем примере возвращаются все наборы записей в зоне:

В следующем примере показано, как можно получить все наборы записей нужного типа, указав тип набора записей и опустив его имя:

Чтобы получить все наборы записей разных типов с нужным именем, необходимо получить все наборы записей, а затем отфильтровать результаты:

Во всех этих примерах зону можно определить с помощью параметров -ZoneName и -ResourceGroupName (как и показано) или с помощью объекта зоны:

Добавление записи в существующий набор записей

Чтобы добавить запись в существующий набор записей, сделайте следующее.

Получите существующий набор записей.

Добавьте новую запись в локальный набор записей.

Обновите изменения, чтобы они были применены в службе Azure DNS.

С помощью существующий набор записей в Azure DNS (и все записи, которые он содержит) Set-AzDnsRecordSet будет заменен указанным набором записей. Проверки Etag помогают избежать перезаписи параллельных изменений. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite .

Приведенные выше примеры иллюстрируют добавление записи типа А в существующий набор записей типа A. Аналогичная последовательность операций используется и для добавления записей в наборы записей других типов. Для этого в Add-AzDnsRecordConfig нужно просто заменить параметр -Ipv4Address параметром, соответствующим нужному типу записи. Параметры, используемые для каждого типа записи, соответствуют параметрам в командлете New-AzDnsRecordConfig , как видно в примерах с другими типами записей (см. выше).

Наборы записей типа CNAME или SOA не могут содержать более одной записи. Это ограничение определяется общими стандартами DNS, а не Azure DNS.

Удаление записи из существующего набора записей

Процедура удаления записи из существующего набора записей аналогична процедуре добавления в такой набор.

Получите существующий набор записей.

Удалите запись из объекта локального набора записей. Удаляемая запись должна точно соответствовать существующей записи по всем параметрам.

Зафиксируйте изменения в службе Azure DNS. Чтобы отменить проверки Etag (проверки перезаписи параллельных изменений), используйте необязательный параметр -Overwrite .

Используя приведенную выше последовательность для удаления последней записи из набора, вы не удалите набор, а оставите его пустым. Как удалить сам набор записей, описано в разделе Удаление набора записей.

Как и при добавлении записей в набор записей, последовательность операций для удаления набора записей также можно объединить в конвейер:

Поддержку разных типов записей можно реализовать, передав в Remove-AzDnsRecordSet соответствующие каждому типу параметры. Параметры, используемые для каждого типа записи, соответствуют параметрам в командлете New-AzDnsRecordConfig , как видно в примерах с другими типами записей (см. выше).

Обновление существующего набора записей

Процедура изменения существующего набора записей аналогична процедуре добавления записей в набор записей и их удаления оттуда.

  1. Извлеките существующий набор записей, используя командлет Get-AzDnsRecordSet .
  2. Чтобы изменить локальный объект набора записей, сделайте следующее:
    • добавьте или удалите записи;
    • измените параметры существующих записей;
    • измените метаданные и время жизни (TTL) для набора записей.
  3. Зафиксируйте изменения с помощью командлета Set-AzDnsRecordSet . Существующий набор записей в Azure DNS будет заменен указанным набором.

При использовании Set-AzDnsRecordSet избежать перезаписи параллельных изменений помогут проверки Etag. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite .

Обновление записи в существующем наборе записей

В данном примере мы изменим IP-адрес существующей записи типа A:

Изменение записи типа SOA

В автоматически созданном наборе записей типа SOA на вершине зоны ( -Name "@" , включая кавычки) добавлять или удалять записи нельзя. Однако вы можете изменить любые параметры в записи типа SOA (за исключением параметра "Узел") и TTL набора записей.

В следующем примере показано, как изменить свойство Email записи типа SOA:

Изменение записи NS на вершине зоны

Набор записей типа NS на вершине зоны автоматически создается вместе с каждой зоной DNS. Он содержит имена DNS-серверов Azure, назначенные зоне.

Вы можете добавить большее количество серверов доменных имен в этот набор записей NS для поддержки совместных доменов с несколькими поставщиками DNS. Вы также можете изменить TTL и метаданные для этого набора записей. Однако вы не можете удалить или изменить предварительно указанные DNS-серверы Azure.

Это ограничение распространяется только на набор записей NS на вершине зоны. Другие наборы записей NS в зоне (используемые для делегирования дочерних зон) можно изменять без ограничений.

В следующем примере показано, как добавить еще один сервер доменных имен в набор записей NS на вершине зоны:

Изменение метаданных набора записей

Метаданные набора записей используются для связывания данных приложения с каждым набором записей в виде пар "ключ — значение".

В примере ниже показано, как изменить метаданные существующего набора записей:

Удаление набора записей

Наборы записей можно удалять с помощью командлета Remove-AzDnsRecordSet . При удалении набора записей также удаляются все содержащиеся в нем записи.

Удалить наборы записей типа SOA и NS на вершине зоны ( -Name '@' ) нельзя. Эти записи создаются и удаляются в Azure DNS автоматически вместе с зоной.

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

Вместо этого набор записей можно указать по имени, типу и зоне (определяется с помощью объекта):

Либо же можно указать сам набор записей, используя объект набора записей:

Указывая набор удаляемых записей с помощью объекта, вы можете выполнить проверки Etag, чтобы избежать удаления параллельных изменений. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite .

Запросы на подтверждение

Командлеты New-AzDnsRecordSet , Set-AzDnsRecordSet и Remove-AzDnsRecordSet поддерживают запросы на подтверждение.

Каждый командлет запрашивает подтверждение, если привилегированная переменная $ConfirmPreference в PowerShell имеет значение Medium или ниже. Так как по умолчанию переменной $ConfirmPreference присвоено значение High , эти запросы не применяются при использовании стандартных параметров PowerShell.

Текущее значение $ConfirmPreference можно переопределить с помощью параметра -Confirm . Если вы определите -Confirm или -Confirm:$True , командлет будет запрашивать подтверждение перед выполнением. Если вы определите -Confirm:$False , командлет не будет запрашивать подтверждение.

Дополнительные сведения об элементах -Confirm и $ConfirmPreference см. в статье о привилегированных переменных.

Зная, как управлять DNS сервером в Windows с помощью PowerShell, вы сможете сэкономить довольно много времени при выполнении типовых задач администрирования службы имен.

Модуль Windows DNS впервые был представлен в Windows Server 2008 R2. При помощи данного модуля можно было выполнять около 40% задач управления сервером DNS. В Windows Server 2016 функционал модуля был существенно расширен, и теперь наверно все 100% задач администрирования DNS сервера можно выполнять из CLI без использования графической консоли.

Для того, чтобы начать работу и вывести все доступные команды модуля DNSServer, необходимо открыть PowerShell и выполнить команду:

Get-Command -Module dnsserver

powershell модуль dnsserver

Как видите, в модуле имеется 134 команды.

список командлетов дял управления сервером dns

Создадим новую первичную DNS зону с именем devtest.local:

Add-DnsServerPrimaryZone -Name devtest.local -ZoneFile devtest.dns

Add-DnsServerPrimaryZone

Чтобы вывести все зоны, доступные на этом сервере, выполните команду:

Get-DnsServerZone

Чтобы создать DNS зону обратного просмотра (Lockup Zone), воспользуемся командой:

Add-DnsServerPrimaryZone -NetworkId "172.23.106.0/24" -ReplicationScope Domain

Add-DnsServerPrimaryZone

Чтобы добавить A запись в новую зону, воспользуемся командой:

add-DnsServerResourceRecordA -Name host1.devtest.local -IPv4Address 192.168.100.30 -ZoneName devtest.local

add-DnsServerResourceRecordA

Для того, чтобы синхронизировать вашу DNS эону с другим DNS-сервером:

Sync-DnsServerZone

Для того, чтобы протестировать доступность и работоспособность DNS сервера, можно воспользоваться командой Test-DnsServer .

Если вы занимаетесь администрированием DNS в системах Windows Server, то, возможно, помните публикации, посвященные Dnscmd – мощному инструменту командной строки, позволяющему выполнять практически любые задачи управления DNS. Не умаляя достоинств Dnscmd, надо сказать, что теперь администраторы DNS обрели новую группу поддержки в лице 100 команд PowerShell. В этом выпуске рассказывается о трех из них, а также приводится пример, как один простой «мощный инструмент» PowerShell можно сделать еще более мощным

Если вы занимаетесь администрированием DNS в системах Windows Server, то, возможно, помните мои публикации, посвященные Dnscmd – мощному инструменту командной строки, позволяющему выполнять практически любые задачи управления DNS. Не умаляя достоинств Dnscmd, я рад сообщить, что теперь администраторы DNS обрели новую группу поддержки в лице 100 команд PowerShell. В этом выпуске я расскажу о трех из них, а также приведу пример, как один простой «мощный инструмент» PowerShell можно сделать еще более мощным.

Подготовка

Какую версию Windows Server нужно иметь, чтобы использовать 100 новых команд? Я еще не успел опробовать всю сотню, но, насколько могу судить, для их применения в отношении системы Windows Server 2008 R2 достаточно иметь рабочую станцию Windows 8, которая присоединена к домену, и на которой загружены и установлены средства удаленного администрирования сервера (RSAT) для Windows 8. Для вывода списка из 100 команд DNS воспользуйтесь следующей командой:

Если же вы работаете с системой Windows Server 2012, то просто установите встроенные средства управления DNS, и команды DNS будут в вашем распоряжении.

Две команды Get-

Чем полезна эта функция? К сожалению, за последние годы сильно возросло число попыток использования серверов DNS для организации вредоносных распределенных атак типа «отказ в обслуживании» (DoS), что вынуждает администраторов выключать рекурсию на серверах DNS (по умолчанию она включена). В таких случаях полезно иметь возможность проверить данный сервер DNS или задействовать превосходные средства удаленного взаимодействия PowerShell. Например, если имеется пять DNS-серверов D1, D2, D3, D4 и D5, то простой отчет об их состоянии рекурсии можно вывести с помощью команды

Команда invoke-command уже упоминалась выше. Мы знаем, что параметр –scriptblock позволяет в фигурных скобках дать удаленным компьютерам команду, которую следует выполнить. В данном случае в фигурных скобках стоит команда DNS, за которой следует оператор Select с указанием имени компьютера, на котором следует выполнить эту команду, а также результат.

Одна команда Add-

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

Затем с помощью конвейера и команды foreach-object я организовал передачу имени каждой зоны команде add-dnssecondaryzone с помощью встроенной переменной $_, содержимым которой является то, что в данный момент находится в конвейере:

Это сработало сразу же, так что теперь мы будем говорить о средствах конвейерной передачи ForEach-Object и $_, но уже в следующий раз.

Читайте также: