Linux แก้ไขปัญหา DNS ไม่สามารถ Resolve ได้: สาเหตุและวิธีแก้

หากใน Linux ดูเหมือนว่ายังเชื่อมต่ออินเทอร์เน็ตได้อยู่ แต่เปิดเว็บไซต์ไม่ได้ หรือเชื่อมต่อด้วย IP address ได้แต่เชื่อมต่อด้วยชื่อโดเมนไม่ได้ ปัญหามักเกี่ยวข้องกับการ resolve DNS โดย DNS มีหน้าที่แปลงชื่อโดเมนอย่าง example.com ให้เป็น IP address จริง หากขั้นตอนนี้ล้มเหลว แม้เครือข่ายจะยังทำงานอยู่ แต่การใช้งานอินเทอร์เน็ตทั่วไปก็จะมีปัญหาอย่างมาก

อาการที่พบบ่อย

  • เบราว์เซอร์แสดงข้อความว่าไม่พบเซิร์ฟเวอร์
  • ping 8.8.8.8 สำเร็จ แต่ ping google.com ล้มเหลว
  • apt, dnf, yum, pacman ดาวน์โหลดแพ็กเกจไม่ได้
  • มีข้อความ Temporary failure in name resolution

สิ่งที่ควรตรวจสอบก่อน

ก่อนอื่นควรแยกให้ออกว่าปัญหาเกิดกับทั้งเครือข่าย หรือเกิดเฉพาะกับ DNS เท่านั้น

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

ถ้าเข้าถึง 8.8.8.8 ได้ แต่เข้าถึง google.com ไม่ได้ มักหมายถึงปัญหาอยู่ที่ DNS แต่ถ้าแม้แต่ IP address ก็ยังเข้าไม่ได้ ปัญหาอาจอยู่ที่ Wi-Fi, network interface, gateway หรือ routing

สาเหตุหลัก

1. การตั้งค่า /etc/resolv.conf ไม่ถูกต้อง

ใน Linux หลายดิสทริบิวชัน ข้อมูล DNS server จะถูกเก็บไว้ในไฟล์ /etc/resolv.conf หากในไฟล์นี้ไม่มี nameserver ที่ถูกต้อง ก็จะไม่สามารถ resolve ชื่อโดเมนได้

cat /etc/resolv.conf

ตัวอย่าง:

nameserver 8.8.8.8
nameserver 1.1.1.1

หากไฟล์ว่าง หรือชี้ไปยัง local DNS ที่ผิด ก็จะเกิดปัญหาได้ อย่างไรก็ตาม ใน Linux รุ่นใหม่ ไฟล์นี้มักถูกสร้างอัตโนมัติโดย NetworkManager หรือ systemd-resolved ดังนั้นการแก้ไขด้วยมืออาจถูกเขียนทับภายหลัง

2. systemd-resolved มีปัญหา

ในระบบอย่าง Ubuntu มักใช้ systemd-resolved ในการจัดการ DNS และใช้ 127.0.0.53 เป็น local stub resolver หากบริการนี้หยุดทำงาน การ resolve DNS ก็จะล้มเหลว

systemctl status systemd-resolved
resolvectl status

หากมีปัญหา สามารถรีสตาร์ตบริการได้:

sudo systemctl restart systemd-resolved

3. NetworkManager ใช้ค่า DNS ไม่ถูกต้อง

ใน Linux แบบเดสก์ท็อป NetworkManager มักรับค่า DNS ผ่าน DHCP หากโปรไฟล์เครือข่ายเสียหาย หรือเกิดปัญหาระหว่างเชื่อมต่อใหม่ ค่า DNS ที่ถูกต้องอาจไม่ถูกนำมาใช้

nmcli dev show | grep DNS
nmcli connection show

หากจำเป็น สามารถรีสตาร์ตได้:

sudo systemctl restart NetworkManager

4. ผลกระทบจาก VPN, proxy หรือ firewall

VPN อาจส่งคำขอ DNS ไปผิดเส้นทาง หรือ firewall อาจบล็อกพอร์ต 53 ทำให้ระบบดูเหมือนเครือข่ายยังปกติ แต่ไม่สามารถ resolve ชื่อโดเมนได้

5. แคช DNS เสียหรือเก่าเกินไป

หากแคชในเครื่องเก่าหรือเสียหาย อาจทำให้บางโดเมนใช้งานไม่ได้ ในระบบที่ใช้ systemd-resolved หรือ nscd การล้างแคชอาจช่วยได้

sudo resolvectl flush-caches

ขั้นตอนแก้ปัญหาแบบใช้งานจริง

ขั้นตอนที่ 1: ทดสอบถามไปยัง Public DNS โดยตรง

nslookup google.com 8.8.8.8
dig google.com @8.8.8.8

หากคำสั่งนี้ตอบกลับได้ตามปกติ แสดงว่า public DNS ภายนอกทำงานได้ และปัญหาอาจอยู่ที่การตั้งค่าในเครื่อง

ขั้นตอนที่ 2: ตั้งค่า Public DNS ชั่วคราว

sudo sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" > /etc/resolv.conf'

วิธีนี้เหมาะกับการกู้ระบบชั่วคราว แต่หลัง reboot หรือ reconnect เครือข่าย ไฟล์นี้อาจถูกเปลี่ยนกลับ สำหรับการแก้ถาวร ควรแก้ที่ NetworkManager, netplan หรือ systemd-resolved

ขั้นตอนที่ 3: ตรวจสอบ netplan บน Ubuntu

sudo nano /etc/netplan/*.yaml

ตัวอย่าง:

nameservers:
  addresses: [8.8.8.8,1.1.1.1]

จากนั้นใช้คำสั่ง:

sudo netplan apply

ขั้นตอนที่ 4: ขอข้อมูล DHCP ใหม่

sudo dhclient -r
sudo dhclient

หาก DHCP server แจกข้อมูล DNS ผิด ขั้นตอนนี้อาจช่วยแก้ปัญหาได้

คำสั่งที่มีประโยชน์สำหรับตรวจสอบ

ping -c 4 8.8.8.8
ping -c 4 google.com
cat /etc/resolv.conf
systemctl status systemd-resolved
resolvectl status
nmcli dev show | grep DNS
nslookup google.com
dig google.com
journalctl -u systemd-resolved --no-pager | tail -n 50

วิธีป้องกันไม่ให้เกิดซ้ำ

  • อย่าแก้แค่ /etc/resolv.conf ด้วยมือแล้วจบ
  • ควรเข้าใจว่า DNS ถูกจัดการโดย DHCP, NetworkManager หรือ systemd-resolved
  • หลังติดตั้งหรือใช้งาน VPN ควรตรวจสอบว่า DNS เปลี่ยนหรือไม่
  • ในเครื่องเซิร์ฟเวอร์ ควรกำหนด DNS แบบคงที่ให้ชัดเจน

สรุป

เมื่อ Linux ไม่สามารถ resolve DNS ได้ สิ่งสำคัญที่สุดคือตรวจสอบก่อนว่ายังติดต่อผ่าน IP address ได้หรือไม่ เพราะจะช่วยแยกได้ว่าปัญหาอยู่ที่ DNS อย่างเดียว หรือเป็นปัญหาเครือข่ายโดยรวม จากนั้นจึงตรวจสอบ /etc/resolv.conf, systemd-resolved, NetworkManager, DHCP และการตั้งค่า VPN ตามลำดับ ไม่ควรหยุดแค่การแก้ชั่วคราว แต่ควรเข้าใจด้วยว่าระบบของคุณมีองค์ประกอบใดเป็นผู้จัดการ DNS จริง ๆ

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *