ไฟล์ /etc/hosts เป็น DNS local database บนเครื่องเอง Map IP address → hostname โดยไม่ต้องมี DNS server ใช้สะดวกสำหรับ:
- Server 内部 (Raspberry Pi, VM, LXC containers)
- Block เว็บไซต์ (map ไป 127.0.0.1 หรือ 0.0.0.0)
- ทดสอบเว็บไซต์ก่อนเปลี่ยน DNS จริง
- Override DNS สำหรับ development
ดูเนื้อหาปัจจุบัน
cat /etc/hosts
ค่าเริ่มต้นมี 2 บรรทัดสำหรับ localhost:
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback
แก้ไขไฟล์ hosts
ต้องใช้สิทธิ์ root ใช้ editor ใดก็ได้ (nano, vim, gedit):
sudo nano /etc/hosts
รูปแบบบรรทัด:
IP_address hostname1 hostname2 ...
ตัวอย่างการใช้งาน:
1. Raspberry Pi / Server 内部:
192.168.1.50 pi.local 192.168.1.51 nas.local 192.168.122.10 vm-ubuntu.local
ใช้งาน: ssh pi.local, ping nas.local แทน IP
2. Block เว็บไซต์:
0.0.0.0 facebook.com 0.0.0.0 www.facebook.com 0.0.0.0 ads.example.com
หมายเหตุ: บราวเซอร์สมัยใหม่ใช้ DNS-over-HTTPS (DoH) อาจข้าม hosts ไป → ต้องปิด DoH ใน browser settings
3. Development (local domain):
127.0.0.1 myapp.test 127.0.0.1 api.myapp.test
ตรวจสอบการทำงาน
ping pi.local getent hosts pi.local # ควรคืนค่า 192.168.1.50
ข้อควรระวัง
- ไฟล์ hosts ใช้ได้เฉพาะเครื่องที่แก้ไข (ไม่กระจายไปเครื่องอื่น)
- ไม่รองรับ wildcard (*.example.com) ต้องระบุทุก subdomain
- Priority: /etc/hosts → mDNS → DNS server (ขึ้นแต่ nsswitch.conf)
- IPv6: ใช้ ::1 สำหรับ localhost, หรือ IPv6 address จริง
Windows ก็มี hosts ไฟล์เดียวกันที่ C:\Windows\System32\drivers\etc\hosts ใช้งานเหมือนกันทุกประการ