Как я могу узнать, какие DNS-серверы использует DNSMasq?

Как узнать, какие DNS-серверы использует DNSMasq для преобразования имени в IP-адрес? Я не могу понять это. Кажется, что все существующие здесь вопросы просто говорят пользователям, что они используют DNSMasq.

7 ответов

Решение

Вы можете найти DNS-серверы с помощью NetworkManagerCLI (nmcli) инструмент:

nmcli dev show | grep DNS
IP4.DNS[1]:                             172.22.216.251
IP6.DNS[1]:                             2a01:4f0:400c:1::1

Ubuntu 14.04 и старше

Команда немного отличается в более старых (<15.04) версиях Ubuntu:

> nmcli dev list | grep DNS
IP4.DNS[1]:                             172.22.216.251
IP6.DNS[1]:                             2a01:4f0:400c:1::1

Для более общего ответа, когда вы используете dnsmasq без сетевого администратора и с несколькими вышестоящими DNS:

sh# kill -USR1 <PID OF DNSMASQ>
sh# tail /var/log/syslog

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

Как правило, для системы, использующей systemdDNS-серверы dnsmasq использует можно найти через

journalctl -u dnsmasq

В упаковке:

network-manager 0.9.8.8-0ubuntu7.2 amd64 

Команда:

root@D-MIS-001:~# nmcli dev list | grep DNS
IP4.DNS[1]:                             172.16.10.173
IP4.DNS[2]:                             172.16.10.133

Это то, что кажется текущей версией пакета для Ubuntu 14.04 LTS. Правильная команда для 15.* могла измениться.

Также можно запросить NetworkManager напрямую через DBus. (Это то, что nmcli делает под капотом). Например, в Ubuntu 14.04 или более поздней версии запустите (без начального $):

      $ env -i gdbus introspect -y -o /org/freedesktop/NetworkManager/IP4Config -d org.freedesktop.NetworkManager | perl -ne 'if (m@^  node (\d+) [{]$@) { $_ = readpipe("env -i gdbus introspect -y -o /org/freedesktop/NetworkManager/IP4Config/$1 -d org.freedesktop.NetworkManager\n"); while (m@ Nameservers = \[(?!\])((?=\d)[\d, ]*\d)\]@g) { for (split(m@, *@, $1)) { print join(".", unpack("C4", pack("I", $_))), "\n" } } }'
12.34.56.78
90.123.45.6

Для более косвенного подхода используйте ActiveConnectionвместо IP4Config.

В Ubuntu 15.04 команда выглядит так:

$ nmcli dev show | grep DNS
IP4.DNS[1]:                             8.8.8.8

Я расширяю ответы, данные другими, показывая немного более длинные команды, которые печатают только DNS-серверы.

Ubuntu 14.04 имеет nmcli 0.9.8.8 в пакете network-manager . Список DNS-серверов находится в выводе nmcli -f IP4 -t -m tabular dev list. Чтобы получить только список DNS-серверов, запустите (без начального ):

      $ env -i nmcli -f IP4 -t -m tabular dev list | perl -ne 'chomp; my @l = split(m@:@, $_); if (@l > 3) { $_ = $l[3]; if (m@^\d+(?=[.])[\d. |]+[.]\d+$@) { for (split(m@ *[|] *@, $_)) { print "$_\n" } } }'
12.34.56.78
90.123.45.6

Ubuntu 15.04 или более поздней версии также имеет nmcli в пакете network-manager , но требует других аргументов командной строки. Список DNS-серверов находится в выводе nmcli -f IP4.DNS -t -m tabular dev show. Чтобы получить только список DNS-серверов, запустите (без начального $):

      $ env -i nmcli -f IP4.DNS -t -m tabular dev show | perl -ne 'if (m@^\d+(?=[.])[\d. |]+[.]\d+$@) { chomp; for (split(m@ *[|] *@, $_)) { print "$_\n" } }'
12.34.56.78
90.123.45.6

Поскольку nmcli подключается к NetworkManager через DBus, приведенная выше команда работает для любых подключений, управляемых NetworkManager, даже для тех, которые не используют dnsmasq. Однако не все соединения управляются NetworkManager. Список DNS-серверов должен быть извлечен из файла, и если он содержит адреса, начинающиеся с 127.0., следует проконсультироваться с NetworkManager. Вот как извлечь:

      $ perl -ne 'print "$1\n" if m@^\s*nameserver\s+(\S+)\s*$@' /etc/resolv.conf 
127.0.1.1

Обратите внимание, что 127.0.1.1(и, возможно, другие) указывает dnsmasq и 127.0.0.53указывает systemd-resolved.

Если текущее активное соединение не управляется NetworkManager (и systemd-resolved ), то DNS-серверы будут перечислены в файле /etc/resolv.conf.

Другие вопросы по тегам