เมื่อพยายามเชื่อมต่อบริการใน Linux ข้อความ "No route to host" เป็นสิ่งที่ไม่อยากเจอมากที่สุด ข้อความกว้างๆ นี้หมายถึงคอมพิวเตอร์ของคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์เป้าหมายได้ ไม่ว่าจะเป็นเซิร์ฟเวอร์ท้องถิ่นหรือระยะไกล นี่คือวิธีแก้ไขข้อผิดพลาดการเชื่อมต่อ "no route to host" ใน Linux
ทำไมจึงได้ข้อผิดพลาด "No Route to Host"?
มีหลายเหตุผลที่อาจทำให้เกิดข้อผิดพลาดนี้ เครือข่ายใน Linux เป็นส택ที่ซับซ้อน ทำให้ยากที่จะระบุจุดที่แน่นอนของปัญหา
โฮสต์ออฟไลน์ / บริการไม่ได้ทำงาน
อาจดูชัดเจน แต่ควรตรวจสอบก่อนว่าเซิร์ฟเวอร์ที่พยายามเชื่อมต่อออนไลน์อยู่หรือไม่ อาจปิดปรับปรุงหรือมีปัญหา
บริการเองอาจยังไม่เริ่มทำงาน หากเป็นเซิร์ฟเวอร์ของคุณ ตรวจสอบว่าบริการเริ่มต้นและทำงานปกติแล้ว ด้วย Systemd ใช้คำสั่ง:
sudo systemctl status SERVICENAME
พอร์ตผิด
อาจพยายามเชื่อมต่อที่พอร์ตผิด ผู้ดูแลระบบมักรันบริการทั่วไปอย่าง SSH บนพอร์ตที่ต่างกันเพื่อป้องกันโจมตี
ถ้าเซิร์ฟเวอร์ไม่ใช่ของคุณ ตรวจสอบเอกสารหรือติดต่อฝ่ายสนับสนุน
สำหรับเซิร์ฟเวอร์ของตัวเอง ใช้ NMAP หาพอร์ตที่บริการทำงาน:
sudo nmap -sS your.server.ip
หากคิดว่าใช้พอร์ตแปลกๆ ใช้แฟล็ก -p- สแกนทุกพอร์ต (แต่อาจนาน)
Iptables บล็อกการเชื่อมต่อ
อาจตั้งค่า iptables บล็อกการเชื่อมต่อที่พอร์ตนั้นโดยไม่ได้ตั้งใจ จะได้ข้อความเดียวกันไม่ว่าจะตั้งค่าบนเซิร์ฟเวอร์หรือเดสก์ท็อป จึงควรตรวจสอบทั้งสอง ดูกฎ iptables:
sudo iptables -S
DNS ตั้งค่าผิด
ถ้าทุกอย่างล้มเหลว ลอง ping ไปที่ IP ที่ต้องการเชื่อมต่อ อาจเป็นที่คอมพิวเตอร์เชื่อมต่อ DNS server ไม่ได้
ping -c3 your.server.ip
ถ้า ping ได้แต้อันโดเมนไม่ได้ แสดงว่าเป็นปัญหา DNS
ผู้ใช้ Systemd ตรวจสอบ DNS servers ที่ระบบใช้:
systemd-resolve --status
แยกตามอินเทอร์เฟซ ตรวจสอบอินเทอร์เฟซที่ใช้เชื่อมต่อ
โดยทั่วไปคอมพิวเตอร์จะค้นหาข้อมูล DNS ผ่าน DHCP หากใช้ static IP หรือเครือข่ายตั้งค่าต่างออกไป อาจต้องตั้ง DNS เอง
แก้ไข "/etc/systemd/resolved.conf" ยกความคิดเห็นบรรทัด DNS และเพิ่ม IP ของเราเตอร์หรือ DNS server อื่น:
DNS=192.168.1.1
Fallback DNS เริ่มต้นของ Systemd คือ DNS ของ Google อยู่ภายใต้ FallbackDNS
ถ้าใช้ OpenRC หรือ Systemd alternatives ข้อมูล DNS อยู่ใน "/etc/resolv.conf":
nameserver 192.168.1.1
ถ้าว่างเปล่า ใส่ IP เราเตอร์หรือ DNS server ที่ต้องการ แล้วรีสตาร์ทเครือข่ายหรือคอมพิวเตอร์
วิธี GUI
ถ้าใช้เดสก์ท็อปกราฟิกกับ Network Manager แก้ไขข้อมูลการเชื่อมต่อได้ที่นั่น เปิดแอปเล็ตหรือไปที่ตั้งค่าระบบ เลือกการเชื่อมต่อ หาแท็บ "IPv4" เปลี่ยนเป็น "Manual" ใส่ IP ของคอมพิวเตอร์และ IP เราเตอร์เป็นเกตเวย์ ในช่อง DNS ใส่ IP เราเตอร์หรือ DNS server อื่น
การตั้งค่าเครือข่ายหรือโฮสต์ผิด
มีตัวเลือกตั้งค่าอื่นๆ ที่อาจผิด ทำให้ไม่สามารถเชื่อมต่อเซิร์ฟเวอร์ได้
ก่อนอื่น ตรวจสอบว่าการตั้งค่าเครือข่ายของคอมพิวเตอร์ถูกต้อง ตรวจสอบไฟล์ตั้งค่าและลองเชื่อมต่ออินเทอร์เน็ตอีกวิธี
ถ้าใช้ hostname เฉพาะหรือตั้งค่า hosts บนเซิร์ฟเวอร์/ไคลเอนต์ ต้องแน่ใจว่าเครื่องทั้งสองเชื่อมต่อกันได้ ตรวจสอบ "/etc/hosts", "/etc/hosts.allow", "/etc/hosts.deny"
สุดท้าย ตรวจสอบการตั้งค่าเซิร์ฟเวอร์ อาจมีการตั้งค่าผิดบนเซิร์ฟเวอร์ป้องกันไคลเอนต์เชื่อมต่อ
หวังว่าเคล็ดลับเหล่านี้ช่วยแก้ไขปัญหา "No Route to Host" ได้ นอกจากนี้สามารถเรียนรู้วิควบคุม Wi-Fi ใน Linux หรือตรวจสอบว่าไฟร์วอลล์บล็อกการเชื่อมต่อหรือไม่