
บทนำ: DNS และ DHCP หัวใจสำคัญของระบบเครือข่ายองค์กร
ในระบบเครือข่ายขององค์กรทุกขนาด ตั้งแต่ออฟฟิศเล็กๆ ไปจนถึงดาต้าเซ็นเตอร์ขนาดใหญ่ มีบริการพื้นฐานสองอย่างที่ขาดไม่ได้เลย นั่นคือ DNS (Domain Name System) และ DHCP (Dynamic Host Configuration Protocol) ทั้งสองระบบนี้ทำงานเบื้องหลังอย่างเงียบๆ แต่หากขาดหายไปแม้เพียงชั่วครู่ ผู้ใช้งานทุกคนในเครือข่ายจะได้รับผลกระทบทันที ไม่ว่าจะเป็นการเข้าเว็บไซต์ไม่ได้ ส่งอีเมลไม่ผ่าน หรือแม้แต่เชื่อมต่อเครือข่ายไม่ได้เลย
บทความนี้จะพาคุณทำความเข้าใจทั้ง DNS และ DHCP อย่างลึกซึ้ง ตั้งแต่หลักการทำงาน สถาปัตยกรรม ไปจนถึงการติดตั้งและจัดการบนทั้ง Linux และ Windows Server พร้อมเทคนิคการแก้ไขปัญหาที่พบบ่อยในสภาพแวดล้อมจริง เหมาะสำหรับ System Admin, Network Engineer และผู้ที่สนใจเรียนรู้ระบบเครือข่ายองค์กรอย่างจริงจัง
ส่วนที่ 1: DNS (Domain Name System) คืออะไร?
DNS คือระบบที่ทำหน้าที่แปลงชื่อโดเมน (Domain Name) ที่มนุษย์อ่านได้ง่าย เช่น www.siamlancard.com ไปเป็นหมายเลข IP Address เช่น 122.155.168.7 ที่คอมพิวเตอร์ใช้ในการสื่อสาร กล่าวง่ายๆ DNS เปรียบเสมือน “สมุดโทรศัพท์ของอินเทอร์เน็ต” ที่ช่วยให้เราไม่ต้องจำหมายเลข IP Address ของทุกเว็บไซต์
DNS ถูกพัฒนาขึ้นในปี 1983 โดย Paul Mockapetris เพื่อมาแทนที่ระบบ HOSTS file เดิมที่ต้องอัปเดตด้วยมือ ปัจจุบัน DNS เป็นหนึ่งในโปรโตคอลที่สำคัญที่สุดของอินเทอร์เน็ต ทำงานบน Port 53 ทั้ง UDP (สำหรับ query ปกติ) และ TCP (สำหรับ zone transfer และ query ขนาดใหญ่)
1.1 สถาปัตยกรรมแบบลำดับชั้นของ DNS (DNS Hierarchy)
DNS มีโครงสร้างแบบลำดับชั้น (hierarchical) คล้ายต้นไม้กลับหัว โดยแบ่งออกเป็นระดับต่างๆ ดังนี้:
- Root DNS Servers (เซิร์ฟเวอร์ราก) — เป็นจุดเริ่มต้นสูงสุดของระบบ DNS มีทั้งหมด 13 กลุ่ม (ตั้งชื่อ A ถึง M) กระจายอยู่ทั่วโลกผ่าน Anycast มีหน้าที่ชี้ไปยัง TLD servers ที่เหมาะสม
- TLD (Top-Level Domain) Servers — ดูแลโดเมนระดับบนสุด เช่น
.com,.org,.net,.thแต่ละ TLD มี registry ของตัวเอง เช่น Verisign ดูแล.comและ.net - Authoritative Name Servers — เป็นเซิร์ฟเวอร์ที่เก็บข้อมูล DNS records จริงๆ ของแต่ละโดเมน เช่น authoritative server ของ siamlancard.com จะรู้ว่า IP ของเว็บนี้คืออะไร
- Recursive Resolver (DNS Resolver) — เป็นตัวกลางที่รับ query จากผู้ใช้แล้วไปค้นหาคำตอบจาก DNS hierarchy ทีละขั้น โดยทั่วไปคือ DNS server ของ ISP หรือ public DNS เช่น Google (8.8.8.8) หรือ Cloudflare (1.1.1.1)
1.2 ประเภทของ DNS Records ที่สำคัญ
DNS เก็บข้อมูลในรูปแบบ Resource Records (RR) โดยแต่ละ record มีหน้าที่แตกต่างกัน ต่อไปนี้คือ record types ที่ admin ต้องรู้:
| Record Type | ชื่อเต็ม | หน้าที่ | ตัวอย่าง |
|---|---|---|---|
| A | Address | แมป hostname ไปยัง IPv4 address | www.example.com → 192.168.1.10 |
| AAAA | IPv6 Address | แมป hostname ไปยัง IPv6 address | www.example.com → 2001:db8::1 |
| CNAME | Canonical Name | สร้าง alias ชี้ไปยังชื่อโดเมนอื่น | mail.example.com → exchange.example.com |
| MX | Mail Exchanger | ระบุ mail server ที่รับอีเมลของโดเมน | example.com MX 10 mail.example.com |
| TXT | Text | เก็บข้อมูลข้อความ เช่น SPF, DKIM, DMARC | “v=spf1 include:_spf.google.com ~all” |
| SRV | Service | ระบุ service location สำหรับบริการเฉพาะ | _sip._tcp.example.com SRV 10 60 5060 sip.example.com |
| PTR | Pointer | Reverse DNS แปลง IP กลับเป็นชื่อโดเมน | 10.1.168.192.in-addr.arpa → server1.example.com |
| NS | Name Server | ระบุ authoritative DNS server ของโดเมน | example.com NS ns1.example.com |
| SOA | Start of Authority | ข้อมูลหลักของ zone เช่น serial, refresh, retry, expire | ระบุ primary NS, email admin, serial number |
1.3 กระบวนการ DNS Resolution (การค้นหา DNS)
เมื่อคุณพิมพ์ URL ในเบราว์เซอร์ กระบวนการ DNS resolution จะเกิดขึ้นตามลำดับดังนี้:
- ตรวจสอบ Local Cache — เบราว์เซอร์และ OS จะตรวจสอบ cache ก่อน หากเคย resolve มาก่อนและยังไม่หมดอายุ (TTL) จะใช้ค่าเดิม
- ตรวจสอบ hosts file — ระบบจะดูไฟล์ hosts (
/etc/hostsบน Linux หรือC:\Windows\System32\drivers\etc\hostsบน Windows) - ส่ง Query ไปยัง Recursive Resolver — หากไม่พบใน cache จะส่ง query ไปยัง DNS resolver ที่ตั้งค่าไว้
- Resolver ถาม Root Server — Resolver ส่ง query ไปยัง root server เพื่อถามว่า TLD server ของ
.comอยู่ที่ไหน - Resolver ถาม TLD Server — TLD server ตอบกลับว่า authoritative server ของโดเมนนั้นอยู่ที่ไหน
- Resolver ถาม Authoritative Server — ได้รับคำตอบสุดท้าย (IP address) แล้วส่งกลับไปยังผู้ใช้
- Cache ผลลัพธ์ — Resolver เก็บผลลัพธ์ไว้ใน cache ตาม TTL ที่กำหนด
กระบวนการทั้งหมดนี้เกิดขึ้นภายในเสี้ยววินาที แม้จะต้องสอบถามหลายเซิร์ฟเวอร์ทั่วโลกก็ตาม
ส่วนที่ 2: การติดตั้ง DNS Server
2.1 ติดตั้ง BIND (Berkeley Internet Name Domain) บน Linux
BIND เป็น DNS server ที่ได้รับความนิยมมากที่สุดในโลก ใช้งานบน Linux/Unix มาตั้งแต่ยุคแรกๆ ของอินเทอร์เน็ต ปัจจุบันเวอร์ชันล่าสุดคือ BIND 9 ซึ่งรองรับ DNSSEC, IPv6 และฟีเจอร์ความปลอดภัยสมัยใหม่
การติดตั้งบน Ubuntu/Debian:
# ติดตั้ง BIND9
sudo apt update
sudo apt install bind9 bind9utils bind9-doc dnsutils -y
# เปิด service
sudo systemctl enable named
sudo systemctl start named
# ตรวจสอบสถานะ
sudo systemctl status named
การติดตั้งบน CentOS/RHEL:
sudo dnf install bind bind-utils -y
sudo systemctl enable named
sudo systemctl start named
sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload
การตั้งค่า Zone File:
ไฟล์ zone เป็นหัวใจของ DNS server ตัวอย่างการสร้าง forward zone สำหรับ company.local:
; /etc/bind/zones/db.company.local
$TTL 86400
@ IN SOA ns1.company.local. admin.company.local. (
2026040801 ; Serial (YYYYMMDDNN)
3600 ; Refresh (1 hour)
1800 ; Retry (30 min)
604800 ; Expire (1 week)
86400 ; Minimum TTL (1 day)
)
; Name Servers
@ IN NS ns1.company.local.
@ IN NS ns2.company.local.
; A Records
ns1 IN A 10.0.1.10
ns2 IN A 10.0.1.11
dc01 IN A 10.0.1.20
filesvr IN A 10.0.1.30
websvr IN A 10.0.1.40
mailsvr IN A 10.0.1.50
; CNAME Records
www IN CNAME websvr.company.local.
ftp IN CNAME filesvr.company.local.
mail IN CNAME mailsvr.company.local.
; MX Records
@ IN MX 10 mailsvr.company.local.
การตั้งค่า Reverse Zone:
; /etc/bind/zones/db.10.0.1
$TTL 86400
@ IN SOA ns1.company.local. admin.company.local. (
2026040801
3600
1800
604800
86400
)
@ IN NS ns1.company.local.
@ IN NS ns2.company.local.
10 IN PTR ns1.company.local.
11 IN PTR ns2.company.local.
20 IN PTR dc01.company.local.
30 IN PTR filesvr.company.local.
40 IN PTR websvr.company.local.
50 IN PTR mailsvr.company.local.
ไฟล์ named.conf.local:
zone "company.local" {
type master;
file "/etc/bind/zones/db.company.local";
allow-transfer { 10.0.1.11; }; // อนุญาต zone transfer ไปยัง secondary
};
zone "1.0.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.10.0.1";
allow-transfer { 10.0.1.11; };
};
อย่าลืมตรวจสอบ syntax ก่อน restart ด้วยคำสั่ง:
sudo named-checkconf
sudo named-checkzone company.local /etc/bind/zones/db.company.local
sudo systemctl restart named
2.2 ติดตั้ง DNS Server บน Windows Server
Windows Server มี DNS Server role ในตัว ซึ่งบูรณาการกับ Active Directory ได้อย่างแน่นหนา การติดตั้งทำได้ผ่าน Server Manager:
- เปิด Server Manager → Add Roles and Features
- เลือก DNS Server role → Next → Install
- หลังติดตั้ง เปิด DNS Manager จาก Administrative Tools
- สร้าง Forward Lookup Zone — เลือก Primary zone และตั้งชื่อ zone
- สร้าง Reverse Lookup Zone — ระบุ Network ID (เช่น 10.0.1)
- เพิ่ม A Records, CNAME Records, MX Records ตามต้องการ
หากใช้ร่วมกับ Active Directory สามารถเลือก Active Directory-Integrated Zone ซึ่งจะ replicate ข้อมูล DNS ผ่าน AD replication แทนการทำ zone transfer แบบดั้งเดิม ทำให้มีความปลอดภัยสูงขึ้นและจัดการง่ายกว่า
การจัดการผ่าน PowerShell ก็ทำได้สะดวก:
# สร้าง Forward Lookup Zone
Add-DnsServerPrimaryZone -Name "company.local" -ZoneFile "company.local.dns"
# เพิ่ม A Record
Add-DnsServerResourceRecordA -ZoneName "company.local" -Name "websvr" -IPv4Address "10.0.1.40"
# เพิ่ม CNAME
Add-DnsServerResourceRecordCName -ZoneName "company.local" -Name "www" -HostNameAlias "websvr.company.local"
# เพิ่ม MX Record
Add-DnsServerResourceRecordMX -ZoneName "company.local" -Name "." -MailExchange "mailsvr.company.local" -Preference 10
# ดู records ทั้งหมดใน zone
Get-DnsServerResourceRecord -ZoneName "company.local"
2.3 DNS Forwarding และ Caching
DNS Forwarding คือการตั้งค่าให้ DNS server ส่งต่อ query ที่ตอบเองไม่ได้ไปยัง DNS server ภายนอก แทนที่จะ resolve เองตั้งแต่ root server สิ่งนี้ช่วยลดเวลาในการ resolve และลด traffic ออกนอกเครือข่าย
ใน BIND สามารถตั้งค่า forwarding ใน named.conf.options:
options {
directory "/var/cache/bind";
forwarders {
8.8.8.8; // Google DNS
1.1.1.1; // Cloudflare DNS
};
forward only; // ส่งต่ออย่างเดียว ไม่ resolve เอง
// หรือ forward first; // ลอง forward ก่อน ถ้าไม่สำเร็จจึง resolve เอง
dnssec-validation auto;
listen-on { any; };
allow-query { 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16; };
};
DNS Caching เป็นกลไกสำคัญที่ช่วยเพิ่มประสิทธิภาพ เมื่อ DNS server resolve query ใดแล้ว จะเก็บผลลัพธ์ไว้ใน cache ตามค่า TTL (Time to Live) ที่กำหนดใน record ทำให้ query ครั้งต่อไปสำหรับโดเมนเดียวกันสามารถตอบได้ทันทีจาก cache โดยไม่ต้องออกไปถามข้างนอก
2.4 DNSSEC (DNS Security Extensions)
DNSSEC เป็นส่วนขยายด้านความปลอดภัยของ DNS ที่เพิ่มการลงนามดิจิทัล (digital signature) ให้กับ DNS records เพื่อป้องกันการปลอมแปลงข้อมูล (DNS spoofing/cache poisoning) โดยใช้ระบบ public-key cryptography
หลักการทำงานของ DNSSEC:
- Zone Signing Key (ZSK) — ใช้สร้าง RRSIG records สำหรับ sign ข้อมูลใน zone
- Key Signing Key (KSK) — ใช้ sign ZSK เพื่อสร้าง chain of trust
- DS Record — เก็บไว้ที่ parent zone เพื่อสร้างลิงก์ระหว่าง parent และ child zone
- NSEC/NSEC3 Record — ยืนยันว่าโดเมนที่ไม่มีอยู่จริงนั้น ไม่มีอยู่จริงๆ (authenticated denial of existence)
การเปิดใช้ DNSSEC ใน BIND สามารถทำได้ดังนี้:
# สร้าง ZSK
dnssec-keygen -a RSASHA256 -b 2048 company.local
# สร้าง KSK
dnssec-keygen -a RSASHA256 -b 4096 -f KSK company.local
# Sign zone
dnssec-signzone -A -3 $(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16) \
-N INCREMENT -o company.local -t db.company.local
ส่วนที่ 3: Split-Brain DNS (Split-Horizon DNS)
Split-Brain DNS หรือ Split-Horizon DNS เป็นเทคนิคที่ DNS server ตอบ query ด้วยข้อมูลที่แตกต่างกัน ขึ้นอยู่กับว่าผู้ถามอยู่ในเครือข่ายภายในหรือภายนอก
ตัวอย่างสถานการณ์: เว็บไซต์ company.com มี public IP เป็น 203.0.113.50 แต่ภายในองค์กรเว็บเซิร์ฟเวอร์อยู่ที่ 10.0.1.40 ด้วย Split-Brain DNS:
- ผู้ใช้จากภายนอก query www.company.com จะได้รับ 203.0.113.50
- ผู้ใช้ภายในองค์กร query www.company.com จะได้รับ 10.0.1.40
การตั้งค่าใน BIND ใช้ view:
acl "internal" {
10.0.0.0/8;
172.16.0.0/12;
192.168.0.0/16;
};
view "internal" {
match-clients { internal; };
zone "company.com" {
type master;
file "/etc/bind/zones/internal.company.com";
};
};
view "external" {
match-clients { any; };
zone "company.com" {
type master;
file "/etc/bind/zones/external.company.com";
};
};
ประโยชน์ของ Split-Brain DNS คือผู้ใช้ภายในเข้าถึงเซิร์ฟเวอร์ได้โดยตรงโดยไม่ต้องวนผ่าน firewall/NAT ทำให้เร็วขึ้นและลด bandwidth ที่ต้องผ่าน public link
ส่วนที่ 4: DHCP (Dynamic Host Configuration Protocol) คืออะไร?
DHCP คือโปรโตคอลที่ใช้แจกจ่าย IP address และค่าตั้งค่าเครือข่ายอื่นๆ ให้กับอุปกรณ์ในเครือข่ายโดยอัตโนมัติ แทนที่ admin จะต้องไปตั้งค่า IP ที่เครื่องทุกเครื่องด้วยมือ (static IP) DHCP ช่วยให้อุปกรณ์ได้รับ IP, subnet mask, default gateway, DNS server และค่าอื่นๆ ทันทีที่เชื่อมต่อเข้าเครือข่าย
DHCP ทำงานบน Port 67 (server) และ Port 68 (client) ใช้โปรโตคอล UDP
4.1 กระบวนการ DORA (DHCP DORA Process)
การขอรับ IP address จาก DHCP server ผ่านกระบวนการ 4 ขั้นตอนที่เรียกว่า DORA:
- D — Discover: เครื่อง client ส่ง broadcast message (DHCPDISCOVER) ออกไปในเครือข่าย เพื่อค้นหา DHCP server ข้อความนี้ส่งไปยัง broadcast address 255.255.255.255 เพราะ client ยังไม่มี IP address
- O — Offer: DHCP server ที่ได้รับ Discover message จะตอบกลับด้วย DHCPOFFER ซึ่งเสนอ IP address และค่าตั้งค่าต่างๆ ให้ client หากมี DHCP server หลายตัว client อาจได้รับ Offer หลายรายการ
- R — Request: Client เลือก Offer ที่ต้องการ (ปกติจะเลือก Offer แรกที่ได้รับ) แล้วส่ง DHCPREQUEST แบบ broadcast กลับไป เพื่อแจ้งว่าจะรับ IP จาก server ไหน server อื่นที่ถูกปฏิเสธจะถอน Offer ออก
- A — Acknowledge: DHCP server ส่ง DHCPACK กลับมาเพื่อยืนยันการให้เช่า IP address พร้อมข้อมูลเพิ่มเติมเช่น lease time, DNS server, gateway ฯลฯ Client จึงเริ่มใช้ IP address ที่ได้รับ
นอกจาก 4 ข้อความหลักแล้ว ยังมีข้อความอื่นๆ เช่น DHCPNAK (server ปฏิเสธ request), DHCPRELEASE (client คืน IP), และ DHCPINFORM (client ขอข้อมูลเพิ่มเติมโดยไม่ขอ IP)
4.2 DHCP Scopes, Reservations และ Options
DHCP Scope คือช่วง IP address ที่ DHCP server จะแจกให้ client โดย admin ต้องกำหนด:
- Scope Range — ช่วง IP เริ่มต้นและสิ้นสุด เช่น 10.0.1.100 ถึง 10.0.1.200
- Subnet Mask — เช่น 255.255.255.0
- Exclusion Range — IP ที่จะไม่แจก เช่น 10.0.1.150-10.0.1.160 (สำรองไว้สำหรับ printer)
- Lease Duration — ระยะเวลาที่ client ได้ใช้ IP เช่น 8 ชั่วโมง, 1 วัน, 7 วัน
DHCP Reservation คือการจอง IP address เฉพาะให้กับอุปกรณ์ที่ระบุด้วย MAC address ทำให้อุปกรณ์นั้นจะได้รับ IP เดิมทุกครั้งที่เชื่อมต่อ เหมาะสำหรับ printer, server, access point ที่ต้องการ IP คงที่แต่ยังคงจัดการผ่าน DHCP
DHCP Options คือข้อมูลเพิ่มเติมที่ DHCP server แจกให้ client พร้อม IP address:
- Option 3 — Default Gateway (Router)
- Option 6 — DNS Server
- Option 15 — DNS Domain Name
- Option 44 — WINS Server (NetBIOS Name Server)
- Option 66 — TFTP Server (สำหรับ PXE boot)
- Option 67 — Bootfile Name
- Option 150 — TFTP Server (Cisco-specific)
- Option 252 — WPAD (Web Proxy Auto-Discovery)
ส่วนที่ 5: การติดตั้ง DHCP Server
5.1 ติดตั้ง ISC DHCP Server บน Linux
ISC DHCP เป็น DHCP server ยอดนิยมบน Linux มีรุ่นใหม่คือ Kea DHCP Server ที่ออกแบบมาทดแทน แต่ ISC DHCP ยังคงใช้กันอย่างแพร่หลาย
# ติดตั้งบน Ubuntu/Debian
sudo apt install isc-dhcp-server -y
# กำหนด interface ที่จะ serve DHCP
sudo nano /etc/default/isc-dhcp-server
# INTERFACESv4="eth0"
ตัวอย่างไฟล์ /etc/dhcp/dhcpd.conf:
# Global settings
default-lease-time 28800; # 8 ชั่วโมง
max-lease-time 86400; # 1 วัน
authoritative;
# DNS settings
option domain-name "company.local";
option domain-name-servers 10.0.1.10, 10.0.1.11;
# Subnet declaration - VLAN 1 (Office)
subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.100 10.0.1.200;
option routers 10.0.1.1;
option broadcast-address 10.0.1.255;
option domain-name-servers 10.0.1.10, 10.0.1.11;
option ntp-servers 10.0.1.10;
}
# Subnet declaration - VLAN 10 (Guest WiFi)
subnet 10.0.10.0 netmask 255.255.255.0 {
range 10.0.10.50 10.0.10.250;
option routers 10.0.10.1;
default-lease-time 3600; # 1 ชั่วโมงสำหรับ guest
max-lease-time 7200;
}
# DHCP Reservations
host printer-hp {
hardware ethernet 00:1A:2B:3C:4D:5E;
fixed-address 10.0.1.150;
option host-name "printer-hp";
}
host ap-lobby {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address 10.0.1.160;
option host-name "ap-lobby";
}
# เริ่ม DHCP service
sudo systemctl enable isc-dhcp-server
sudo systemctl start isc-dhcp-server
sudo systemctl status isc-dhcp-server
# ดู lease ที่แจกไป
cat /var/lib/dhcp/dhcpd.leases
5.2 ติดตั้ง DHCP Server บน Windows Server
Windows Server มี DHCP Server role ที่ติดตั้งง่ายและจัดการผ่าน GUI ได้สะดวก:
- เปิด Server Manager → Add Roles and Features → เลือก DHCP Server
- หลังติดตั้ง ทำ Post-deployment Configuration เพื่อ authorize DHCP server ใน AD
- เปิด DHCP Manager → สร้าง New Scope
- กำหนดช่วง IP, subnet mask, exclusion, lease duration
- ตั้งค่า DHCP Options (Router, DNS, Domain Name)
- Activate scope
การจัดการผ่าน PowerShell:
# สร้าง DHCP Scope
Add-DhcpServerv4Scope -Name "Office LAN" -StartRange 10.0.1.100 -EndRange 10.0.1.200 `
-SubnetMask 255.255.255.0 -LeaseDuration 08:00:00 -State Active
# ตั้ง Scope Options
Set-DhcpServerv4OptionValue -ScopeId 10.0.1.0 -Router 10.0.1.1 `
-DnsServer 10.0.1.10,10.0.1.11 -DnsDomain "company.local"
# เพิ่ม Exclusion
Add-DhcpServerv4ExclusionRange -ScopeId 10.0.1.0 -StartRange 10.0.1.1 -EndRange 10.0.1.99
# สร้าง Reservation
Add-DhcpServerv4Reservation -ScopeId 10.0.1.0 -IPAddress 10.0.1.150 `
-ClientId "001A2B3C4D5E" -Name "Printer-HP" -Description "HP LaserJet Office"
# ดู Lease ทั้งหมด
Get-DhcpServerv4Lease -ScopeId 10.0.1.0
5.3 DHCP Relay Agent
DHCP ทำงานด้วย broadcast ซึ่งไม่สามารถข้าม router/VLAN ได้ ดังนั้นถ้ามีหลาย VLAN แต่มี DHCP server เพียงตัวเดียว จำเป็นต้องใช้ DHCP Relay Agent (เรียกอีกอย่างว่า IP Helper)
DHCP Relay ทำงานโดยรับ broadcast จาก client ใน subnet นั้น แล้ว forward เป็น unicast ไปยัง DHCP server ที่อยู่คนละ subnet จากนั้นส่ง reply กลับไปยัง client
การตั้งค่า DHCP Relay บน Cisco Router/Switch:
! ตั้งค่าบน interface ของแต่ละ VLAN
interface Vlan10
ip address 10.0.10.1 255.255.255.0
ip helper-address 10.0.1.10 ! ชี้ไปที่ DHCP server
interface Vlan20
ip address 10.0.20.1 255.255.255.0
ip helper-address 10.0.1.10
บน Linux สามารถใช้ dhcp-relay:
sudo apt install isc-dhcp-relay -y
# ตั้งค่า relay server: 10.0.1.10
# ตั้งค่า interfaces: eth0 eth1
5.4 DHCP Failover (การทำ High Availability สำหรับ DHCP)
ในองค์กรขนาดใหญ่ DHCP server ตัวเดียวอาจเป็นจุดล้มเหลว (Single Point of Failure) จึงควรทำ DHCP Failover เพื่อให้มี DHCP server สำรอง
Windows DHCP Failover รองรับ 2 โหมด:
- Load Balance — ทั้ง 2 server แจก IP พร้อมกัน โดยแบ่งกันตาม ratio (ค่าเริ่มต้น 50:50)
- Hot Standby — server หลักแจก IP ตามปกติ server สำรองจะเข้ามาทำงานเมื่อ server หลักล่ม
# สร้าง DHCP Failover Relationship (PowerShell)
Add-DhcpServerv4Failover -Name "DHCP-Failover" -PartnerServer "dhcp2.company.local" `
-ScopeId 10.0.1.0 -LoadBalancePercent 50 -SharedSecret "SecureP@ss!" `
-AutoStateTransition $true -MaxClientLeadTime 01:00:00
สำหรับ ISC DHCP บน Linux สามารถใช้ failover peer ได้เช่นกัน โดยเพิ่มการตั้งค่า failover ใน dhcpd.conf ของทั้ง primary และ secondary server
ส่วนที่ 6: การรวม DNS กับ DHCP (Dynamic DNS / DDNS)
Dynamic DNS (DDNS) คือกลไกที่ทำให้ DHCP server อัปเดต DNS records โดยอัตโนมัติทุกครั้งที่แจก IP address ใหม่ให้ client ซึ่งหมายความว่าเมื่อเครื่อง workstation-01 ได้รับ IP 10.0.1.105 จาก DHCP, DNS record สำหรับ workstation-01.company.local จะถูกสร้างหรืออัปเดตให้ชี้ไปที่ 10.0.1.105 โดยอัตโนมัติ
การตั้งค่า DDNS ใน ISC DHCP + BIND:
1. สร้าง TSIG key สำหรับ authentication:
tsig-keygen -a hmac-sha256 dhcp-dns-key > /etc/bind/dhcp-dns-key.conf
2. ตั้งค่า BIND ให้รับ dynamic updates:
// named.conf.local
include "/etc/bind/dhcp-dns-key.conf";
zone "company.local" {
type master;
file "/etc/bind/zones/db.company.local";
allow-update { key dhcp-dns-key; };
};
zone "1.0.10.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.10.0.1";
allow-update { key dhcp-dns-key; };
};
3. ตั้งค่า ISC DHCP ให้อัปเดต DNS:
# dhcpd.conf
ddns-updates on;
ddns-update-style interim;
ddns-domainname "company.local.";
ddns-rev-domainname "in-addr.arpa.";
include "/etc/bind/dhcp-dns-key.conf";
zone company.local. {
primary 10.0.1.10;
key dhcp-dns-key;
}
zone 1.0.10.in-addr.arpa. {
primary 10.0.1.10;
key dhcp-dns-key;
}
บน Windows Server DDNS ทำงานได้ทันทีเมื่อใช้ Active Directory-Integrated DNS zone ร่วมกับ DHCP Server ที่ authorized ใน AD โดยไม่ต้องตั้งค่าเพิ่มเติมมาก เพียงเปิด option “Always dynamically update DNS records” ใน DHCP scope properties
ส่วนที่ 7: Pi-hole — DNS-based Ad Blocking
Pi-hole เป็น DNS sinkhole ที่ทำหน้าที่กรอง DNS query โดยบล็อกโดเมนที่อยู่ในรายการโฆษณา มัลแวร์ และ tracking ก่อนที่จะถึงอุปกรณ์ของผู้ใช้ ติดตั้งได้ง่ายบน Raspberry Pi หรือ Linux Server ทั่วไป
ข้อดีของ Pi-hole:
- บล็อกโฆษณาระดับเครือข่าย — ทุกอุปกรณ์ในเครือข่ายได้รับประโยชน์ ไม่ต้องติดตั้ง ad blocker ทีละเครื่อง
- ลด bandwidth — ไม่ต้องโหลดโฆษณาและ tracking scripts
- เพิ่มความเป็นส่วนตัว — บล็อก tracking domains ของ Facebook, Google Analytics ฯลฯ
- มี dashboard สวยงาม — แสดงสถิติการ block แบบ real-time
- ทำหน้าที่เป็น DNS cache ด้วย — เพิ่มความเร็วในการ resolve
การติดตั้ง Pi-hole:
# ติดตั้งด้วย one-line command
curl -sSL https://install.pi-hole.net | bash
# หรือ clone และติดตั้งด้วยตนเอง
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd Pi-hole/automated install/
sudo bash basic-install.sh
# เปลี่ยนรหัสผ่าน admin
pihole -a -p
# อัปเดต blocklists
pihole -g
หลังติดตั้ง สามารถตั้งค่า DHCP server หรือ router ให้ชี้ DNS ไปที่ Pi-hole แทน ทำให้ทุกอุปกรณ์ในเครือข่ายถูกกรองโฆษณาอัตโนมัติ
ส่วนที่ 8: การแก้ไขปัญหา DNS และ DHCP (Troubleshooting)
8.1 เครื่องมือ Troubleshoot DNS
nslookup — เครื่องมือพื้นฐานที่มีทั้งบน Windows และ Linux:
# Query A record
nslookup www.siamlancard.com
# ระบุ DNS server ที่จะถาม
nslookup www.siamlancard.com 8.8.8.8
# Query record type เฉพาะ
nslookup -type=MX siamlancard.com
nslookup -type=TXT siamlancard.com
nslookup -type=NS siamlancard.com
# Reverse lookup
nslookup 122.155.168.7
dig — เครื่องมือขั้นสูงบน Linux ให้ข้อมูลละเอียดกว่า nslookup:
# Query ปกติ
dig www.siamlancard.com
# แสดงเฉพาะคำตอบ
dig +short www.siamlancard.com
# Trace ทั้ง resolution path
dig +trace www.siamlancard.com
# Query specific record type
dig MX siamlancard.com
dig TXT siamlancard.com @8.8.8.8
# Reverse lookup
dig -x 122.155.168.7
# ตรวจ DNSSEC
dig +dnssec siamlancard.com
# ทดสอบ zone transfer
dig axfr company.local @ns1.company.local
คำสั่ง ipconfig/flushdns บน Windows:
# ดู DNS cache
ipconfig /displaydns
# ล้าง DNS cache
ipconfig /flushdns
# ดูค่า DNS ที่ตั้งไว้
ipconfig /all
# Reset DNS registration
ipconfig /registerdns
8.2 ปัญหาที่พบบ่อยและวิธีแก้ไข
| ปัญหา | สาเหตุที่เป็นไปได้ | วิธีแก้ไข |
|---|---|---|
| Resolve ไม่ได้ทุกโดเมน | DNS server ไม่ตอบ / ตั้ง DNS ผิด | ตรวจ DNS settings, ลองเปลี่ยนเป็น 8.8.8.8 ทดสอบ |
| Resolve บางโดเมนไม่ได้ | DNS cache เก่า / record ยังไม่ propagate | ipconfig /flushdns แล้วลองใหม่ / รอ TTL หมดอายุ |
| ได้ IP ผิด | DNS cache poisoning / hosts file ถูกแก้ | ตรวจ hosts file, ใช้ DNSSEC, ล้าง cache |
| DHCP ไม่แจก IP | DHCP service ไม่ทำงาน / scope เต็ม | ตรวจ service status, ดู scope utilization |
| ได้ IP 169.254.x.x (APIPA) | ไม่มี DHCP server ตอบ | ตรวจ DHCP server, ตรวจ network connectivity |
| IP ชนกัน (IP conflict) | มี static IP ซ้ำกับ DHCP range | ตั้ง exclusion range, ใช้ reservation แทน static |
| DHCP ไม่ทำงานข้าม VLAN | ไม่มี DHCP relay/ip helper | ตั้งค่า ip helper-address บน router/L3 switch |
8.3 Best Practices สำหรับ DNS และ DHCP ในองค์กร
- DNS ควรมีอย่างน้อย 2 ตัว — Primary และ Secondary เพื่อ redundancy หากตัวหนึ่งล่ม อีกตัวยังทำงานได้
- ใช้ DHCP Reservation แทน Static IP — สำหรับอุปกรณ์ที่ต้องการ IP คงที่ เพราะจัดการจากศูนย์กลางได้
- กำหนด Lease Time ให้เหมาะสม — เครือข่ายที่มีอุปกรณ์เข้า-ออกบ่อย (เช่น WiFi สาธารณะ) ควรใช้ lease สั้น (1-4 ชั่วโมง) เครือข่ายออฟฟิศที่เครื่องอยู่ประจำ ใช้ lease ยาว (8-24 ชั่วโมง)
- เปิด DNSSEC — เพื่อป้องกัน DNS spoofing โดยเฉพาะสำหรับ public-facing domains
- Monitor DNS query logs — ตรวจจับ malware ที่ใช้ DNS tunneling หรือ query ไปยังโดเมนอันตราย
- ใช้ Network Monitoring ติดตาม DHCP scope utilization — เพื่อเพิ่ม IP range ก่อนที่จะหมด
- Backup zone files และ DHCP database — เป็นส่วนหนึ่งของ backup plan ขององค์กร
- ตั้ง DNS forwarder ภายนอกอย่างน้อย 2 ตัว — เช่น 8.8.8.8 + 1.1.1.1 เพื่อ redundancy
- แยก DNS zone สำหรับ internal และ external — ใช้ Split-Brain DNS เพื่อความปลอดภัยและประสิทธิภาพ
- ทำ DHCP Failover — โดยเฉพาะในองค์กรที่มีอุปกรณ์หลายร้อยตัวขึ้นไป
ส่วนที่ 9: เทคนิคขั้นสูง
9.1 DNS over HTTPS (DoH) และ DNS over TLS (DoT)
DNS แบบดั้งเดิมส่งข้อมูลเป็น plaintext ทำให้ ISP หรือผู้ที่ดักจับ traffic สามารถเห็นได้ว่าผู้ใช้กำลังเข้าเว็บอะไร เทคโนโลยีใหม่จึงเข้ารหัส DNS query:
- DNS over HTTPS (DoH) — ส่ง DNS query ผ่าน HTTPS (Port 443) เข้ารหัสเหมือนเว็บทั่วไป ยากต่อการ block หรือดักจับ รองรับใน Firefox, Chrome, Edge, Windows 11
- DNS over TLS (DoT) — ส่ง DNS query ผ่าน TLS (Port 853) เข้ารหัสแต่ใช้ port เฉพาะ จึงง่ายต่อการจัดการที่ Firewall
สำหรับองค์กร ควรพิจารณาว่าจะอนุญาตให้ใช้ DoH/DoT หรือไม่ เพราะอาจ bypass DNS filtering ที่ตั้งไว้ วิธีจัดการคือ block DoH/DoT ที่ firewall แล้วบังคับให้ใช้ DNS server ขององค์กร หรือตั้ง DNS server ขององค์กรให้รองรับ DoH/DoT เอง
9.2 DNS Load Balancing
DNS สามารถใช้เป็นเครื่องมือ load balancing อย่างง่ายได้ โดยการสร้าง A record หลายตัวสำหรับชื่อเดียวกัน (DNS Round Robin):
www IN A 10.0.1.40
www IN A 10.0.1.41
www IN A 10.0.1.42
DNS server จะสลับลำดับ IP ที่ตอบกลับในแต่ละ query ทำให้ traffic กระจายไปยัง server หลายตัว อย่างไรก็ตาม DNS Round Robin ไม่มี health checking ดังนั้นหาก server ตัวหนึ่งล่ม DNS จะยังคงส่ง traffic ไป จึงเหมาะสำหรับการ load balance อย่างง่ายเท่านั้น สำหรับงานจริงควรใช้ load balancer เฉพาะทาง
9.3 การรักษาความปลอดภัย DNS Server
DNS server เป็นเป้าหมายที่ถูกโจมตีบ่อย จึงควรดำเนินมาตรการรักษาความปลอดภัยดังนี้:
- จำกัด zone transfer — อนุญาตเฉพาะ secondary DNS servers ที่ระบุ
- จำกัด recursion — อนุญาต recursive query เฉพาะ IP ในเครือข่าย ป้องกัน DNS amplification attack
- ใช้ Response Rate Limiting (RRL) — จำกัดจำนวน response ต่อวินาทีเพื่อป้องกัน DDoS
- เปิด DNSSEC — ป้องกัน cache poisoning
- อัปเดต BIND/DNS server — ให้เป็นเวอร์ชันล่าสุดเสมอ
- ใช้ TSIG key — สำหรับ authentication ระหว่าง DNS servers
- Monitor DNS logs — ตรวจจับ anomaly เช่น DNS tunneling, unusual query volume
# ตัวอย่าง BIND security settings
options {
allow-recursion { 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16; localhost; };
allow-transfer { none; }; // ปิด zone transfer ทั้งหมด (override ใน zone)
version "not disclosed"; // ซ่อนเวอร์ชัน
rate-limit {
responses-per-second 10;
window 5;
};
};
สรุป
DNS และ DHCP เป็นบริการพื้นฐานที่สำคัญอย่างยิ่งในทุกระบบเครือข่ายองค์กร DNS ทำหน้าที่แปลงชื่อโดเมนเป็น IP address ช่วยให้ผู้ใช้เข้าถึงบริการต่างๆ ได้ง่าย ในขณะที่ DHCP ช่วยแจก IP address และค่าตั้งค่าเครือข่ายโดยอัตโนมัติ ลดภาระงานของ admin ลงอย่างมาก
การเข้าใจหลักการทำงาน สถาปัตยกรรม และวิธีการตั้งค่าทั้งสองระบบนี้ ไม่ว่าจะเป็นบน Linux (BIND + ISC DHCP) หรือ Windows Server จะช่วยให้คุณสามารถออกแบบ ติดตั้ง และจัดการระบบเครือข่ายได้อย่างมืออาชีพ นอกจากนี้ การรวม DNS กับ DHCP ผ่าน Dynamic DNS จะทำให้ระบบทำงานร่วมกันได้อย่างราบรื่น และเทคนิคขั้นสูงเช่น Split-Brain DNS, DNSSEC, Pi-hole จะช่วยเพิ่มทั้งประสิทธิภาพและความปลอดภัยให้กับระบบเครือข่ายขององค์กรคุณ
สำหรับผู้ที่สนใจ certification สาขา networking ความรู้เรื่อง DNS และ DHCP เป็นหัวข้อที่ออกข้อสอบ CCNA, CompTIA Network+ และ CompTIA Security+ เป็นประจำ การเข้าใจหัวข้อนี้จึงเป็นพื้นฐานที่จำเป็นอย่างแท้จริง