หลังจาก ติดตั้งและคอนฟิกเซิร์ฟเวอร์ BIND DNS บน CentOS 7 – ตอนที่ 1 Caching Only เสร็จเรียบร้อย
ในตอนนี้ลองมาดูวิธีการเพิ่มข้อมูลโดเมนใหม่ (zone) เพื่อแปลงข้อมูล เช่น ชื่อ hostname เป็น IP Address ไว้สำหรับใช้งานภายในองค์กรเอง หรือถ้าเราจดทะเบียนเป็นเจ้าของชื่อโดเมนบนอินเทอร์เน็ตแล้ว ต้องการคอนฟิกติดตั้งเซิร์ฟเวอร์ DNS เพื่อเก็บข้อมูลโดเมนบนเซิร์ฟเวอร์ของเราเอง
ตัวอย่างในบทความนี้ จะคอนฟิกโซนโดเมนชื่อ example.com ซึ่งเป็นชื่อโดเมนที่สงวนไว้ใช้ในการทำเอกสาร และเป็นตัวอย่างการใช้งานชื่อโดเมน
การคอนฟิกหรือการเพิ่มข้อมูลโดเมนใหม่ในเซิร์ฟเวอร์ DNS นี้ เราจะเรียกกันว่าเป็นการคอนฟิกโซน (zone) ใหม่ หากใช้ BIND จะต้องแก้ไขคอนฟิกอยู่สองส่วนคือแก้ไขไฟล์ /etc/named.conf และเพิ่มไฟล์เก็บข้อมูลโซนของโดเมนนั้นๆ
เพิ่มคอนฟิกโซนโดเมนใหม่ใน named.conf
เริ่มต้นต้องแก้ไขไฟล์คอนฟิก named.conf เพื่อเพิ่มคอนฟิกโซนของโดเมน example.com ระบุ type เป็น master แล้วระบุชื่อ file ที่จะเก็บข้อมูลของโซนของโดเมน example.com นี้ ชื่อไฟล์ที่นิยมใช้กัน คือชื่อโดเมนต่อท้ายด้วย .zone
ตัวอย่างการแก้ไขไฟล์ /etc/named.cof เพื่อเพิ่มโซน example.com
[root@cent7 ~]# vi /etc/named.conf ... options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; allow-query-cache { localhost; 192.168.1.0/24; }; ... }; ... zone "." IN { type hint; file "named.ca"; }; zone "example.com" IN { type master; file "example.com.zone"; allow-update { none; }; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
ถ้าเปรียบเทียบกับไฟล์คอนฟิกใน ติดตั้งและคอนฟิกเซิร์ฟเวอร์ BIND DNS บน CentOS 7 – ตอนที่ 1 Caching Only ก็แค่เปลี่ยนคอนฟิก allow-query ให้เป็น any เพื่ออนุญาตให้เครื่องอื่นๆ สามารถเข้ามาถามชื่อโซนโดเมนที่เราเป็นเจ้าของได้ และเพิ่มคอนฟิก zone สำหรับโดเมน
สร้างไฟล์โซนเพื่อเก็บข้อมูลโดเมน
ขั้นต่อไป ต้องสร้างไฟล์โซนที่เก็บข้อมูลโดเมน ที่อยู่ของไฟล์โซนนี้จะอยู่ในไดเรกทอรี ที่ระบุในคอนฟิก directory ภายใต้ options ในไฟล์ /etc/named.conf โดยทั่วไปจะเป็น /var/named/
เพราะฉะนั้นต้องสร้างไฟล์โซน /var/named/example.com.zone ขึ้นมา โดยมีรูปแบบดังนี้
[root@cent7 ~]# vi /var/named/example.com.zone $ORIGIN example.com. $TTL 86400 @ IN SOA ns1.example.com. hostmaster.example.com. ( 2015081201 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day IN NS ns1.example.com. ns1 IN A 192.168.1.1 www IN A 192.168.1.3
หากลองไปค้นหาตัวอย่างคอนฟิกไฟล์โซนดู จะเห็นว่ามีการคอนฟิกอยู่หลายแบบ แต่ส่วนตัวผู้เขียน นิยมใช้โครงสร้างไฟล์เป็นแบบนี้
หากต้องการคอนฟิกสำหรับโดเมนชื่ออื่นๆ ให้แทนที่คำว่า example.com เป็นชื่อโดเมนนั้นๆ
สังเกตว่าการใส่เครื่องหมายจุด . และไม่ใส่หลังชื่อ หากไม่มีจุดต่อท้าย จะมีการเติมชื่อโดเมนดีฟอลต์จากค่า $ORIGIN เช่นในที่นี้คือ example.com. ส่วน IP Address ไม่ต้องใส่จุดตามหลัง
ด้านบนเป็นคอนฟิก SOA ระบุข้อมูลโดเมน ขออธิบายเฉพาะ serial ทุกครั้งที่มีการแก้ไขไฟล์โซนนี้ ให้แก้ตัวเลขในบรรทัด serial ในรูปแบบ [ปี คศ][เดือน][วันที่][ลำดับการแก้ไขประจำวัน] เช่น 2015081201 ตัวเลข serial นี้มีการใช้กันหลายรูปแบบมาก แต่ที่นิยมกันเป็นรูปแบบ ปี เดือน วันที่ แบบนี้ โดยหลักการคือให้มีการเพิ่มตัวเลขนี้ทุกครั้งเมื่อมีการแก้ไขข้อมูลในไฟล์โซน เพื่อให้ Slave DNS server ซึ่งเป็นเซิร์ฟเวอร์ DNS อีกตัว สามารถมาตรวจสอบเวอร์ชั่นของข้อมูลเก่าใหม่ เผื่อจะได้ปรับปรุง (transfer) ข้อมูลได้ ให้เหมือนกับตัว Master ได้
ด้านล่างจะประกอบด้วยสามคอลัมน์หลักๆ คือ ชื่อ ประเภทแปลง ค่า
IN NS ns1.example.com.
- NS คือการแปลงค่าให้เป็นชื่อ DNS ที่เก็บข้อมูลโดเมนนั้น สังเกตว่าด้านหน้าจะไม่มีค่าอะไร นั่นหมายถึงให้ใช้ค่าตัวแปร $ORIGIN หรือค่าที่ระบุ zone “example.com” ในไฟล์ /etc/named.conf
ความหมายคือ ข้อมูล NS หรือ DNS Server ที่เก็บข้อมูลของ example.com อยู่ที่ ns1.example.com. สังเกตว่าจะมีเครื่องหมายจุดต่อท้ายด้วย
ns1 IN A 192.168.1.1
- A คือการแปลงชื่อเป็น IP Address
สังเกตว่าไม่มีเครื่องหมายจุดตามหลัง ns1 ดังนั้นจะมีการเติมชื่อโดเมน ($ORIGIN) ต่อท้ายเป็น ns1.example.com
ความหมายคือ ns1.example.com แปลงเป็น IP ได้เป็น 192.168.1.1
รีสตาร์ตเซอร์วิส named หลังการแก้ไขไฟล์คอนฟิก
[root@cent7 ~]# systemctl restart named
ลองใช้คำสั่ง dig เพื่อทดสอบถามชื่อของโซนโดเมนใหม่
[alice@cent7 ~]$ dig @127.0.0.1 www.example.com ; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7_1.3 <<>> @127.0.0.1 www.example.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14582 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 86400 IN A 192.168.1.3 ;; AUTHORITY SECTION: example.com. 86400 IN NS ns1.example.com. ;; ADDITIONAL SECTION: ns1.example.com. 86400 IN A 192.168.1.1 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Aug 12 19:57:33 ICT 2015 ;; MSG SIZE rcvd: 94
ถ้าคอนฟิกถูกต้อง จะได้คำตอบภายใต้บรรทัด ANSWER SECTION
สังเกตบรรทัดที่มีคำว่า flags จะมี aa หมายความว่า ข้อมูลที่ได้นี้มาจากเซิร์ฟเวอร์ DNS ที่เก็บข้อมูลโดเมนนี้โดยตรง (Authoritative Answer)