วิธีตั้งค่า DNS Caching โดยใช้ dnsmasq บน Ubuntu
เผยแพร่แล้ว: 2022-10-19DNSmasq สามารถใช้เพื่อแคชคำขอ DNS สำหรับการแจกจ่าย Linux อย่างไรก็ตาม อาจเป็นเรื่องท้าทายเล็กน้อย
แคช DNS ทำงานเพื่อเพิ่มความเร็วในกระบวนการค้นหา DNS ที่แปลงชื่อโดเมนเว็บไซต์เป็นที่อยู่ IP ที่เกี่ยวข้อง เมื่อผู้ใช้หลายคนในเครือข่ายของคุณเยี่ยมชมที่อยู่เว็บไซต์เดียวกัน การใช้เซิร์ฟเวอร์แคช DNS ในเครื่องสามารถลดระยะเวลาที่ใช้ในการโหลดเว็บได้
อันดับแรก มาดูกันว่า DNS Caching คืออะไร
การแคช DNS คืออะไร?
อินเทอร์เน็ตใช้ DNS เพื่อติดตามเว็บไซต์ออนไลน์ที่เข้าถึงได้แบบสาธารณะทั้งหมดและที่อยู่ IP ที่เกี่ยวข้อง อาจเปรียบได้กับสมุดโทรศัพท์ การใช้ DNS ทำให้เราไม่ต้องจำ IP ของแต่ละไซต์ ซึ่งจำเป็นสำหรับโครงสร้างพื้นฐานเครือข่ายในการโต้ตอบกับเว็บไซต์อินเทอร์เน็ต
เมื่อใดก็ตามที่คุณขอให้เครื่องมือค้นหาแสดงหน้าเว็บ นี่คือสิ่งที่เกิดขึ้นจริงเบื้องหลัง
แม้ว่าระบบของคุณจะมีสิทธิ์เข้าถึงเซิร์ฟเวอร์ DNS ภายนอกจำนวนมาก แต่ปัญหาก็คือการมีแบบจำลองส่วนกลางของ DNS ยังคงช่วยเพิ่มความเร็วในการส่งและการแก้ปัญหา นี่คือเวลาที่การแคช DNS เข้ามาเล่น

ก่อนที่จะส่งคำขอไปยังเว็บ แคช DNS จะจัดการการแก้ไขข้อมูลประจำตัวสำหรับโดเมนที่เข้าใช้เมื่อเร็วๆ นี้และบ่อยครั้ง เพื่อพยายามเร่งกระบวนการให้เร็วขึ้น
มีการเข้าถึงเซิร์ฟเวอร์ DNS ทุกครั้งที่จำเป็นต้องแก้ไขที่อยู่ IP เป็นชื่อโดเมน สิ่งนี้สามารถเพิ่มภาระเพิ่มเติมบนเซิร์ฟเวอร์ DNS โดยเฉพาะอย่างยิ่งหากเว็บไซต์ได้รับคำขอจำนวนมากพร้อมกัน
ใช้แคช DNS เพื่อลดคำขอ DNS และเวลาตอบสนอง ที่อยู่ IP ที่แก้ไขแล้วพร้อมกับรายละเอียดโฮสต์จะถูกบันทึกไว้ในเครื่อง แทนที่จะเริ่มต้นการสืบค้น DNS ใหม่ ผลลัพธ์จะถูกดึงมาจากหน่วยความจำแคช DNS ในครั้งต่อไปที่ต้องมีการแก้ไข IP หรือชื่อโดเมน
การแคช DNS ช่วยแก้ไขปัญหา DNS ที่ไม่ต่อเนื่องในอินสแตนซ์ Amazon EC2 ได้อย่างไร
ระบบ Linux ส่วนใหญ่ไม่ได้ใช้แคช DNS ในเครื่อง นี่หมายความว่าคำขอ DNS ทั้งหมดถูกส่งโดยตรงไปยังตัวแก้ไข DNS ที่เชื่อถือได้ซึ่งจัดหาโดย Amazon ซึ่งมีข้อจำกัดเกี่ยวกับจำนวนคำขอที่ประมวลผลได้ในครั้งเดียว ปัญหาการแก้ไข DNS เกิดขึ้นเมื่อมีคำขอจำนวนมาก
การปรับใช้แคช DNS ในระบบจะช่วยลดการใช้ CPU และเครือข่าย ในขณะเดียวกันก็ป้องกันข้อผิดพลาดในการแก้ ปัญหา DNS แคช DNS ในเครื่องตอบสนองต่อการสืบค้นทรัพยากร DNS ภายนอก เช่น Amazon RDS และ S3
โปรโตคอล DHCP จะใช้ในระหว่างการเปิดใช้โดยอินสแตนซ์ Amazon EC2 ที่เชื่อมต่อกับ Amazon VPC เพื่อขอที่อยู่เซิร์ฟเวอร์ DNS

เมื่อคุณใช้ Amazon VPC เพื่อสร้างคลาวด์ส่วนตัวเสมือน Route 53 DNS Resolver จะใช้ตัวแก้ไขบน VPC อย่างมีประสิทธิภาพเพื่อตอบสนองต่อคำขอ DNS สำหรับอินสแตนซ์ EC2 ที่ทำงานภายใต้ที่อยู่เว็บ Amazon VPC ในเครื่องและรายการในโซนที่มีการจัดการแบบส่วนตัว Resolver ทำการค้นหาซ้ำในเซิร์ฟเวอร์ DNS สาธารณะสำหรับที่อยู่เว็บเพิ่มเติมทั้งหมด
แคช DNS ทำหน้าที่เป็นบันทึกชั่วคราวของการสืบค้น DNS ก่อนหน้าซึ่งระบบของเราสามารถตรวจสอบได้อย่างรวดเร็วในขณะที่พยายามเข้าถึงเว็บไซต์ออนไลน์ จะเก็บบันทึกของทุกเซสชันที่มีอยู่และที่ตามมา แคช DNS นี้ทำให้การแก้ปัญหาโดเมนง่ายขึ้นและป้องกันข้อผิดพลาดกับอินสแตนซ์ Amazon EC2 Linux
ผู้ใช้จำนวนมากมักใช้บริการ Route 53 ของ Amazon สำหรับ DNS เมื่อเข้าถึง AWS มันใช้งานง่ายมากและเกือบจะฟรี แต่มีสาเหตุหลายประการที่อาจส่งผลต่อการตัดสินใจของผู้ใช้ในการใช้เซิร์ฟเวอร์ DNS ในเครื่อง
แม้ว่า bind9 จะยังเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการตั้งค่าเซิร์ฟเวอร์แคช DNS ในเครื่อง แต่ dnsmasq นั้นง่ายกว่ามากในการติดตั้งและกำหนดค่าทั้งบนอินสแตนซ์ EC2 และบนเครื่องในเครื่อง
dnsmasq คืออะไร?
DNSmasq เป็นเครื่องมือที่เกี่ยวข้องกับ Linux ที่รองรับการแคช DNS, DHCP, TFTP และ DNS มันถูกสร้างขึ้นมาให้มีขนาดกะทัดรัดและน้ำหนักเบา ทำให้เหมาะสำหรับเครือข่ายและไฟร์วอลล์ที่มีข้อจำกัดด้านทรัพยากรน้อยลง
มันตรงไปตรงมาอย่างเหลือเชื่อในการติดตั้งและกำหนดค่า ในการตั้งค่า DNS และ DHCP สำหรับเครือข่ายย่อย dnsmasq เป็นโซลูชันที่ยืดหยุ่นและใช้งานได้จริง
เป็นไปได้ที่จะตั้งค่าตัวระบุที่กำหนด DHCP และคำแนะนำที่เกี่ยวข้องสำหรับแต่ละเซิร์ฟเวอร์หรือสำหรับคอนโทรลเลอร์ที่อยู่ภายใต้ ตัวเลือก DHCP แบบไดนามิกและแบบคงที่ได้รับการสนับสนุนโดย dnsmasq เป็นแบบพกพาและมีความสามารถในการจัดการ DNS และ DHCP สำหรับไคลเอ็นต์อย่างน้อย 1,000 ราย
เมื่อได้รับการสอบถาม DNS แล้ว dnsmasq จะตอบกลับจากแคชในเครื่องหรือส่งไปยังเซิร์ฟเวอร์ DNS ที่เชื่อถือได้ นอกเหนือจากการตอบสนองต่อคำขอ DNS สำหรับที่อยู่ในการกำหนดค่า DHCP แล้ว ยังตรวจสอบเนื้อหาของไฟล์ /etc/hosts
เพื่อระบุชื่อโฮสต์ท้องถิ่นที่ไม่อยู่ใน DNS สาธารณะ
การใช้เครื่องมือ dnsmasq แทนแคช DNS ในตัวของเบราว์เซอร์ช่วยเพิ่มประสิทธิภาพการท่องอินเทอร์เน็ตอย่างมาก เหมาะอย่างยิ่งสำหรับสภาพแวดล้อมแบบบูรณาการที่มีทรัพยากรจำกัด เนื่องจากตั้งค่าได้ง่ายมากและต้องการพื้นที่ดิสก์เพียงเล็กน้อย
คุณสมบัติของ dnsmasq
- ง่ายต่อการรวมเซิร์ฟเวอร์ DNS ภายในโดยใช้ dnsmasq โดยกำหนดค่าให้ส่งแบบสอบถามการแก้ปัญหาชื่อโดเมนเฉพาะไปยังเซิร์ฟเวอร์ที่เชื่อถือได้โดยเฉพาะ
- ปริมาณงานของเซิร์ฟเวอร์ลดลงและเพิ่มความน่าเชื่อถือโดยใช้เซิร์ฟเวอร์ DNS ในเครื่องที่กำหนดค่าไว้
- การกำหนดค่า DNS สำหรับปลายทางที่เปิดใช้งานไฟร์วอลล์นั้นค่อนข้างง่ายและไม่ขึ้นกับ DNS ที่ ISP ใช้
- หากไม่สามารถเข้าถึงพอร์ตที่เชื่อมโยงกับอินเทอร์เน็ตขณะดำเนินการตรวจสอบ DNS บนคอมพิวเตอร์ การค้นหาจะถูกระงับทันที
- ผ่านการสืบค้น PPP (โปรโตคอลแบบจุดต่อจุด) หรือการสืบค้น DHCP dnsmasq สามารถกำหนดค่าให้รวบรวมข้อมูลเป็นระยะ ๆ ได้โดยตรงจากเซิร์ฟเวอร์การแก้ปัญหาโดเมนพื้นฐาน
การติดตั้ง
ต้องปิดบริการ systemd-resolved
ก่อนทำการติดตั้งและกำหนดค่ายูทิลิตี้ dnsmasq
systemctl stop systemd-resolved
คุณยังสามารถปกปิดมันได้โดยใช้แอตทริบิวต์ mask เพื่อไม่ให้มันเริ่มทำงานโดยอัตโนมัติเมื่อคุณรีบูต
systemctl mask systemd-resolved
การติดตั้ง dnsmasq เป็นการดำเนินการเริ่มต้นที่คุณต้องดำเนินการหลังจากปิด systemd-resolved
DNSmasq ติดตั้งมาล่วงหน้าในลีนุกซ์เกือบทุกรุ่น ถ้าไม่คุณสามารถติดตั้งได้ด้วยตนเอง เปิดเทอร์มินัลคำสั่ง แล้วพิมพ์คำสั่งต่อไปนี้เพื่อทำ

sudo apt-get install dnsmasq
ใช้คำสั่งต่อไปนี้หากคุณเป็นผู้ใช้ yum:
sudo yum install -y dnsmasq
คำสั่งนี้จะติดตั้งเครื่องมือโดยอัตโนมัติและเริ่ม dnsmasq
ในพื้นหลัง

หลังจากติดตั้งสำเร็จ คุณสามารถตรวจสอบสถานะของ dnsmasq
ได้โดยใช้คำสั่งด้านล่าง
systemctl status dnsmasq
หากแสดงสถานะเป็น "ใช้งานอยู่ (กำลังทำงาน)" แสดงว่าการติดตั้งเสร็จสิ้นและกำหนดค่าเป็นพอร์ต 53 หากแสดงสถานะเป็น "ไม่ใช้งาน (ไม่ทำงาน)" คุณต้องรีสตาร์ททั้งเครื่อง Ubuntu และ dnsmasq อีกครั้ง สิ่งนี้จะแก้ไขข้อผิดพลาด

การกำหนดค่า
ตอนนี้ Dnsmasq พร้อมที่จะตั้งค่าบนเครื่องของคุณเป็นเซิร์ฟเวอร์ DNS แคชในเครื่องแล้ว ไฟล์กำหนดค่าเริ่มต้นอยู่ที่ /etc/dnsmasq.conf
ต้องแก้ไขไฟล์กำหนดค่านี้เพื่อตั้งค่ายูทิลิตี้ dnsmasq
ในระบบ
ใช้คำสั่งนี้เพื่อเปิดและแก้ไขไฟล์ปรับแต่ง
nano /etc/dnsmasq.conf
ไฟล์ปรับแต่งต้องแก้ไขด้วยสิทธิ์รูทเท่านั้น เพียงล้างทุกอย่างในไฟล์รวมถึงความคิดเห็น และเพียงคัดลอกและวางและบันทึกการตั้งค่าการกำหนดค่านี้
port=53 domain-needed bogus-priv listen-address=127.0.0.1 expand-hosts domain=geek-demo.com cache-size=1000
ให้ฉันอธิบายสั้น ๆ ว่าแต่ละพารามิเตอร์หมายถึงอะไร
- พอร์ต – เพื่อระบุหรือผูกพอร์ตที่ Dnsmasq จะใช้เพื่อรับคำขอ DNS
- จำเป็นต้องใช้โดเมน – ส่งเฉพาะชื่อโดเมนไปยังเซิร์ฟเวอร์ DNS ต้นน้ำ
- bogus-priv – ป้องกันโดเมนและการส่งต่อพอร์ต
- ที่อยู่ฟัง – เพื่อกำหนดที่อยู่เซิร์ฟเวอร์ชื่อ โดยทั่วไปแล้ว localhost จะถูกใช้เป็นค่าเริ่มต้นสำหรับการตั้งค่าเซิร์ฟเวอร์ DNS ในเครื่อง
- โดเมน – เพื่อกำหนดค่าโดเมนที่ dnsmasq ต่อท้ายตัวระบุแบบสั้น
- ขนาดแคช – ขนาด แคช DNS สูงสุดที่อนุญาตในที่จัดเก็บ

หลังจากทำการเปลี่ยนแปลงที่จำเป็นทั้งหมดแล้ว ให้บันทึกและปิดไฟล์ปรับแต่ง และขั้นตอนต่อไปคือการแก้ไขไฟล์ /etc/resolv.conf
เพื่อเพิ่มที่อยู่การแก้ปัญหาโฮสต์ในเครื่อง ใช้คำสั่งด้านล่างเพื่อเปิดด้วยโปรแกรมแก้ไขนาโน
nano /etc/resolv.conf
ที่นี่ คุณสามารถค้นหาเนมเซิร์ฟเวอร์ทั้งหมดที่ระบบของคุณใช้สำหรับการแก้ปัญหาที่อยู่ ในรายการนั้น ให้เพิ่มที่อยู่ย้อนกลับด้วย เพิ่ม “ nameserver 127.0.0.1 ” และเก็บไว้ในบรรทัดแรก

บันทึกและออกจากไฟล์กำหนดค่า เพื่อให้การตั้งค่าที่อัปเดตมีผล ให้รีสตาร์ทยูทิลิตี้ dnsmasq
systemctl restart dnsmasq
การทดสอบเซิร์ฟเวอร์แคช DNS ในพื้นที่
การทดสอบเซิร์ฟเวอร์ DNS ในเครื่องเป็นเรื่องง่าย เปิดบรรทัดคำสั่งและใช้คำสั่ง dig เพื่อตรวจสอบการแคช DNS เมื่อคุณรันคำสั่ง dig เป็นครั้งแรก ผลลัพธ์ควรจะค่อนข้างธรรมดา
┌──(rootkali)-[/home/writer] └─# dig geekflare.com 1 ; <<>> DiG 9.18.0-2-Debian <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 227 IN A 172.66.43.163 geekflare.com. 227 IN A 172.66.40.93 ;; Query time: 31 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:52:49 EDT 2022 ;; MSG SIZE rcvd: 74
ที่นี่ โปรดทราบว่าเวลาในการสืบค้นประมาณ 31 มิลลิวินาทีเพื่อสอบถามรายละเอียดจากเซิร์ฟเวอร์ชื่อต้นน้ำ ดำเนินการคำสั่ง dig เดียวกันอีกครั้ง และคุณจะสังเกตเห็นการลดลงอย่างมากในระยะเวลาการสืบค้น
┌──(rootkali)-[/home/writer] └─# dig geekflare.com 1 ; <<>> DiG 9.18.0-2-Debian <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 281 IN A 172.66.40.93 geekflare.com. 281 IN A 172.66.43.163 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:58:10 EDT 2022 ;; MSG SIZE rcvd: 74
ที่นี่ เวลาในการสืบค้นคือ 0 มิลลิวินาที นี่เป็นเพราะข้อเท็จจริงที่ว่าหลังจากทำการค้นหาครั้งแรก dnsmasq เก็บข้อมูล และการค้นหาที่ดำเนินการในภายหลังทั้งหมดเกิดขึ้นทันทีเนื่องจากการใช้แคชที่เก็บไว้ จำเป็นต้องรีสตาร์ท dnsmasq หากคุณต้องการลบแคช DNS ที่เก็บไว้
ห่อ
ในบทความนี้ เราได้เห็นวิธีการตั้งค่าและกำหนดค่า dnsmasq ให้ทำงานเป็นเซิร์ฟเวอร์ DNS ในเครื่อง คุณอาจสนใจที่จะเรียนรู้เกี่ยวกับวิธีเปลี่ยนเซิร์ฟเวอร์ DNS เพื่อการท่องเว็บที่เร็วขึ้นในระบบปฏิบัติการต่างๆ