Командная строка для просмотра 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

      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> 

Начиная с 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

В системах, где 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

Многие из сообщений здесь имеют две проблемы:

  1. Они дают ответ только для настольных систем Ubuntu, которые используют NetworkManger из коробки.
  2. Предоставить ложную информацию о проверке/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

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