คำตอบสั้น ๆ: ตั้ง DNS Server ภายในองค์กร สร้าง Forward และ Reverse Zone เพิ่มระเบียน ตั้ง Forwarder ออกอินเทอร์เน็ต และตรวจสอบการทำงาน
คู่มือนี้อธิบาย DNS Server ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
DNS คือบริการที่เงียบที่สุดแต่พังแล้วกระทบทุกอย่าง ในเครือข่ายองค์กรที่ใช้ Active Directory DNS ไม่ได้ทำแค่แปลงชื่อเป็น IP แต่ยังเป็นสิ่งที่เครื่องลูกใช้ค้นหา Domain Controller ด้วย
คู่มือนี้ตั้ง DNS Server สำหรับใช้ภายในองค์กร ทั้งกรณีที่ติดตั้งมาพร้อม Active Directory และกรณีที่ตั้งเป็นเครื่องแยกต่างหาก
สิ่งที่ต้องเตรียม
- Windows Server 2019 ขึ้นไป พร้อม IP แบบคงที่
- สิทธิ์ Administrator
- แผนผังชื่อและ IP ที่จะใช้ในองค์กร
ขั้นตอนที่ 1: ติดตั้ง Role
Install-WindowsFeature -Name DNS -IncludeManagementTools
Get-Service DNS
Get-DnsServer | Select-Object -ExpandProperty ServerSetting
หากติดตั้ง Active Directory ไปแล้วพร้อมตัวเลือก -InstallDns:$true DNS จะถูกติดตั้งให้อัตโนมัติ ข้ามขั้นตอนนี้ได้
ขั้นตอนที่ 2: สร้าง Forward Lookup Zone
Zone คือขอบเขตของชื่อที่เซิร์ฟเวอร์นี้รับผิดชอบ
# กรณีมี Active Directory ให้เก็บ Zone ไว้ใน AD เพื่อให้จำลองข้อมูลอัตโนมัติ
Add-DnsServerPrimaryZone -Name "corp.example.com" `
-ReplicationScope "Domain" -DynamicUpdate "Secure"
# กรณีไม่มี AD ให้เก็บเป็นไฟล์
Add-DnsServerPrimaryZone -Name "corp.example.com" `
-ZoneFile "corp.example.com.dns" -DynamicUpdate "None"
Get-DnsServerZone
ตัวเลือก -DynamicUpdate "Secure" อนุญาตให้เฉพาะเครื่องที่อยู่ในโดเมนลงทะเบียนชื่อตัวเองได้ ซึ่งเป็นค่าที่ควรใช้ อย่าตั้งเป็น NonsecureAndSecure เพราะใครก็ได้จะเขียนระเบียนทับได้
ขั้นตอนที่ 3: สร้าง Reverse Lookup Zone
ใช้แปลง IP กลับเป็นชื่อ จำเป็นสำหรับการวิเคราะห์ Log และบางบริการที่ตรวจสอบย้อนกลับ
Add-DnsServerPrimaryZone -NetworkId "10.0.0.0/24" -ReplicationScope "Domain"
Get-DnsServerZone | Where-Object { $_.IsReverseLookupZone }
ขั้นตอนที่ 4: เพิ่มระเบียน
# A Record พร้อมสร้าง PTR ให้อัตโนมัติ
Add-DnsServerResourceRecordA -Name "web1" -ZoneName "corp.example.com" `
-IPv4Address "10.0.0.11" -CreatePtr
Add-DnsServerResourceRecordA -Name "db1" -ZoneName "corp.example.com" `
-IPv4Address "10.0.0.21" -CreatePtr
# CNAME ชี้ชื่อเล่นไปยังชื่อจริง
Add-DnsServerResourceRecordCName -Name "intranet" `
-HostNameAlias "web1.corp.example.com" -ZoneName "corp.example.com"
# MX สำหรับอีเมล
Add-DnsServerResourceRecordMX -Name "." -ZoneName "corp.example.com" `
-MailExchange "mail.corp.example.com" -Preference 10
# TXT เช่น SPF
Add-DnsServerResourceRecord -Txt -Name "@" -ZoneName "corp.example.com" `
-DescriptiveText "v=spf1 include:_spf.example.com -all"
Get-DnsServerResourceRecord -ZoneName "corp.example.com"
ขั้นตอนที่ 5: ตั้ง Forwarder ให้ค้นหาชื่อภายนอกได้
เมื่อเครื่องลูกถามชื่อที่ไม่ได้อยู่ใน Zone ของเรา เช่น google.com เซิร์ฟเวอร์ต้องส่งต่อคำถามออกไป
Set-DnsServerForwarder -IPAddress "1.1.1.1", "8.8.8.8" -UseRootHint $false
Get-DnsServerForwarder
การตั้ง -UseRootHint $false บังคับให้ใช้ Forwarder ที่กำหนดเท่านั้น ทำให้ควบคุมเส้นทางการค้นหาได้ และมักเร็วกว่าการไล่ถามจาก Root Server เอง
หากต้องการส่งต่อเฉพาะบางโดเมนไปยังเซิร์ฟเวอร์เฉพาะ ใช้ Conditional Forwarder
Add-DnsServerConditionalForwarderZone -Name "partner.co.th" `
-MasterServers "192.168.50.10" -ReplicationScope "Domain"