การใช้ DNSMasq สำหรับการแก้ปัญหาชื่อโฮสต์ในเครื่อง


9

ฉันกำลังทำงานเพื่อตั้งค่าอินทราเน็ตที่บ้านสำหรับฉันและเพื่อนร่วมห้องของฉัน ความคิดของฉันคือเราจะสามารถจัดเก็บสิ่งต่าง ๆ เช่นค่าสาธารณูปโภคที่ผ่านมาในสถานที่ที่สามารถเข้าถึงได้มากกว่าลิ้นชักในครัว ฯลฯ อย่างไรก็ตามฉันมี Apache 2 ทำงานบน Raspberry Pi บน LAN ของฉันและถ้าฉันใช้ ที่อยู่ IP ของมันฉันสามารถเข้าถึงหน้าที่กำลังแสดงบน Pi เนื่องจากฉันทำโครงการนี้มากขึ้นเพื่อเรียนรู้เกี่ยวกับระบบเครือข่ายเพื่อให้บริการกับอพาร์ตเมนต์ของฉันฉันคิดว่ามันจะเจ๋งถ้าเครือข่ายของฉันสามารถให้การแก้ปัญหาชื่อโฮสต์สำหรับ LAN ของฉัน ดังนั้นแทนที่จะชี้เบราว์เซอร์ของฉันไปยัง192.168.1.151ที่อยู่ IP ของ Pi ฉันสามารถชี้ไปที่oberon(ชื่อโฮสต์) และดูหน้าเว็บที่ให้บริการโดย Pi

ตอนนี้ฉันรู้ว่าฉันไม่ใช่คนแรกที่ต้องการทำสิ่งนี้ดังนั้นฉันจึงเริ่มโดย Googling คำถามนี้ยังบน Unix และ Linux, ได้ช่วยให้ฉันอย่างมาก: วิธีที่จะทำให้เครื่องสามารถเข้าถึงได้จาก LAN โดยใช้ชื่อโฮสต์ ณ จุดนี้ฉันได้ลองทุกอย่างในคำตอบที่ยืนยันแล้ว ฉันคิดถึงการใช้hostsไฟล์นี้ แต่นั่นหมายความว่าฉันต้องบอกเพื่อนร่วมห้องเพื่อกำหนดค่าเครื่องของพวกเขาซึ่งฉันไม่ต้องการให้พวกเขาทำ ฉันพยายามจอง DHCP เช่าสำหรับ Pi บนเราเตอร์ของฉัน (NETGEAR WNR1000v2 (aka N150)) และในขณะที่การจองทำงานได้การแก้ปัญหาชื่อโฮสต์ไม่ได้ ประเภทนี้ทำให้ฉันหงุดหงิดเพราะฉันบอกเราเตอร์ถึง IP ของ Pi และชื่อโฮสต์ แต่ก็ยังไม่ได้ให้ข้อมูลนี้แก่ลูกค้าใน LAN ของฉัน

ด้วยวิธีการทั้งสองไม่ทำงานฉันจึงตัดสินใจติดตั้งdnsmasqบน Pi ดูเหมือนง่ายต่อการกำหนดค่าและฉันยินดีที่จะเรียนรู้เครื่องมือใหม่ ฉันติดตั้งและให้มันทำงานได้ดี (ดูเหมือน) ที่ฉันสามารถทำได้digหรือnslookupชื่อเล่น Pi (ซึ่งผมตั้งใน/etc/hostsการoberonและhomenet) และได้รับผลลัพธ์ที่ถูกต้อง ผมสามารถทำเช่นเดียวกันสำหรับชื่ออินเทอร์เน็ตเช่นyahoo.comและได้คำตอบที่ถูกต้องเพราะผมตั้งค่าของ Google 8.8.8.8และเซิร์ฟเวอร์ในฐานะตัวสำรองใน8.8.4.4 /etc/dnsmasq.confดูนี่:

me@oberon~$ dig oberon

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> oberon
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10787
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;oberon.                                IN      A

;; ANSWER SECTION:
oberon.                 0       IN      A       192.168.1.151

;; Query time: 10 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Oct  6 18:59:18 2013
;; MSG SIZE  rcvd: 40

โปรดทราบว่าSERVERคือ127.0.0.1: oberonกำลังค้นหาที่อยู่ IP ของตัวเอง นี่คือสิ่งที่ฉันคาดว่าจะเห็น dig oberon @localhostเอาท์พุทเป็นเหมือนกันถ้าผมทำ เนื่องจากผลลัพธ์นี้ฉันจึงคิดว่าdnsmasqทำงานได้ดี ดังนั้นเพื่อนำไปสู่ระดับถัดไปฉันต้องการให้ไคลเอนต์ทั้งหมดใน LAN ของฉันสามารถพิมพ์oberonเบราว์เซอร์และนำไปoberonที่หน้าดัชนีของ สำหรับเรื่องนี้ฉันรู้ว่าฉันต้องกำหนดค่าเราเตอร์ของฉัน (ขอโทษถ้า veers นี้ออกไปจากดินแดน Unix & Linux อย่างเคร่งครัด)

ฉันมี Netgear WNR1000v2 ที่ฉันค่อนข้างคุ้นเคย ฉันได้กำหนดค่าการส่งต่อพอร์ตเพื่อให้ฉันสามารถ SSH เป็น Pi และฉันแหย่ไปรอบ ๆ ในการตั้งค่าอื่น ๆ เช่นกัน ฉันรู้ว่าก่อนที่ฉันจะเริ่มโครงการนี้ฉันได้รับเซิร์ฟเวอร์ DNS ของฉันจาก ISP ของฉัน แต่ตอนนี้ฉันต้องการใช้เซิร์ฟเวอร์ DNS เหล่านั้นเป็นหลัก แต่ยังใช้192.168.1.151เป็นการตรวจสอบล่าสุด ดังนั้นฉันจึงเปลี่ยนการกำหนดค่า DNS ของเราเตอร์เป็นดังนี้

การกำหนดค่า DNS ใหม่ของเราเตอร์ของฉัน  เชื่อใจฉันเมื่อฉันพูดว่าสองรายการแรกจัดทำโดย ISP ของฉัน

ดังนั้นด้วยการกำหนดค่านี้ผมคาดว่าจะสามารถที่จะทำnslookup oberonบน (Windows) 192.168.1.151เดสก์ทอปของฉันและได้รับผลมาจาก แต่สิ่งนี้ไม่ได้เกิดขึ้น นี่คือสิ่งที่จะเกิดขึ้น:

C:\Users\me>nslookup oberon
Server:  UnKnown
Address:  fe80::226:f2ff:fefa:bea

*** UnKnown can't find oberon: Non-existent domain

การรีเซ็ตหรือdnsflushingอะแดปเตอร์เครือข่ายในเครื่อง Windows ของฉันไม่เปลี่ยนแปลงอะไรเลย

นี่คือเหตุผลที่ฉันฉีกผมออกจากที่นี่:

C:\Users\me>nslookup oberon 192.168.1.151
Server:  oberon.lan
Address:  192.168.1.151

Name:    oberon
Address:  192.168.1.151

เห็นได้ชัดว่าdnsmasqทำงานได้ดี ถ้าฉันบอกให้กล่อง Windows ของฉันใช้192.168.1.151เพื่อแก้ไขชื่อoberonทุกอย่างใช้ได้ดี ( .lanโดเมนเป็นส่วนหนึ่งของการกำหนดค่าdnsmasqดังนั้นฉันจึงคาดว่าจะเห็นมัน) ถ้าฉันสามารถขอให้เราเตอร์บอกเครื่อง Windows ให้ใช้192.168.1.151เมื่อมันทำการสืบค้น DNS ฉันควรจะดี!

ดังนั้นฉันจึงดูเหมือนว่าปัญหาอยู่ในเราเตอร์ของฉัน แต่ฉันไม่สามารถคิดออกว่าจะทำอะไรนอกจากการเปลี่ยนเซิร์ฟเวอร์ DNS ให้รวม192.168.1.151เหมือนที่ฉันมีอยู่แล้ว มีใครช่วยฉันที่นี่บ้าง ฉันจะพยายามให้ข้อมูลเพิ่มเติมที่ต้องการ


ลองวาง pi เป็นเซิร์ฟเวอร์ DNS ตัวแรกแล้วใช้งานได้หรือไม่
terdon

1
เราเตอร์เป็นสถานที่ที่เหมาะสมในการทำเช่นนี้ ถ้าด้วยเหตุผลบางอย่างคุณไม่สามารถจัดการให้เราเตอร์ของคุณใช้ชื่อ Pi ได้ให้รัน dnsmasq บน Pi และให้เราเตอร์ทำหน้าที่ Pi เนื่องจากเซิร์ฟเวอร์ DNS จะทำงาน ดูเหมือนว่าปัญหาของคุณจะกำหนดค่าเราเตอร์ของคุณอย่างถูกต้อง
Gilles 'SO- หยุดความชั่วร้าย'

คุณกำลังปรับปรุงการเช่า DHCP ใหม่บนไคลเอนต์หลังจากอัพเดตการตั้งค่า DNS บนเราเตอร์หรือไม่ การกำหนดค่า DNS ถูกส่งไปใน DHCP lease ดังนั้นจึงต้องมีการเช่าใหม่เพื่อรับการตั้งค่าใหม่ ในฐานะที่เป็นโซลูชั่นสำรองคุณอาจดูเป็น mDNS / zeroconf / avahi
Patrick

คำตอบ:


2

ปัญหาของคุณอยู่ที่การเข้าใจผิดเกี่ยวกับวิธีการใช้เซิร์ฟเวอร์ DNS เหล่านั้นฉันไม่ทราบรายละเอียดที่แน่นอนของวิธีการที่ windows ใช้ในการเลือกเซิร์ฟเวอร์ DNS ที่จะสอบถาม แต่ฉันเดิมพันหลัก> รอง> ตติย / เสมอ / และถึงแม้ว่ามันจะไม่ใช่และเป็นแบบวนรอบคุณยังคงต้องค้นหาเซิร์ฟเวอร์ที่ไม่ช่วยเหลือ 2 ใน 3 ครั้ง

สิ่งที่จะเกิดขึ้นคือเซิร์ฟเวอร์หลักจะถูกสอบถาม หากหมดเวลาซึ่งอาจเป็นหนึ่งหรือสองวินาทีเซิร์ฟเวอร์ถัดไปจะถูกสอบถาม DNS ไม่ใช่ระบบ "ฉันทามติ" หากมีการสอบถามเซิร์ฟเวอร์ระยะไกลหนึ่งเครื่องในที่สุดจะค้นพบผลลัพธ์ที่ชื่อโฮสต์ของคุณไม่ได้รับอนุญาตจากมุมมองของเซิร์ฟเวอร์ DNS อินเทอร์เน็ต

คุณต้องการ LAN DNS ของคุณเองเป็นเซิร์ฟเวอร์ DNS หลัก คนอื่น ๆ จะสร้างเซิร์ฟเวอร์สำรองข้อมูลที่เหมาะสม แต่ฉันคิดว่ามันจะลดลง

นอกจากนี้ยังทราบว่า DNS การย้อนกลับของคุณ (ค้นหา IP เป็นชื่อ) แก้ไขเป็น "hostname.lan" แต่การทดสอบความละเอียดไปข้างหน้าของคุณนั้นมีเพียงชื่อโฮสต์ คุณควรจะมีการแก้ปัญหาไปข้างหน้าสำหรับ hostname.lan ตั้งค่าที่อื่น ในขณะที่สามารถมีการค้นหาไปข้างหน้า "ชื่อที่อยู่" จำนวนมากสำหรับโฮสต์มีความคาดหวังว่ามีการค้นหาแบบย้อนกลับของ IP เป็นชื่อที่จะมีชื่อที่ตรงกับระเบียน IP นั้น มันไม่สำคัญเสมอไปและทำให้ไฟล์บันทึกบางครั้งก็คร่ำครวญ แต่บางสิ่งก็มีความอ่อนไหวมากกว่าเรื่องอื่น ๆ

นอกจากนี้อย่าลืมลบไฟล์โฮสต์ใด ๆ ที่คุณวางไว้เมื่อคุณใช้งานได้ทั้งหมด (ฉันไม่รู้ว่านั่นเกี่ยวข้องกับ dnsmasq หรือไม่เคยใช้ฉันมีการกำหนดค่าที่คล้ายกัน แต่ซับซ้อนกว่าโดยใช้ชื่อ ISC-BIND เซิร์ฟเวอร์ซึ่งคุณสามารถกำหนดค่าการส่งต่อไปยังเซิร์ฟเวอร์อื่น ๆ เช่นคุณกำลังใช้หรือเพียงแค่ใช้เป็นเซิร์ฟเวอร์ DNS ที่ไม่ส่งต่อที่ทำการแก้ไขชื่อเต็มของตัวเอง - ซึ่งเป็นสิ่งที่ฉันได้ตั้งค่า)

ไม่ต้องพูดถึงเมื่อคุณคิดว่าคุณอยู่ไกลจากคนเดียวในการตั้งค่านี้ LAN ส่วนใหญ่ขององค์กรที่ได้รับการพัฒนาอย่างสมเหตุสมผลและเกือบทุก LAN ที่พัฒนาขึ้นมามากมายจะมีการติดตั้งเช่นนี้


1
ขอบคุณสำหรับความช่วยเหลือของคุณ! ฉันเข้าใจสิ่งที่คุณพูดเกี่ยวกับวิธีที่ DNS ไม่ใช่ระบบฉันทามติฉันจึงตั้งค่า Pi เป็นเซิร์ฟเวอร์ DNS หลักในเราเตอร์ของฉัน จากนั้นฉันต่ออายุ DHCP lease บนเครื่อง Windows ของฉัน อย่างไรก็ตามnslookup oberonยังคงไม่ทำงาน สิ่งหนึ่งที่ฉันไม่ได้กล่าวถึงในข้อความของโพสต์ดั้งเดิมของฉันคือเมื่อnslookupล้มเหลวเซิร์ฟเวอร์บอกว่าเซิร์ฟเวอร์ที่ใช้นั้นเป็นที่fe80อยู่ IPv6 ซึ่งฉันรู้ว่าเป็นที่อยู่ลิงก์ภายในเครื่อง แต่ฉันไม่รู้ว่า DNS มีความหมายอย่างไร กล่อง Windows ของฉันสอบถามตัวเองหรือไม่ dnsflushไม่เปลี่ยนพฤติกรรมนี้
c.anna

และสำหรับสิ่งที่คุ้มค่าการแก้ปัญหาชื่อโฮสต์ LAN ไม่ทำงานบนอุปกรณ์ iOS ของฉัน ฉันยังไม่ได้พูดถึงพวกเขาเพราะฉันมีพลังงานในการใคร่ครวญมากขึ้นกับ Windows แต่ถ้าปัญหาของฉันเกิดขึ้นอย่างเคร่งครัดจาก Windows ฉันจะไม่คาดหวังว่าอุปกรณ์เหล่านี้จะมีปัญหาเดียวกัน
c.anna

นอกจากนี้เพื่อบรรเทาความกังวลของคุณเกี่ยวกับ.lanโดเมนผมกำหนดค่าที่จะขยายชื่อโฮสต์ง่ายโดยอัตโนมัติเพื่อเพิ่มdnsmasq .lanการวิ่งnslookup oberon.lan 192.168.1.151ส่งคืนผลลัพธ์ที่คาดหวังของName: oberon.lan Address: 192.168.1.151
c.anna

ฉันสงสัยว่ามี "windowsism" ในที่ทำงานหรือบางสิ่งบางอย่างการตั้งชื่อโฮสต์ของคุณโดยตรงภายใต้โดเมนระดับบนสุด ('oberon.') ค่อนข้างแปลกแปลก ๆ oberon.lan มีเหตุผลมากกว่านี้ สิ่งหนึ่งที่ควรระวังคือส่วนต่อท้ายโดเมนและ 'โดเมนการค้นหา' มักจะต่อท้ายชื่อเพื่อแก้ไขเช่น "oberon" สามารถแก้ไขได้และพบว่าเป็น "oberon.lan" หาก lan อยู่ในโดเมนการค้นหา อย่างไรก็ตามข้อความค้นหาข้างต้นดูเหมือนจะไม่เป็นเช่นนี้การขุดโดยเฉพาะจะมีระยะเวลาสิ้นสุดในชื่อโฮสต์ แต่ระวังให้ดีเมื่อทำการทดสอบ!
Iain

อืมหลังจากแก้ไข dns หลักแล้วคุณจะต้องเปิดหน้าต่าง dhcp อีกครั้ง (การรีเซ็ตอะแดปเตอร์ควรทำ) จากนั้นตรวจสอบipconfig /allว่าแสดงเซิร์ฟเวอร์ dns ที่ถูกต้องหากว่าถูกต้องคุณอาจจำเป็นต้องล้างข้อมูล แต่ฉันไม่สามารถคิดอย่างอื่นได้
sourcejedi

1

อาจจะสายไปหน่อย แต่การปิดการใช้งาน ipv6 บนอแด็ปเตอร์ไร้สายของฉันเป็นการหลอกลวง


Upvote: เป็นความคิดที่ดีเสมอ นอกเสียจากว่าระบบจะออกมาเปลือยกายและต้องการมัน จนถึงตอนนี้ (ก.ย. 2017) มีอุปกรณ์ผู้ใช้ตามบ้านน้อยมากที่ตรงกับหมวดหมู่นั้นถ้ามี
SDsolar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.