Découvrez le serveur DNS pour une connexion DHCP sous Linux

15

Je sais qu'ils sont définis dans /etc/resolv.conf, mais si ce n'est pas le cas? Et plus précisément, comment trouvez-vous le serveur DNS renvoyé par DHCP?

Dans GNOME, vous pouvez utiliser l'applet NetworkManager pour voir le DNS principal pour n'importe quelle connexion, alors comment feriez-vous la même chose à partir de la ligne de commande?

Ivan
la source

Réponses:

22

Habituellement, le fichier dhclient.leases se trouve dans /var/lib/dhcp3/dhclient.leases, tapez la commande suivante:

less /var/lib/dhcp3/dhclient.leases

OU

cat /var/lib/dhcp3/dhclient.leases

OU

Vous pouvez simplement utiliser la commande grep pour obtenir l'adresse du serveur DHCP, entrez:

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

OU

dhclient eth0

KPWINC
la source
Grand merci! Dans le cas où quelqu'un chercherait cela, le fichier IPCop se trouve sur /var/ipcop/dhcpc/dhcpcd-*.info
Ivan
Ceci est spécifique à un client DHCP mais il en existe d'autres (comme la pompe).
bortzmeyer
1
J'ai couru ps aux | grep dhclientet j'ai constaté que mon fichier de baux était défini sur /var/run/dhclient.eth0.leasesl' -lfoption.
Roger Dueck
8

J'ai récemment eu ce problème où mon dhcpcdétait mal configuré car ne configurait pas les serveurs DNS. J'ai découvert que je peux interroger les serveurs de noms disponibles par DHCP avec la commande suivante:

sudo dhcpcd -o domain_name_servers -T

La commande produira un tas d'informations de connexion réseau. Recherchez la ligne commençant par new_domain_name_servers.

À partir de là, j'ai pu définir manuellement les serveurs de noms.

Russell O'Connor
la source
2
Parfait. Cela devrait être la réponse acceptée, hehe.
drumfire
1
C'était aussi la solution qui a fonctionné pour moi.
Vidia
pourquoi le -ochangement est nécessaire s'il vide toutes les mêmes options avec -Tseul?
3

J'ai trouvé mes informations de location DHCP sur au /var/lib/dhclient/dhclient-eth0.leasescas où quelqu'un ne pourrait pas les trouver sur/var/lib/dhcp3/dhclient.leases

Darryl Hein
la source
2

eh bien, pourquoi ne pas simplement creuser ça?

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

regardez les dernières lignes: ;; SERVEUR: 192.168.1.15 # 53 (192.168.1.15)

Marcus Spiegel
la source
Je pensais la même chose à l'origine, mais je ne pense pas que cela montrerait TOUS les serveurs DNS attribués, n'est-ce pas? Je pense que creuser ne renvoie que celui qu'il a utilisé pour cette recherche particulière. Au deuxième regard, l'affiche n'a pas précisé, donc s'il en est satisfait, votre réponse est certainement la plus simple. :-)
KPWINC
oui, vous avez raison, la sortie ne montre que les dns utilisés par cette requête ... afin que vous puissiez voir ce qui se passe réellement. J'ai trouvé votre solution très bien pour comprendre ce qui devait arriver, pour cela :-)
Marcus Spiegel
Ce n'était pas exactement ce que je cherchais, mais merci quand même.
Ivan
1
Quand aucun serveur DNS ne répond, creuser n'affiche aucune information utile, est-il possible de faire cracher les serveurs DNS qu'il a essayé de demander?
Ivan
Donc, après RingTFM, je vois qu'il utilise simplement tout ce qui se trouve sur /etc/resolv.conf
Ivan
1

S'il n'y a rien dans /etc/resolv.conf, la résolution DNS (c'est-à-dire la résolution utilisant DNS comme défini dans /etc/nsswitch.conf) ne fonctionnera pas. C'est ce que creusent, hébergent et les routines libc utilisent pour faire la résolution DNS. S'il n'y a rien de spécifié dans ce fichier, la résolution DNS ne fonctionnera pas (bien que la résolution de l'hôte puisse fonctionner par d'autres moyens, si une autre méthode de résolution de l'hôte est configurée, telle que NIS (cela est peu probable)).

BrianEss
la source
1

cette commande affiche le serveur DNS sur votre net

creuser | SERVEUR grep: | awk -F # '{print $ 1}' | awk -F: '{print $ 2}'

172.17.0.1

mario.q59
la source
Cela répond à la question. En fait, il est moins fiable que l'approche mentionnée par le PO dans la question, qui consiste simplement à le lire /etc/resolv.conf. Après tout, creuser va également lire /etc/resolv.conf, puis (essayer de) communiquer avec le serveur avant de produire une sortie.
kasperd
0

Lisez /etc/resolv.conf. C'est tout.

man resolv.conf est également utile.

bortzmeyer
la source
sauf qu'il a dit quoi faire s'il n'est pas là ..
warren
1
Oui, mais j'ai ignoré ce point, ce qui n'a aucun sens. Étant donné que le résolveur libc utilise resolv.conf, il doit être présent.
bortzmeyer
0

Dans les distributions modernes, il ressemble à

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;
}

où 91.193.220.7 est le serveur DNS de mon FAI

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
développeur rubis junior
la source
0

Une autre solution pour interroger le serveur DHCP:

sudo nmap --script broadcast-dhcp-discover

La sortie vous indique le serveur de noms proposé par le serveur 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
la source