Создание dns записи powershell
В этой статье мы рассмотрим особенности настройки параметров сетевых адаптеров в 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 , как видно в примерах с другими типами записей (см. выше).
Обновление существующего набора записей
Процедура изменения существующего набора записей аналогична процедуре добавления записей в набор записей и их удаления оттуда.
- Извлеките существующий набор записей, используя командлет Get-AzDnsRecordSet .
- Чтобы изменить локальный объект набора записей, сделайте следующее:
- добавьте или удалите записи;
- измените параметры существующих записей;
- измените метаданные и время жизни (TTL) для набора записей.
- Зафиксируйте изменения с помощью командлета 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
Как видите, в модуле имеется 134 команды.
Создадим новую первичную DNS зону с именем devtest.local:
Add-DnsServerPrimaryZone -Name devtest.local -ZoneFile devtest.dns
Чтобы вывести все зоны, доступные на этом сервере, выполните команду:
Чтобы создать DNS зону обратного просмотра (Lockup Zone), воспользуемся командой:
Add-DnsServerPrimaryZone -NetworkId "172.23.106.0/24" -ReplicationScope Domain
Чтобы добавить A запись в новую зону, воспользуемся командой:
add-DnsServerResourceRecordA -Name host1.devtest.local -IPv4Address 192.168.100.30 -ZoneName devtest.local
Для того, чтобы синхронизировать вашу DNS эону с другим DNS-сервером:
Для того, чтобы протестировать доступность и работоспособность 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 и $_, но уже в следующий раз.
Читайте также: