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ń?

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


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.


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


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)


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)).


1

to polecenie pokazuje serwer DNS w sieci

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

172.17.0.1


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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.