คอนฟิกเซิร์ฟเวอร์ BIND DNS บน CentOS 7 – ตอนที่ 2 เพิ่มโซนโดเมน

หลังจาก ติดตั้งและคอนฟิกเซิร์ฟเวอร์ 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)

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.