ค้นหาเซิร์ฟเวอร์ DNS สำหรับการเชื่อมต่อ DHCP ใน Linux


15

ฉันรู้ว่ามันถูกนิยามไว้/etc/resolv.confแต่ถ้ามันไม่มีอยู่ล่ะ และโดยเฉพาะอย่างยิ่งคุณจะค้นหาเซิร์ฟเวอร์ DNS ที่ส่งคืนโดย DHCP ได้อย่างไร

ใน GNOME คุณสามารถใช้แอปเพล็ต NetworkManager เพื่อดู DNS หลักสำหรับการเชื่อมต่อใด ๆ คุณจะทำเช่นนั้นจากบรรทัดคำสั่งได้อย่างไร

คำตอบ:


22

โดยปกติไฟล์ dhclient.leases จะอยู่ที่/var/lib/dhcp3/dhclient.leasesพิมพ์คำสั่งต่อไปนี้:

less /var/lib/dhcp3/dhclient.leases

หรือ

cat /var/lib/dhcp3/dhclient.leases

หรือ

คุณสามารถใช้คำสั่ง grep เพื่อรับที่อยู่เซิร์ฟเวอร์ DHCP และป้อน:

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

หรือ

dhclient eth0


เยี่ยมมากขอบคุณ! ในกรณีที่ใครจะมองหานี้แฟ้ม IPCop พบใน /var/ipcop/dhcpc/dhcpcd-*.info
อีวาน

นี่เป็นเฉพาะของไคลเอ็นต์ DHCP หนึ่งตัว แต่มีตัวอื่น (เช่นปั๊ม)
bortzmeyer

1
ฉันวิ่งps aux | grep dhclientและพบว่าไฟล์สัญญาเช่าของฉันถูกตั้งค่า/var/run/dhclient.eth0.leasesด้วย-lfตัวเลือก
Roger Dueck

9

ฉันเพิ่งมีปัญหานี้เมื่อฉันdhcpcdกำหนดค่าผิดที่ไม่ได้ตั้งค่าเซิร์ฟเวอร์ DNS ฉันพบว่าฉันสามารถค้นหาเซิร์ฟเวอร์ชื่อที่มีอยู่โดย DHCP ด้วยคำสั่งต่อไปนี้:

sudo dhcpcd -o domain_name_servers -T

คำสั่งจะส่งออกข้อมูลการเชื่อมต่อเครือข่ายจำนวนมาก new_domain_name_serversมองหาจุดเริ่มต้นบรรทัดด้วย

จากที่นี่ฉันสามารถตั้งค่าเนมเซิร์ฟเวอร์ได้ด้วยตนเอง


2
สมบูรณ์ นี่ควรเป็นคำตอบที่ยอมรับเหรอ
drumfire

1
นี่เป็นวิธีแก้ปัญหาที่เหมาะกับฉันด้วย
Vidia

ทำไม-oสวิตช์มีความจำเป็นถ้ามันทิ้งตัวเลือกเดียวกันทั้งหมดไว้-Tคนเดียว?

3

ฉันพบข้อมูลการเช่า DHCP ของฉัน/var/lib/dhclient/dhclient-eth0.leasesในกรณีที่ทุกคนไม่สามารถค้นหาได้ที่/var/lib/dhcp3/dhclient.leases


2

ทำไมไม่ลองขุดดูล่ะ?

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

ดูบรรทัดสุดท้าย: ;; เซิร์ฟเวอร์: 192.168.1.15 # 53 (192.168.1.15)


ฉันคิดแบบเดิม แต่ฉันไม่คิดว่ามันจะแสดงเซิร์ฟเวอร์ DNS ที่กำหนดทั้งหมดใช่ไหม ฉันคิดว่า dig จะคืนค่าที่ใช้สำหรับการค้นหานั้นโดยเฉพาะ ในการดูครั้งที่สองโปสเตอร์ไม่ได้ระบุดังนั้นถ้าเขามีความสุขกับมันคำตอบของคุณคือวิธีที่ง่ายที่สุดแน่นอน :-)
KPWINC

ใช่คุณมีสิทธิส่งออกแสดงเฉพาะค่า DNS โดยใช้แบบสอบถามที่ ... เพื่อให้คุณสามารถมองเห็นสิ่งที่เป็นจริงที่เกิดขึ้น ผมพบว่าการปรับวิธีการแก้ปัญหาของคุณจะคิดออกว่าควรจะเกิดขึ้นของเจ้าที่ :-)
มาร์คัสเดอร์ส

นั่นไม่ใช่สิ่งที่ฉันกำลังมองหา แต่ก็ขอบคุณอยู่ดี
Ivan

1
เมื่อไม่มีเซิร์ฟเวอร์ DNS ตอบสนองขุดจะไม่แสดงข้อมูลที่เป็นประโยชน์ใด ๆ เป็นไปได้หรือไม่ที่จะทำให้เซิร์ฟเวอร์ DNS นั้นพยายามถาม
Ivan

ดังนั้นหลังจากที่ RingTFM ผมเห็นมันเป็นเพียงแค่การใช้สิ่งที่อยู่ใน /etc/resolv.conf
อีวาน

1

หากไม่มีสิ่งใดใน /etc/resolv.conf การแก้ไข DNS (นั่นคือการแก้ปัญหาโดยใช้ dns ตามที่กำหนดไว้ใน /etc/nsswitch.conf) จะไม่ทำงาน นี่คือสิ่งที่ขุดโฮสต์และรูทีน libc ใช้เพื่อทำการแก้ไข DNS หากไม่มีสิ่งใดที่ระบุไว้ในไฟล์นี้การแก้ปัญหา DNS จะไม่ทำงาน (แม้ว่าการแก้ปัญหาโฮสต์อาจทำงานผ่านวิธีอื่นได้หากกำหนดค่าวิธีการแก้ปัญหาโฮสต์อื่นเช่น NIS (ไม่น่าจะเป็นไปได้))


1

คำสั่งนี้แสดงเซิร์ฟเวอร์ DNS บนเน็ตของคุณ

ขุด | เซิร์ฟเวอร์ grep: | awk -F # '{พิมพ์ $ 1}' | awk -F: '{พิมพ์ $ 2}'

172.17.0.1


นี่จะตอบคำถาม ในความเป็นจริงมันมีความน่าเชื่อถือน้อยกว่าวิธีการ OP /etc/resolv.confกล่าวถึงในคำถามซึ่งเป็นเพียงการอ่านได้จาก หลังจากขุดทั้งหมดจะอ่านจาก/etc/resolv.confและจากนั้น (ลอง) สื่อสารกับเซิร์ฟเวอร์ก่อนที่จะผลิตผลลัพธ์ใด ๆ
kasperd

0

/etc/resolv.confอ่าน นั่นคือทั้งหมดที่

man resolv.conf มีประโยชน์เช่นกัน


ยกเว้นเขากล่าวว่าสิ่งที่ต้องทำถ้ามันไม่ได้มี ..
วอร์เรน

1
ใช่ แต่ฉันไม่สนใจประเด็นนี้ซึ่งไม่สมเหตุสมผล เนื่องจากตัวแก้ไข libc ใช้ resolv.conf จึงต้องอยู่ที่นั่น
bortzmeyer

0

ในการแจกแจงสมัยใหม่ดูเหมือนว่า

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

โดยที่ 91.193.220.7 คือเซิร์ฟเวอร์ DNS ของ 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

0

อีกหนึ่งวิธีในการค้นหาเซิร์ฟเวอร์ DHCP:

sudo nmap --script broadcast-dhcp-discover

ผลลัพธ์จะบอกให้คุณทราบชื่อเซิร์ฟเวอร์ที่เซิร์ฟเวอร์ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.