Descubra o servidor DNS para uma conexão DHCP no Linux

15

Eu sei que eles estão definidos /etc/resolv.conf, mas e se não estiver lá? E, mais especificamente, como você encontra o servidor DNS retornado pelo DHCP?

No GNOME, você pode usar o applet NetworkManager para ver o DNS primário de qualquer conexão; então, como você faria o mesmo na linha de comando?

Ivan
fonte

Respostas:

22

Normalmente, o arquivo dhclient.leases está localizado em /var/lib/dhcp3/dhclient.leases, digite o seguinte comando:

less /var/lib/dhcp3/dhclient.leases

OU

cat /var/lib/dhcp3/dhclient.leases

OU

Você pode simplesmente usar o comando grep para obter o endereço do servidor DHCP, digite:

grep dhcp-server-identifier /var/lib/dhcp3/dhclient.leases

OU

dhclient eth0

KPWINC
fonte
Ótimo, obrigado! No caso olhares ninguém por isso, o arquivo IPCop é encontrado em /var/ipcop/dhcpc/dhcpcd-*.info
Ivan
Isso é específico de um cliente DHCP, mas existem outros (como o pump).
bortzmeyer 18/09/09
1
Corri ps aux | grep dhcliente descobri que meu arquivo de concessões estava definido como /var/run/dhclient.eth0.leasescom a -lfopção
Roger Dueck 5/05
8

Recentemente, tive esse problema em que meu dhcpcdestava configurado incorretamente, pois não estava configurando servidores DNS. Descobri que posso consultar quais servidores de nomes estão disponíveis pelo DHCP com o seguinte comando:

sudo dhcpcd -o domain_name_servers -T

O comando produzirá várias informações de conexão de rede. Procure a linha que começa com new_domain_name_servers.

A partir daqui, consegui definir manualmente os servidores de nomes.

Russell O'Connor
fonte
2
Perfeito. Essa deve ser a resposta aceita, hehe.
drumfire
1
Essa também foi a solução que funcionou para mim.
Vidia
por que -omudar é necessário se despeja todas as mesmas opções -Tsozinho?
3

Encontrei minhas informações de concessão de DHCP /var/lib/dhclient/dhclient-eth0.leasesno caso de alguém não encontrá-las em/var/lib/dhcp3/dhclient.leases

Darryl Hein
fonte
2

bem, por que não simplesmente cavar isso?

marcus@marcus ~ $ dig google.de

; <<>> DiG 9.4.3-P3 <<>> google.de
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27579
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 6, ADDITIONAL: 0

;; QUESTION SECTION:
;google.de.         IN  A

;; ANSWER SECTION:
google.de.      1785    IN  A   209.85.229.104
google.de.      1785    IN  A   216.239.59.104
google.de.      1785    IN  A   74.125.77.104

;; AUTHORITY SECTION:
de.         23431   IN  NS  L.DE.NET.
de.         23431   IN  NS  Z.NIC.de.
de.         23431   IN  NS  F.NIC.de.
de.         23431   IN  NS  C.DE.NET.
de.         23431   IN  NS  S.DE.NET.
de.         23431   IN  NS  A.NIC.de.

;; Query time: 1 msec
;; SERVER: 192.168.1.15#53(192.168.1.15)
;; WHEN: Thu Sep 17 19:33:39 2009
;; MSG SIZE  rcvd: 181

veja as últimas linhas: ;; SERVIDOR: 192.168.1.15 # 53 (192.168.1.15)

Marcus Spiegel
fonte
Eu estava pensando a mesma coisa originalmente, mas não acho que isso mostraria TODOS os servidores DNS atribuídos, mostraria? Acho que o dig apenas retorna o que foi usado para essa pesquisa específica. Em uma segunda olhada, o pôster não especificou, portanto, se ele está feliz com isso, sua resposta é definitivamente a mais fácil. :-)
KPWINC 17/09/09
sim, você está certo de saída mostra apenas o DNS usado por essa consulta ... para que você possa ver o que realmente está acontecendo. Eu encontrei a solução fino para descobrir o que deve acontecer, o teu para que :-)
Marcus Spiegel
Não era exatamente o que eu estava procurando, mas obrigada de qualquer maneira.
Ivan Ivan
1
Quando nenhum servidor DNS responde, o dig não mostra nenhuma informação útil. É possível fazê-lo cuspir os servidores DNS que tentou perguntar?
Ivan Ivan
Então, depois de RingTFM, eu vejo isso só usa o que está em /etc/resolv.conf
Ivan
1

Se não houver nada no /etc/resolv.conf, a resolução do DNS (ou seja, a resolução usando o dns, conforme definido no /etc/nsswitch.conf) não funcionará. É isso que dig, host e rotinas libc usam para fazer a resolução de DNS. Se não houver nada especificado neste arquivo, a resolução DNS não funcionará (embora a resolução do host possa funcionar por outros meios, se outro método de resolução do host estiver configurado, como o NIS (isso é improvável)).

BrianEss
fonte
1

este comando mostra o servidor DNS na sua rede

cavar | servidor grep: | awk -F # '{print $ 1}' | awk -F: '{print $ 2}'

172.17.0.1

mario.q59
fonte
Isso responde à pergunta. De fato, é menos confiável do que a abordagem mencionada pelo OP na questão, que é simplesmente para ler /etc/resolv.conf. Afinal, o dig também lerá /etc/resolv.confe depois (tentará) se comunicar com o servidor antes de produzir qualquer saída.
kasperd
0

Leia /etc/resolv.conf. Isso é tudo.

man resolv.conf também é útil.

bortzmeyer
fonte
exceto que ele disse o que fazer, se é não lá ..
Warren
1
Sim, mas ignorei esse ponto, o que não faz sentido. Como o resolvedor libc usa resolv.conf, ele precisa estar lá.
bortzmeyer 23/09/09
0

Nas distribuições modernas, parece

ps aux | grep dhcli | grep -v grep                                                    
root       367  0.0  0.0  16128  3076 ?        S    Apr30   0:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /var/run/dhclient-enp3s0.pid -lf /var/lib/NetworkManager/dhclient-324caec3-58f9-3f00-bff4-2f8bd7d2aafa-enp3s0.lease -cf /var/lib/NetworkManager/dhclient-enp3s0.conf enp3s0


tail -16 /var/lib/NetworkManager/dhclient-324caec3-58f9-3f00-bff4-2f8bd7d2aafa-enp3s0.lease
lease {
  interface "enp3s0";
  fixed-address 10.191.104.3;
  option subnet-mask 255.255.255.0;
  option routers 10.191.104.254;
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 91.193.220.3,91.193.220.7;
  option dhcp-server-identifier 91.193.220.3;
  option ntp-servers 91.193.220.6;
  option broadcast-address 10.191.104.255;
  option domain-name "myISP.ru";
  renew 1 2017/05/01 12:56:02;
  rebind 2 2017/05/02 00:27:11;
  expire 2 2017/05/02 03:27:11;
}

onde 91.193.220.7 é o servidor DNS do meu ISP

nslookup serverfault.com 91.193.220.7
Server:     91.193.220.7
Address:    91.193.220.7#53

Non-authoritative answer:
Name:   serverfault.com
Address: 151.101.1.69
Name:   serverfault.com
Address: 151.101.65.69
Name:   serverfault.com
Address: 151.101.193.69
Name:   serverfault.com
Address: 151.101.129.69
desenvolvedor júnior de ruby
fonte
0

Mais uma solução para consultar o servidor DHCP:

sudo nmap --script broadcast-dhcp-discover

A saída informa o servidor de nomes oferecido pelo servidor DHCP:

Starting Nmap 7.60 ( https://nmap.org ) at 2019-12-12 23:50 UTC
Pre-scan script results:
| broadcast-dhcp-discover: 
|   Response 1 of 1: 
|     IP Offered: 144.123.211.44
|     DHCP Message Type: DHCPOFFER
|     Server Identifier: 144.123.99.200
|     IP Address Lease Time: 5m00s
|     Subnet Mask: 255.255.0.0
|     Router: 144.123.99.200
|     Domain Name Server: 144.123.99.200
|_    Domain Name: localdomain
estibordo
fonte