Командная строка для просмотра DNS-серверов, используемых моей системой
Есть ли команда для отображения DNS-серверов, используемых моей системой?
Я старался
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
Но это не перечисляет никаких серверов, если я иду к "Инструменту GUI Network Manager", в разделе Wireless это перечисляет "DNS 192.168.1.1 8.8.8.8 8.8.4.4"
Могу ли я получить ту же информацию из командной строки?
Я использую Ubuntu 12.04 LTS
15 ответов
resolv.conf больше не используется, если только вы не внедрили его самостоятельно. Сетевой менеджер делает это сейчас. Я создал псевдоним для отображения DNS-серверов в моей системе, так как я иногда переключаюсь с OpenDNS на открытый DNS Google.
Ubuntu> = 15
nmcli device show <interfacename> | grep IP4.DNS
Ubuntu <= 14
nmcli dev list iface <interfacename> | grep IP4
В моем случае, <interfacename>
является eth0
, что часто, но не всегда так.
Смотрите, если это то, что вы хотите.
РЕДАКТИРОВАТЬ:
Я думаю, что resolv.conf на самом деле используется косвенно, потому что сетевой менеджер создает сервер, который прослушивает 127.0.0.1, но мне сказали, что это деталь реализации, на которую не следует рассчитывать. Я думаю, что если вы введете DNS-адреса до этой записи, они могут привыкнуть, но я не совсем уверен, как это работает. Я думаю, что лучше всего использовать сетевой менеджер в большинстве случаев, когда это возможно.
В Ubuntu 18.04 вы можете использовать systemd-resolve --status
Это действительно для Ubuntu 13.10 и более ранних версий. Для Ubuntu 14.04 и выше см . Ответ Коала Йенга на: Как узнать, какой DNS я использую в Ubuntu с 14.04 года
использование
nm-tool
Вы получите вывод, похожий на
NetworkManager Tool
State: connected (global)
- Device: eth0 [Wired connection 1] -------------------------------------------
Type: Wired
Driver: e1000e
State: connected
Default: yes
HW Address: 00:11:22:33:44:55
Capabilities:
Carrier Detect: yes
Speed: 1000 Mb/s
Wired Properties
Carrier: on
IPv4 Settings:
Address: 10.21.6.13
Prefix: 24 (255.255.255.0)
Gateway: 10.21.6.1
DNS: 10.22.5.133
DNS: 10.22.5.3
Или просто посмотреть, как работает DNS
nm-tool | grep DNS
Два самых популярных ответа, nmcli dev list iface <interfacename> | grep IP4
а также nm-tool
оба предполагают, что сетевой менеджер находится под контролем. Который это - на настольных машинах большую часть времени по крайней мере. Но более полный ответ заключается в том, что иногда сетевой менеджер не контролирует ситуацию. Например vpnc
портит /etc/resolv.conf
непосредственно.
Итак: Сначала проверьте, используется ли 127.0.0.1/localhost. Это может быть сделано с dig
:
> dig something.unknown | grep SERVER:
;; SERVER: 127.0.0.1#53(127.0.0.1)
Теперь вы знаете, что мы используем localhost. Продолжайте с одним из популярных ответов. Мне нравится:
> nm-tool | grep DNS:
DNS: 8.8.8.8
Но если 127.0.0.1/localhost не используется, то nm-tool
и nmcli
вывод будет вводить в заблуждение:
> dig something.unknown | grep SERVER:
;; SERVER: 172.22.216.251#53(172.22.216.251)
> nm-tool | grep DNS:
DNS: 8.8.8.8
Вот, dig
правильно и nm-tool
Информация вводит в заблуждение. На самом деле адреса, локальные для среды, в которую я подключился по VPN, разрешены правильно. Все из которых гугл DNS 8.8.8.8
не знает о.
Это потому, что после подключения к VPN с vpnc
ставит строку в /etc/resolv.conf
так это выглядит так:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 1.2.3.4
nameserver 127.0.0.1
search MyDomain
cat /etc/resolv.conf
должен показать ваши DNS-серверы.
Вы не можете изменять resolv.conf
напрямую с Ubuntu 12.04. Если вам нужно изменить их, вы можете добавить новые DNS-серверы в свой /etc/network/interfaces
файл, добавив следующее:
dns-nameservers x.x.x.x x.x.x.x
где x
DNS-серверы, которые вы хотите использовать
На твоем месте я бы удалил network-manager
, По моему это куча дерьма.
Вы можете выполнить все, что вам нужно сделать вручную, не беспокоясь об изменении настроек, особенно если у вас есть несколько сетевых адаптеров на компьютере.
В Ubuntu 20.04, если ваш
resolve.conf
указывает на петлю:
$ sudo cat /run/systemd/resolve/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
а также:
$ ss -plnt | grep ':53'
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
вы можете использовать
resolvectl
чтобы показать статус для интерфейсов:
$ resolvectl status
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNSSEC NTA: 10.in-addr.arpa
....
Link 4 (wlo1)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 10.128.128.128
DNS Servers: 10.128.128.128
DNS Domain: ~.
nmcli версия 0.9.10
Вы можете использовать любую из этих команд:
nmcli -t -f IP4.DNS device show eth0
IP4.DNS[1]:192.168.1.1
IP4.DNS[2]:8.8.8.8
nmcli -t -f IP4.DNS connection show conn-name
IP4.DNS[1]:192.168.1.1
IP4.DNS[2]:8.8.8.8
Удивительно, сколько способов это сделать. На сервере Ubuntu 18.04, если вы не хотите устанавливать ничего лишнего, например
nm-tool
, тогда
systemd-resolve --status
будет работать из коробки для информации DNS.
Если вас интересуют не только ваши DNS-серверы, но также шлюз по умолчанию, IP-адрес, маска сети и т. Д., Тогда
netplan ip leases eth0
предоставит вам всю эту информацию в удобной для чтения форме (если вы заинтересованы в
eth0
интерфейс).
Начиная с Ubuntu 20.04, вы можете использоватьresolvectl
о чем уже говорилось. Но я хотел бы подчеркнутьdns
что немного более чисто по сравнению сstatus
, видеть
разрешение DNS
$ resolvectl dns
Global:
Link 2 (ens34): 8.8.8.8
Link 3 (docker0):
разрешитьctl [статус]
$ resolvectl
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (ens34)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 8.8.8.8
DNS Servers: 8.8.8.8
DNS Domain: company.com
Link 3 (docker0)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
В Ubuntu 20.04
systemd-resolve --status | grep -B 9 -A 6 "Current DNS Server"
дал мне четкий результат относительно того, какой DNS использовался для каждого адаптера, использующего DNS.
Чтобы перенастроить DNS
man systemd-resolved
показывает, что DNS-серверы, к которым обращаются, определяются глобальными настройками в
/etc/systemd/resolved.conf
.
Sudo отредактируйте этот файл, раскомментируйте и установите
DNS=
а также
FallbackDNS=
на нужные DNS-серверы IPv4. Например,
DNS=8.8.8.8
а также
FallbackDNS=8.8.4.4
будет использовать Google Public DNS . Перезапустите машину, чтобы применить изменения.
@PLA, спасибо за этот ответ , который привел меня на этот путь.
В Ubuntu 15.10 вы можете получить DNS
nmcli device show <interface name>
В системах, где
systemd-resolved
НЕ установлен:
$ host -v something.unknown | awk -F "[ #]" '/Received /{print$5}' | uniq
192.168.1.1
В системах, где
NetworkManager
это работает :
$ ( nmcli -f IP4.DNS,IP6.DNS dev list || nmcli -f IP4.DNS,IP6.DNS dev show ) 2>/dev/null | awk '/DNS/{print$NF}'
192.168.1.1
Многие из сообщений здесь имеют две проблемы:
- Они дают ответ только для настольных систем Ubuntu, которые используют NetworkManger из коробки.
- Предоставить ложную информацию о проверке
/etc/resolv.conf
Прежде всего, прекратите проверять или редактировать файл /etc/resolv.conf в текущих системах Ubuntu. Ubuntu глубоко встроен в systemd. Это означает, что ntp, имена хостов, службы и DNS поддерживаются службами systemd. Вы заметите, что /etc/resolv.conf будет иметь только один адрес.127.0.0.53
который вы сами, в основном разговариваете с сервисами systemd dns. Не изменяйте этот файл, перестаньте смотреть на него, перестаньте возиться с ним.
Как проверить настройки и статус DNS рабочего стола Ubuntu:
- Как указал @iman, вы можете проверить настройки из nmcli:
ip -br a
# Make note of interface name
nmcli -t -f IP4.DNS device show $interface_name
Как проверить настройки и статус DNS-сервера Ubuntu SERVER:
- Вы можете проверить настройки из файла конфигурации netplan.
cat /etc/netplan/00-installer-config.yaml
Как проверить статус DNS на Ubuntu Desktop и Ubuntu Server:
- Вы можете проверить статус DNS с помощью этой команды
systemd-resolve --status --no-pager | grep "DNS Servers" -A 2
Обратите внимание, что приведенное выше предназначено только для перечисления количества DNS-серверов, если их всего два. Если вы хотите, чтобы все DNS-серверы (переменное количество) использовали этот
systemd-resolve --status | awk '{ for(i=1;i<=NF;i++) if($i~/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) print $i }'
Кажется, управляется сетевым менеджером. Посмотрите здесь http://manpages.ubuntu.com/manpages/precise/man5/NetworkManager.conf.5.html
для большого объяснения.
Или короткую версию это посмотреть в
/etc/NetworkManager/NetworkManager.conf
или же
<SYSCONFDIR>/NetworkManager/NetworkManager.conf
Все, что вам нужно, это простая команда
cat /etc/network/interfaces | grep dns