Как я могу узнать, какие 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-сервер в вашей системе.
Как правило, для системы, использующей systemd
DNS-серверы 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
.