- Resolve-Dns Name
- Syntax
- Description
- Examples
- EXAMPLE 1
- EXAMPLE 2
- EXAMPLE 3
- EXAMPLE 4
- Parameters
- Inputs
- Outputs
- Одминский блог
- Ускоряем разрешение доменных имен через resolve.conf
- sergey vasin
- The IT blog
- Используем встроенную функцию PowerShell в Windows 8 вместо NSLookup – Hey, Scripting Guy! Blog
- Разрешаем DNS имена
- «NSLookup» в PowerShell
- Переходим на systemd-resolved
- Установка и первичная настройка systemd-resolved
- LLMNR в systemd-resolved
Resolve-Dns Name
Performs a DNS name query resolution for the specified name.
Syntax
Description
The Resolve-DnsName cmdlet performs a DNS query for the specified name. This cmdlet is functionally similar to the nslookup tool which allows users to query for names.
Examples
EXAMPLE 1
This example resolves a name using the default options.
EXAMPLE 2
This example resolves a name against the DNS server at 10.0.0.1.
EXAMPLE 3
This example queries for A type records for name www.bing.com.
EXAMPLE 4
This example resolves a name using only DNS. LLMNR and NetBIOS queries are not issued.
Parameters
Resolves this query using only the local cache.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Resolves this query using only the DNS protocol.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Sets the DNSSEC checking-disabled bit for this query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Sets the DNSSEC OK bit for this query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Allows falling back to the LLMNR protocol when resolving this query with DNS fails.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Resolves this query using only the LLMNR or NetBIOS protocols.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Resolves this query using only the LLMNR protocol.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the name to be resolved.
Type: | String |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Allows fallback to the NetBIOS protocol when resolving this query with DNS fails.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Skips the hosts file when resolving this query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies not to use IDN encoding logic for the query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Instructs the server not to use recursion when resolving this query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Uses shorter timeouts for this query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the IP addresses or host names of the DNS servers to be queried. By default the interface DNS servers are queried if this parameter is not supplied.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Uses only TCP for this query.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the DNS query type that is to be issued. By default the type is A_AAAA, the A and AAAA types will both be queried. The acceptable values for this parameter are:
— A_AAAA = 0, the DNS query type is A_AAAA.
— A = 1, the DNS query type is IPv4 server Address.
— AAAA = 28, the DNS query type is IPv6 server address.
— NS = 2, the DNS query type is name server.
— MX = 15, the DNS query type is mail routing information.
— MD = 3, the DNS query type is mail destination.
— MF = 4, the DNS query type is mail forwarder.
— CNAME = 5, the DNS query type is canonical name.
— SOA = 6, the DNS query type is start of authority zone.
— MB = 7, the DNS query type is mailbox domain name.
— MG = 8, the DNS query type is mail group member.
— MR = 9, the DNS query type is mail rename name.
— NULL = 10, the DNS query type is null resource record.
— WKS = 11, the DNS query type is well known service.
— PTR = 12, the DNS query type is domain name pointer.
— HINFO = 13, the DNS query type is host information.
— MINFO = 14, the DNS query type is mailbox information.
— TXT = 16, the DNS query type is text strings.
— RP = 17, the DNS query type is responsible person.
— AFSDB = 18, the DNS query type is AFS database servers.
— X25 = 19, the DNS query type is packet switched wide area network.
— ISDN = 20, the DNS query type is Integrated Services Digital Network.
— RT = 21, the DNS query type is DNS route through.
— SRV = 33, the DNS query type is server selection.
— DNAME = 39, the DNS query type is domain aliases.
— OPT = 41, the DNS query type is DNS option.
— DS = 43, the DNS query type is delegation signer.
— RRSIG = 46, the DNS query type is DNSSEC signature.
— NSEC = 47, the DNS query type is next-secure record.
— DNSKEY = 48, the DNS query type is DNS key record.
— DHCID = 49, the DNS query type is Dynamic Host Configuration Protocol information.
— NSEC3 = 50, the DNS query type is NSEC record version 3.
— NSEC3PARAM = 51, the DNS query type is NSEC3 parameters.
— ANY = 255, the DNS query type is wildcard match.
— ALL = 255, the DNS query type is wildcard match.
Type: | RecordType |
Accepted values: | UNKNOWN, A_AAAA, A, NS, MD, MF, CNAME, SOA, MB, MG, MR, NULL, WKS, PTR, HINFO, MINFO, MX, TXT, RP, AFSDB, X25, ISDN, RT, AAAA, SRV, DNAME, OPT, DS, RRSIG, NSEC, DNSKEY, DHCID, NSEC3, NSEC3PARAM, ANY, ALL, WINS |
Position: | 1 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Inputs
None
Outputs
Microsoft.DnsClient.Commands.DnsRecord
The DnsRecord object contains all of the records returned from the wire for the specified DNS query.
Одминский блог
Блог о технологиях, технократии и методиках борьбы с граблями
Ускоряем разрешение доменных имен через resolve.conf
Системный файл /etc/resolv.conf является файлом конфигурации процедур сервера доменных имен. В этом файле хранится информация об используемых DNS серверах, и этот файл перечитывается при вызове процедуры разрешения имен. В файл можно поместить информацию о трех DNS серверах, причем алгорит действия будет таким, что запрос всегда уходит на стоящий первым в списке сервер. В случае если он не отвечает в течении некоторого времени (по умолчанию 5 секунд), то запрос отправляется на вторичный сервер DNS, если он не отвечает, то запрос переходит к третичному серверу DNS. То есть по умолчанию система всегда использует первый из списка сервер, и обращается ко второму и третьему только в случае, если первичный сервер не отвечает.
Но в версии BIND 8.2 были добавлено некоторое количество новых опций, с помощью которых мы можем несколько ускорить работу разрешения доменных имен для нашего сервера:
Опиция timeout позволяет задавать время таймаута для присутствия в очереди запросов. По умолчанию этот параметр равен 5 секундам (максимально 30), так что если мы хотим ускорить отработку запроса, то выставляем этот параметр например на 2 секунды:
options timeout:2
Опция rotate позволяет использовать из списка доменных серверов все адреса, а не только первый, который может быть перегружен многочисленными запросами. Причем вторичный и третичный сервера используются только в случае отказа в обслуживании первого сервера. Поэтому с помощью этой опции мы можем разгрузить первичный сервер и отправить часть запросов на остальные сервера, указанные в resolve.conf
options rotate
Единственно что следует помнить о том что мы используем эту опцию, ибо в случае отладки, например почтового демона, мы никогда не будем знать какой из доменных серверов дал нам ответ на наш запрос. Еще один момент заключается в том, что данная опция будет полезна не всем программам, ибо часть из них, например ping, одноразово инициализирует резолвер и после разрешения имени выходит. Тогда как почтовые демоны, отправляющие многочисленные запросы разрешения доменных имен, будут использовать этот функционал.
Опираясь на все вышесказанное, resolve.conf будет иметь следующий вид:
nameserver 1.1.1.1
nameserver 2.2.2.2
nameserver 3.3.3.3
option rotate
option timeout:2
sergey vasin
The IT blog
Используем встроенную функцию PowerShell в Windows 8 вместо NSLookup – Hey, Scripting Guy! Blog
Резюме: Microsoft Scripting Guy, Ed Wilson продолжает разговор об использовании Windows PowerShell для диагностики DNS.
Microsoft Scripting Guy, Ed Wilson на связи. Вчера я рассказывал об использовании PowerShell для диагностики клиентских настроек DNS. В частности я говорил об определении текущего сервера DNS и клиентском DNS-кеше.
Сегодня мы рассмотрим еще пару функций.
Разрешаем DNS имена
Для того, чтобы выполнить подключение, мне нужно разрешить имя хоста в IP-адрес. Хотя, если быть точным, не мне, а моему компьютеру. Но если имя не будет разрешено должным образом, мое приложение не будет работать. Зачастую, во время путешествий короткий звонок в техподдержку превращается в долгий и мучительный звонок в техподдержку.
Поэтому я предпочитаю выполнить весь процесс траблшутинга самостоятельно, чтобы я мог сказать техподдержке, что им нужно сделать, чтобы решить моб проблему. Один из промежуточных шагов диагностики – это использование старой доброй утилиты NSLookup. Некоторое время назад я использовал специальную графическую утилиту NSLookup. Но это было довольно давно. Когда я начал заниматься консалтингом и мне пришлось работать с разными системами, я начал изучать использование NSLookup в командной строке, поскольку это была единственная утилита, в наличии которой я мог быть уверен. Однако использование NSLookup – это не самая веселая вещь.
«NSLookup» в PowerShell
К счастью мне не обязательно больше использовать NSLookup, поскольку Windows 8, Windows Server 2012 и даже Microsoft Surface обладают встроенным модулем DNSClient. Этот модуль содержит функцию Resolve-DNSName. Она работает просто замечательно (несмотря на тот факт, что сообщество полагает, что она должна называться Get-DNSName).
В наиболее простой форме использования, я просто указываю имя для разрешения в качестве аргумента Resolve-DNSName.
Переходим на systemd-resolved
Установка и первичная настройка systemd-resolved
Для работы с systemd-resolved вам понадобится демон systemd-resolved. В Ubuntu он уже входит в пакет systemd (в 16.04 точно), а вот в Centos 7 его придется доустановить:
yum install systemd-resolved
Так же необходимо убедиться в наличии библиотеки libnss_resolve.so — без нее приложения не смогут связываться с резолвером.
В Centos эта библиотека входит в пакет systemd-resolved, а в ubuntu придется выполнить:
apt install libnss-resolve
Следующим шагом будет правка файла /etc/nsswitch.conf. Находим строчку, начинающуюся с «hosts:» и приводим к виду:
hosts: files resolve
Поясним. Эта строка отвечает за последовательность обращений приложения к системным компонентам с целью резолвинга интересующего приложение имени. В данном случае сначала программа заглянет в файл /etc/hosts и, если не обнаружит там возможностей по разыменованию (совпадения по имени), обратиться уже к демону systemd-resolved с просьбой сделать это для себя любимой. Ранее в этой строке у вас скорее всего было упоминание слова «dns», заставляющее приложение самостоятельно обращаться к DNS серверам с целью резолвинга. Мы удалили эту возможность за более ненадобностью. К тому же этот способ значительно медленнее, чем обращение напрямую к локально установленному демону systemd-resolved, который, к слову, еще и поддерживает кэширование полученных записей. Конечно же, самое первое обращение всё равно будет сопровождаться запросом systemd-resolved к DNS серверам, но потом накопленный кэш существенно ускорит эти операции. Небольшое замечание: конечно же, приложение само не делает никаких обращений — оно просто не умеет. Всё это делается по средствам библиотечных вызовов. Именно поэтому мы доустанавливали библиотеки в начале статьи и именно поэтому использование systemd-resolved эффективнее, потому что библиотечные вызовы быстрее, чем обращения, производимые с использованием стека TCP/IP.
Открытым остался вопрос о том, как сообщить systemd-resolved IP-адреса DNS серверов, к которым следует обращаться для разыменования запросов приложений. Можно определить DNS сервера в файле /etc/systemd/resolved.conf, можно их определить в файлах «.network» демона systemd-networkd, а можно, пользуясь DHCP с привлечением того же systemd-networkd получать эти адреса автоматически от сервера DHCP. Но для этого у вас должен быть запущен и настроен systemd-networkd. Если его нет, или вы не хотите его использовать, то единственным вариантом остается /etc/systemd/resolved.conf.
Для целей совместимости с приложениями, которые по каким-либо причинам не используют библиотечные вызовы, а обращаются к DNS серверам напрямую, получая их IP-адреса из /etc/resolv.conf, следует создать символическую ссылку:
ln -svi /run/systemd/resolve/resolv.conf /etc/resolv.conf
ls -la /etc/resolv.conf
lrwxrwxrwx 1 root root 32 дек 13 09:11 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf
Нам остается только запустить сервис и наслаждаться резолвингом с помощью systemd-resolved:
systemdctl enable systemd-resolved
systemdctl start systemd-resolved
LLMNR в systemd-resolved
Отдельного упоминания заслуживает поддержка в systemd-resolved протокола LLMNR (Link-Local Multicast Name Resolution). Этот протокол позволяет узлам в одной сети (широковещательном домене) обращаться друг к другу по имени хоста, не прибегая к услугам DNS вообще. Работает это следующим образом: какая-нибудь программа пытается обратиться к хосту в своей сети по имени, используя, как мы уже упоминали, библиотечные вызовы; локальный DNS-резолвер, как например герой нашей статьи — systemd-resolved, сначала попытается найти запрашиваемый хост в своей сети, делая групповой запрос на адрес 224.0.0.252 для ipv4 и FF02::1:3 для ipv6; если в сети есть хосты с поддержкой LLMNR и среди них окажется тот, имя которого будет соответствовать запрашиваемому, systemd-resolved незамедлительно вернет запрашивающей программе IP-адрес интересующего ее хоста. Однако стоит заметить, что для работы этого протокола очень важно правильно конфигурировать hostname на каждом компьютере в сети. Вы должны использовать короткую нотацию — не FQDN. В linux имя хоста указывается в /etc/hostname. Вы также можете использоать команду ‘hostnamectl set-hostname NAME’ для горячего изменения hostname компьютера. Ну и конечно же, LLMNR должен быть включен в вашем systemd-resolved. Это можно проверить по выводу команды ss:
ss -ntpul | grep 5355
udp UNCONN 0 0 *:5355 *:* users:((«systemd-resolve»,pid=15784,fd=12))
udp UNCONN 0 0 . 5355 . * users:((«systemd-resolve»,pid=15784,fd=11))
tcp LISTEN 0 128 *:5355 *:* users:((«systemd-resolve»,pid=15784,fd=14))
tcp LISTEN 0 128 . 5355 . * users:((«systemd-resolve»,pid=15784,fd=15))
Да, стандартный порт LLMNR — 5355 для TCP и UDP. Если вы обнаружили, что LLMNR порт никем не слушается, проверьте настройки в файле /etc/systemd/resolved.conf — LLMNR должен быть выставлен в «yes».
В завершении статьи небольшое отступление, советы по использованию:
- Используйте systemd-resolved в паре с systemd-networkd. У вас появится возможность автоматически получать настройки DNS с DHCP сервера
- Удалите другие локальные кэширующие DNS заглушки — они больше не нужны. К ним относятся dnsmasq и прочие