การแก้ไขปัญหา Debian Linux DNS Resolution

Mar 26 2023
สถานการณ์ คุณลงชื่อเข้าใช้ระบบ Linux เปิดเทอร์มินัล รัน sudo apt update และ BOOOM! ไม่สามารถแก้ไขชื่อโฮสต์: ..

สถานการณ์

คุณลงชื่อเข้าใช้ระบบ Linux เปิดเทอร์มินัล เรียกใช้sudo apt update และ BOOOM!

Could not resolve hostname: ...

อย่าตื่นตกใจ! นี่เป็นเรื่องง่าย เผชิญกับปัญหานี้โดยให้หน้าอกของคุณออกมาเหมือนผู้ชายและแก้ไขมัน!

แล้วเราจะทำอย่างไรและอะไรเป็นสาเหตุของปัญหานี้ในตอนแรก ?

ไม่ใช่เรื่องง่ายที่จะทำให้สาเหตุของปัญหานี้เป็นสากล เนื่องจากแต่ละกรณีเป็นรายบุคคล แต่สำหรับการสาธิตในบทความนี้ ฉันจะใช้กรณีส่วนตัวของฉันและอธิบายวิธีการแก้ไขปัญหาและแก้ไขปัญหาในภายหลัง

ดังนั้นในกรณีของฉันหลังจากอัปเดตและอัปเกรดฉันsystemd-resolved.serviceก็หยุดทำงาน นี่คือเหตุผลที่คุณควรสำรองข้อมูลไว้เสมอ เพราะการอัปเดตอาจทำให้สิ่งต่างๆ เสียหายได้ ไม่มีอะไรสมบูรณ์แบบ แม้แต่ Linux

ฉันจะไม่ลงรายละเอียดมากเกินไปว่าคือsystemdอะไร ในระดับที่สูงมากsystemdเป็น daemon แรกที่เริ่มต้นเมื่อเคอร์เนล Linux บูทและสุดท้ายจะสิ้นสุดเมื่อระบบปิด

สิ่งที่อาจเกิดขึ้นในกรณีของฉันคือsystemdไม่ได้เริ่มต้นตัวแก้ไข DNS อย่างถูกsystemd-resolvedต้อง

อาจมีหลายวิธีในการแก้ปัญหานี้และฉันจะแสดงให้คุณเห็นสองวิธี

รีสตาร์ทตัวแก้ไข DNS

  1. อันดับแรก สิ่งที่คุณสามารถทำได้คือการตรวจสอบว่าsystemd-resolvedบริการเริ่มต้นอย่างถูกต้องเมื่อบู๊ตเครื่องหรือไม่ คุณสามารถผ่านบันทึกของระบบสำหรับสิ่งนั้น:
  2. journalctl | grep resol
    

systemctl status systemd-resolved | grep running

Active: active (running) since DATE & TIME

3. เพื่อให้แน่ใจว่าทุกอย่างทำงานได้อย่างถูกต้อง คุณควรตรวจสอบว่า DNS cacher กำลังฟังพอร์ต 53 ของ localhost ดังนี้:

sudo netstat -tulpn | grep LISTEN

tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN PID/systemd-resol

tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN PID/systemd-resol

tcp6 0 0 :::5355 :::* LISTEN PID/systemd-resol

หากคุณไม่เห็นสิ่งเหล่านี้ทั้งหมด คุณควรเริ่มบริการตัวแก้ไข DNS ใหม่ด้วยคำสั่งนี้:

sudo systemctl stop systemd-resolved && sudo systemctl start systemd-resolved

ตอนนี้เข้าสู่ตัวเลือกที่สอง

หยุดและปิดใช้งาน systemd-resolved และใช้เราเตอร์/ISP ของคุณเป็นตัวแก้ไข DNS

หากวิธีแก้ปัญหาก่อนหน้านี้ไม่ได้ผลและคุณไม่อยากเจาะลึกลงไปในปัญหาและกำลังมองหาวิธีบายพาสแบบง่ายๆ สิ่งที่คุณสามารถทำได้คือปิดใช้งานและแก้ไขไฟล์การกำหนดค่า DNS systemd-resolvedใน/etcโฟลเดอร์เพื่อเปลี่ยนเส้นทางการสืบค้น DNS ใดๆ โดยตรงไปยัง เราเตอร์ / เกตเวย์ที่บ้านของคุณซึ่งจะจัดการส่วนที่เหลือ

Please make sure that your router is pointing to a valid DNS server in it's settings. Otherwise this solution will not work.

ตอนนี้คุณจะหยุดและปิดใช้งานได้systemd-resolvedอย่างไร และทำไมไม่เพียงแค่หยุด แต่ปิดการใช้งานด้วย

ฉันไม่รู้ว่าคุณจำตอนที่ฉันอธิบายสั้น ๆ ว่าsystemdทำอะไรได้บ้างในบทความนี้ แต่ถ้าคุณคุ้นเคยกับ Windows คุณก็น่าจะรู้ว่ามันStartup Programsคือ อะไร

มีsystemdความคล้ายคลึงกันในจุดประสงค์ เป็นโปรแกรมแรกในแผนผังกระบวนการของระบบลีนุกซ์ นอกจากนี้ยังรับผิดชอบในการเริ่มต้นบริการที่จำเป็นทั้งหมดของระบบปฏิบัติการเพื่อให้ทำงานได้อย่างถูกต้อง

และเช่นเดียวกับใน Windows คุณสามารถเปิดใช้งานและปิดใช้งานบริการตั้งแต่เริ่มระบบเมื่อบูตเครื่อง

เพื่อหลีกเลี่ยงการจัดการอย่างสมบูรณ์systemd-resolvedเราจะหยุดและป้องกันไม่ให้รีสตาร์ทหลังจากรีบูตด้วย

นี่คือวิธีการ:

sudo systemctl stop systemd-resolved && sudo systemctl disable systemd-resolved

sudo systemctl enable systemd-resolved

  1. เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความที่เรียกว่าnano
  2. sudo nano /etc/resolv.conf
    

เพียงทำตามไวยากรณ์เดียวกัน: nameserver DNS_SERVER_IPv4.

การเปลี่ยนแปลงจะมีผลทันทีหลังจากที่คุณบันทึกไฟล์ และคุณพร้อมที่จะท่องอินเทอร์เน็ตอีกครั้ง

ขอบคุณที่อ่านบทความทั้งหมด ฉันขอบคุณมาก หากคุณมีข้อเสนอแนะใด ๆ โปรดอย่าลังเลที่จะติดต่อฉัน