Znajdź serwer DNS dla połączenia DHCP w systemie Linux

15

Wiem, że są zdefiniowane /etc/resolv.conf, ale co jeśli nie ma? A dokładniej, jak znaleźć serwer DNS zwrócony przez DHCP?

W GNOME możesz użyć apletu NetworkManager, aby zobaczyć podstawowy DNS dla dowolnego połączenia, więc jak zrobiłbyś to samo z wiersza poleceń?

Ivan
źródło

Odpowiedzi:

22

Zwykle znajduje się plik dhclient.leases w /var/lib/dhcp3/dhclient.leases, wpisz następujące polecenie:

less /var/lib/dhcp3/dhclient.leases

LUB

cat /var/lib/dhcp3/dhclient.leases

LUB

Możesz po prostu użyć polecenia grep, aby uzyskać adres serwera DHCP, wprowadź:

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

LUB

dhclient eth0

KPWINC
źródło
Wielkie dzięki! Na wypadek, gdyby ktoś tego szukał, plik IPCop można znaleźć na stronie /var/ipcop/dhcpc/dhcpcd-*.info
Ivan
Jest to specyficzne dla jednego klienta DHCP, ale są też inne (takie jak pompa).
bortzmeyer
1
Pobiegłem ps aux | grep dhclienti okazało się, że mój plik najmu został ustawiony /var/run/dhclient.eth0.leasesz tą -lfopcją.
Roger Dueck
9

Niedawno miałem ten problem, dhcpcdponieważ moja konfiguracja była źle skonfigurowana, ponieważ nie ustawiałem serwerów DNS. Dowiedziałem się, że mogę zapytać, które serwery nazw są dostępne przez DHCP za pomocą następującego polecenia:

sudo dhcpcd -o domain_name_servers -T

Polecenie wyświetli kilka informacji o połączeniu sieciowym. Poszukaj linii zaczynającej się od new_domain_name_servers.

Stąd mogłem ręcznie ustawić serwery nazw.

Russell O'Connor
źródło
2
Doskonały. To powinna być zaakceptowana odpowiedź, hehe.
drumfire
1
To było również rozwiązanie, które działało dla mnie.
Vidia,
dlaczego -ozmiana jest konieczna, jeśli sam zrzuca wszystkie te same opcje -T?
3

Znalazłem moje informacje o dzierżawie DHCP na /var/lib/dhclient/dhclient-eth0.leaseswypadek, gdyby nikt nie mógł ich znaleźć/var/lib/dhcp3/dhclient.leases

Darryl Hein
źródło
2

cóż, dlaczego po prostu tego nie wykopać?

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

spójrz na ostatnie linie: ;; SERWER: 192.168.1.15 # 53 (192.168.1.15)

Marcus Spiegel
źródło
Początkowo myślałem o tym samym, ale nie wydaje mi się, że pokazywałoby to WSZYSTKIE przypisane serwery DNS, prawda? Myślę, że dig zwraca tylko ten, którego użył do tego konkretnego wyszukiwania. Po drugim spojrzeniu plakat nie określił, więc jeśli jest z niego zadowolony, to Twoja odpowiedź jest zdecydowanie najłatwiejsza. :-)
KPWINC
tak, masz rację Dane wyjściowe pokazują tylko dns używane przez to zapytanie ... więc możesz zobaczyć, co się naprawdę dzieje. Znalazłem twoje rozwiązanie, aby dowiedzieć się, co powinno się wydarzyć, za co :-)
Marcus Spiegel,
Nie tego dokładnie szukałem, ale i tak dzięki.
Ivan
1
Gdy żaden serwer DNS nie odpowiada, przegląd nie pokazuje żadnych użytecznych informacji, czy można sprawić, że wypluje serwery DNS, o które próbował zapytać?
Ivan
Widzę więc, że po RingTFM używa tylko tego, co jest na /etc/resolv.conf
Ivan
1

Jeśli w pliku /etc/resolv.conf nie ma nic, rozpoznawanie DNS (tzn. Rozpoznawanie za pomocą dns ​​zdefiniowane w /etc/nsswitch.conf) nie będzie działać. Tego właśnie używają procedury dig, host i libc do rozpoznawania nazw DNS. Jeśli w tym pliku nie określono niczego, rozpoznawanie DNS nie będzie działać (chociaż rozpoznawanie hosta może działać w inny sposób, jeśli skonfigurowano inną metodę rozpoznawania hosta, na przykład NIS (jest to mało prawdopodobne)).

BrianEss
źródło
1

to polecenie pokazuje serwer DNS w sieci

kop | SERP grep: | awk -F # '{print 1 $}' | awk -F: „{print 2 USD}”

172.17.0.1

mario.q59
źródło
To odpowiada na pytanie. W rzeczywistości jest mniej wiarygodne niż podejście, o którym wspomina OP w pytaniu, z którego można po prostu odczytać /etc/resolv.conf. Po tym, jak wszystkie kopie będą czytać, /etc/resolv.confa następnie (spróbuj) komunikować się z serwerem przed wygenerowaniem jakiegokolwiek wyniku.
kasperd
0

Czytać /etc/resolv.conf. To wszystko.

man resolv.conf jest również przydatny.

bortzmeyer
źródło
z wyjątkiem tego, co powiedział, co zrobić, jeśli go nie ma.
warren
1
Tak, ale zignorowałem ten punkt, co nie ma sensu. Ponieważ resolver libc używa resolv.conf, musi tam być.
bortzmeyer
0

W nowoczesnych dystrybucjach wygląda to tak

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

gdzie 91.193.220.7 to serwer DNS mojego usługodawcy internetowego

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
młodszy programista rubinowy
źródło
0

Jeszcze jedno rozwiązanie do zapytania serwera DHCP:

sudo nmap --script broadcast-dhcp-discover

Dane wyjściowe informują o serwerze nazw oferowanym przez serwer 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
źródło