Как я могу сказать, какие серверы DNS DNSMasq использование должно разрешить имя к IP-адресу? Я не могу понять это. Все существующие вопросы здесь, кажется, просто идут до говорящих пользователей, что они используют DNSMasq.
Можно найти серверы DNS с NetworkManagerCLI (nmcli
) инструмент:
nmcli dev show | grep DNS
IP4.DNS[1]: 172.22.216.251
IP6.DNS[1]: 2a01:4f0:400c:1::1
Команда немного отличается в более старом (<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 в системе.
На Ubuntu 15.04 команда:
$ nmcli dev show | grep DNS
IP4.DNS[1]: 8.8.8.8
В пакете:
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.*, возможно, изменился.
Обычно для системного использования systemd
, серверы DNS dnsmasq
использует может быть найден через
journalctl -u dnsmasq
Я расширяю ответы, данные другими, показывая немного более длинные команды, которые печатают только DNS-серверы.
Ubuntu 14.04 имеет nmcli 0.9.8.8 в пакете network-manager. Список DNS-серверов находится в выводе nmcli -f IP4 -t -m табличный список разработчиков
. Чтобы получить только список 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 в сетевом менеджере package, но ожидает другие аргументы командной строки. Список 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-серверов следует извлечь из файла /etc/resolv.conf
, и если он содержит адреса, начинающиеся с 127.0.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 -решено.
Если текущее активное соединение не управляется NetworkManager (и systemd-resolved), DNS-серверы будут перечислены в файле /etc/resolv.conf
.
Также можно запросить 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
.