Howto Subject: การทำ Domain Name เบื้องต้น By: Pruet Boonma Date: Apr 7, 1998 Update from: - License: สงวนลิขสิทธิ์เอกสารนี้ โดย พฤษภ์ บุญมา การเผยแพร่เอกสารนี้จะต้องอยู่ภายไต้ เงื่อนไขของ GNU General Public License เวอร์ชั่น 2.0 ที่ออกโดย Free Sofware Foundation กรุฒาอ่านรายละเอียดของ GPL ที่ Introduction: ในระบบ Internet นั้นจะมีการกำหนดตำแหน่งของเครื่องอยู่สองแบบคือ การใช้ IP address และการใช้ domain name ซึ่ง domain name นี้นอกจากจะทำให้จำชื่อเครื่องได้ง่ายแล้ว ยังช่วยบอกว่าเครื่องนั้นน่าจะมีข้อมูลเกี่ยวกับอะไรเก็บไว้ เช่น www.cnn.com ก็น่าจะเป็นเครื่องที่เก็บ Web Page ของ สำนักข่าว CNN หรือว่า www.cmu.ac.th ก็น่าจะเป็นเครื่องที่เก็บ Web Page ของ มหาวิทยาลัยเชียงใหม่ ซึ่งตั้งอยู่ในประเทศไทยเป็นต้น ซึ่งเครื่องที่ใช้เก็บข้อมูลเกี่ยวกับ domain name ก็จะเรียกว่า domain name server (DNS) ซึ่ง DNS จะทำงานสองอย่าง คือ เป็นผู้เก็บข้อมูลของ domain name หนึ่ง ๆ โดยจะเก็บไว้ใน domain name database file และ งานอย่างที่สองคือ การให้บริการแก่เครื่องผู้ใช้ทั่วไปในการแปลง domain name เป็น IP Address โดย เมื่อได้รับ request นี้มา DNS จะทำการตรวจสอบว่า domain name database ที่มีอยู่ มี information เกี่ยวกับชื่อที่ขอมาหรือไม่ ถ้าไม่มี ก็จะถาม DNS ตัวอื่น ตามที่กำหนดไว้ต่อไปให้ ซึ่งลักษณะการเก็บแบบนี้จะเรียกว่า Hierachical Domain Name System โดยทั่วไปเราจะแบ่งชนิดของ DNS ได้ 4 แบบ คือ 1. Caching only DNS ถือว่าเป็น DNS แบบพื้นฐานที่สุด กล่าวคือ จะไม่มี Domain Name Database เก็บไว้ในตัวเอง จึงไม่สามารถให้บริการได้โดยตรง แต่เมื่อมี Request เข้ามา มันจะไปถาม DNS ตัวที่อยู่สูงขึ้นไป แล้วเมื่อได้รับคำตอบแล้ว ก็จะ ตอบกับไปยังเครื่องที่ขอมา และจะเก็บไว้ใน cache ของตัวมันเอง เพื่อให้บริการแก้ผู้ที่มาขอข้อมูลเดียวกัน โดยไม่ต้องไปถาม DNS ตัวที่อยู่สูงขึ้นไปอีก เนื่องจากว่าตัว Cache นี้ถูกจัดเก็บไว้ใน Memory ดังนั้น เมื่อทำการปิดเปิดเครื่องใหม่ ข้อมูลใน Cache ก็จะหายไปด้วย ทำให้ต้องเริ่มเก็บข้อมูลใหม่ 2. Primary DNS เป็น DNS ที่จะเก็บข้อมูลของ domain name หนึ่ง ๆ ไว้ เพื่อที่จะให้บริการแก่ DNS ตัวอื่น ในการร้องขอข้อมูลเกี่ยวกับ domain name นั้น โดย DNS จะมีระบบในการชี้แบบ Hierachy หรือว่าแบบ tree เช่น ถายใต้ .th ก็จะมี co.th ac.th or.th และภายใต้ ac.th ก็จะมี cmu.ac.th ku.ac.th เป็นต้น 3. Secondary DNS เป็น DNS ที่จะอ่านข้อมูลมาจาก Primary DNS มาเก็บไว้ เพื่อเป็นเครื่องสำรองในกรณีที่ Primary DNS ไม่สามารถทำงานตามปกติได้ โดยปกติ การจดทะเบียน domain name นั้น จะต้องมี Primary DNS หนึ่งตัว และ Secondary DNS อย่างน้อยหนึ่งตัว 4. Forwarder DNS เป็น DNS ที่คอย forward คำร้องขอ ไปยัง DNS ตัวอื่น มักจะใช้ในระบบที่มี Firewall หรือว่า Private Network ในการตั้ง DNS นั้น ก็ต้องพิจารณาตามความต้องการ ถ้าความต้องการที่มีอยู่ ต้องการเพียงการแปลง domain name ไปเป็น IP Address ก็ไม่มีความจำเป็นต้องตั้ง DNS ขึ้นมา เพียงแต่ set เครื่องให้ชี้ ไปยัง DNS ตัวที่อยู๋ใกล้ที่สุด แต่ถ้าต้องการมี domain name ของตัวเอง ก็ต้องมีการตั้ง Primary DNS ขึ้นมา และหา Secondary DNS ซึ่ง ก็มักจะเป็น DNS ตัวที่อยู๋ใกล้ ๆ หรือว่า DNS ตัวที่อยู่สูงขึ้นไปเป็นต้น Prerequirement: Linux ทุกเครื่องที่ลงอย่างถูกต้องจะ มี DNS daemon มาให้อยู่แล้ว โดยจะเป็น file ชื่อว่า /usr/sbin/named และจำเป็นต้องมี Domain Name Database file ซึ่งสามารถเขียนขึ้นมาเอง เนื่องจากว่าเป็น text file ธรรมดา หรือว่าสามารถ download template file ได้จาก การทำให้ Linux สามารถใช้ DNS ได้ ในหัวข้อแรกจะกล่าวถึงการทำให้ Linux server สามารถใช้ DNS ที่มีอยู่ได้ก่อน โดยไม่จำเป็นว่า DNS จะอยู่ในเครื่องนั้นหรือไม่ หรือกล่าวในอีกนัยหนึ่ง ไม่ว่าเครื่องนั้นจะเป็น DNS หรือไม่ ก็ต้อง set ให้ Linux server เครื่องนั้นเห็น DNS ซึ่งสามารถทำได้โดยการแก้ไข file /etc/resolv.conf ดังตัวอย่าง # cat /etc/resolv.conf domain mptc.eng.cmu.ac.th nameserver 202.44.248.68 nameserver 202.44.145.20 # โดย domain จะหมายถึง domain name ของเครื่องนี้ และ nameserver จะหมายถึง DNS ที่ เครื่องนี้จะไปถาม เรียงตามลำดับ จากตัวอย่าง เครื่องจะไปถาม เครื่องที่มี 202.44.248.68 และถ้าไม่ได้คำตอบ ก็จะไปถาม 202.44.145.20 เป็นต้น ซึ่ง domain name ที่ file นี้จะต้อง set ให้ตรงกับ ที่ set ชื่อเครื่องไว้ด้วย การตั้ง DNS ใน Linux server ดังที่ได้กล่าวไปแล้ว ไม่จำเป็นว่าทุกเครื่องจะต้อง run DNS daemon เฉพาะเครื่องที่เป็น DNS เท่านั้น จะ run DNS daemon ซึ่งการ run DNS daemon นั้น จะต้องทำการแก้ไข file config ชื่อว่า /etc/named.boot ซึ่งจะเป็น file ที่กำหนดรายละเอียดการทำงานของ DNS daemon ในเครื่องนั้น โดย file /etc/named.boot จะมี โครงสร้างดังนี้คือ directory /etc/domain ;cache initialize file cache . root.cache ;domain name -> IP database file primary intanon.nectec.or.th named.hosts ;IP -> domain name database file primary 145.44.202.IN-ADDR.ARPA named.rev ;localhost database file primary 0.0.127.IN-ADDR.ARPA named.local ;secondary database file secondary eng.cmu.ac.th 202.44.246.70 db.eng จากตัวอย่าง บอกให้รู้ว่าเครื่องนี้ เป็น Primary DNS ของ domain intanon.nectec.or.th โดยมี file ชื่อว่า named.hosts คอยเก็บรายละเอียดต่าง ๆ ของ domain นี้ และมี file named.rev ที่คอยเก็บข้อมูลของการแปลง IP เป็นชื่อ ส่วน named.local เก็บรายละเอียดเกี่ยวกับ local host ส่วน secondary บอกว่าเครื่องนี้ เป็น secondary DNS ของ domain name eng.cmu.ac.th โดย db.eng จะเป็น file ที่สร้างขึ้นมาโดยอัตโนมัติ โดยจะอ่านข้อมูลมาจาก Primary DNS ที่อยูที่ IP address 202.44.246.70 โดยจะเป็นข้อมูลของ domain name eng.cmu.ac.th ส่วน file root.cache เป็น file ที่ใช้สร้าง Cache ของ DNS ตอนเริ่มต้น ซึ่งถ้าต้องการให้มี ข้อมูลอะไรอยู่ ก็สามารถใส่เข้าไปใน file นี้ได้เลย ซึ่งถ้า Linux server ตัวนี้รับผิดชอบมากกว่าหนึ่ง Domain ก็ให้ใส่ domain name database file แยกแต่ละ file ออกไป และถ้าต้องการใส่ comment ก็ใช้ ; ในตอนต้นบรรทัด หรือว่าหน้าข้อความที่ต้องการ โดยหลัง ; จะเป็น commment ไปจนถึงสิ้นสุดบรรทัด การสร้าง name -> IP database file การสร้าง database file นี้ จะสร้างใน directory ที่กำหนดใว้ใน file /etc/named.boot และชื่อ file ก็กำหนดไว้ใน file /etc/named.boot เช่นกันและจะมี format ดังนี้คือ #cat /etc/domain/named.host ;เริ่มต้นส่วน Header @ IN SOA ds90.intanon.nectec.or.th. root.ds90.intanon.nectec.or.th. ( 1997091101 Serial in 10800 Refresh 3 hours 3600 ; Retry 1 hour 3600000 ; Expire 1000 hours 86400 ) ; Minimum 24 hours IN NS ds90.intanon.nectec.or.th. IN NS morakot.nectec.or.th. IN MX 10 ds90.intanon.nectec.or.th. ;สิ้นสุดส่วน Header ;เริ่มต้นส่วน Body ds90 IN A 202.44.145.20 IN HINFO "P75R16" "Linux 2.0.33" www IN CNAME ds90 proxy IN A 202.44.145.100 IN HINFO "P166R128" "Linux 2.0.33" nms IN CNAME proxy ;สิ้นสุดส่วน Body จากตัวอย่างเป็นการสร้าง database file สำหรับ domain name intanon.nectec.or.th (ชื่อ domain name จะกำหนดใน file /etc/named.boot ) โดยจะประกอบไปด้วยองค์ประกอบสองส่วนคือ ส่วน header ซึ่ง database file ทุก file จะมีส่วนนี้เหมือนกันหมด โดยบรรทัดแรก @ จะมายถึงข้อมูลของ domain name นี้โดยจะมีโดย IN จะหมายถึง Internet ส่วน SOA จะมาจาก ZOne of authority หรือ Originate of domain ซึ่งจะประกอบไปด้วย ชื่อเครื่อง ชื่อผู้ดูแลเครื่อง ค่า serial ซึ่งจะเป็นตัวบอกว่า มีการแก้ไขข้อมูลของ domain นี้หรือไม่ ดังนั้นถ้าเราทำการแก้ไขข้อมูลใน file นี้ก็ต้องทำการแก้ค่านี้ด้วย โดยทั่วไปจะใช้ค่าของ ปี เดือน วัน ครั้งที่ในวันนั้น ที่ทำการแก้ไข จากตัวอย่าง ก็คือ file นี้มีการแก้ไขเป็นครั้งแรกของวันที่สิบเอ็ด เดือนกันยายน ปี 1997 นั่นเอง ในบรรทัดถัดมาเป็น เป็นการบอกจะทำการ refresh ข้อมูลทุก 3 ชั่วโมง จะทำพยายามอ่านข้อมูลจาก DNS ตัวอื่นภายใน หนึ่งชั่วโมง ข้อมูลที่ไม่ได้ใช้ครบ 1000 ชั่วโมงจะถูกดึงออกจาก Cache และ ค่า TTL(Time To Live) เป็น 24 ชั่วโมง ในส่วนถัดมา NS จะหมายถึง Name Server ซึ่ง เครื่องนี้ไปอ้างอิงถึงด้วย และจะมีกี่ตัวก็ได้ โดยเรียงตามลำดับความสำคัญ ส่วน MX จะหมายถึง mail exchange คือการกำหนดเครื่องที่เป็น Mail Service Server นั่นเอง และสามารถกำหนดค่าความสำคัญได้ด้วย ในส่วน body จะเป็นการกำหนดชื่อเครื่องกับ IP address ที่สัมพันธ์ก้น โดย A จะมาจาก address ส่วน HINFO จะมาจาก Hardware Info และ CNAME จะมาจาก Chronological Name หรือชื่อแฝง ดังนั้นจากตัวอย่างเครื่องที่ชื่อว่า ds90 (ซึ่งจะมี domain name ว่า intanon.nectec.or.th ) จะมี Internet Address เป็น 202.44.145.20 และมี Hardware info เป็น P75R16 และมี OS เป็น Linux 2.0.33 (ซึ่งจะใส่หรือว่าไม่ใส่ก็ได้ ) ละมีชื่อแฝง หรือว่าชื่ออื่น ๆ เป็น www เป็นต้น ซึ่งถ้ามีเครื่องอื่น ๆ อีก ก็ให้ใส่รายละเอียดของแต่ละเครื่องเรียงตามลำดับได้เลย ตามตัวอย่าง การสร้าง IP -> Name database file ก็จะเหมือนกับการสร้าง Name -> IP database file แต่จะต่างกันในส่วนของ body ดังตัวอย่าง # cat /etc/domain/named.rev ;เริ่มต้นส่วน Header @ IN SOA ds90.intanon.nectec.or.th. root.ds90.intanon.nectec.or.th. ( 1997091101 Serial 10800 Refresh 3 hours 3600 ; Retry 1 hour 3600000 ; Expire 1000 hours 86400 ) ; Minimum 24 hours IN NS ds90.intanon.nectec.or.th. IN NS morakot.nectec.or.th. ;สิ้นสุดส่วน Header ;เริ่มต้นส่วน Body 20 IN PTR ds90.intanon.nectec.or.th. IN PTR www.intanon.nectec.or.th. 100 IN PTR proxy.intanon.nectec.or.th. IN PTR nms.intanon.nectec.or.th. ;สิ้นสุดส่วน Body โดยในส่วน Body จะใช้ IN PTR ซึ่งย่อมาจาก Internet pointer อันหมายถึงว่า IP (3 ส่วนแรกกำหนดที่ file /etc/named.boot 202.44.145.)20 ชี้ไปยังเครื่องชื่อ ds90.intanon.nectec.or.th และ www.intanon.nectec.or.th เป็นต้น การสร้าง local database file การสร้าง local database file นั้น จะมีโครงสร้างดังนี้ # cat /etc/domain/named.local ;เริ่มต้นส่วน Header @ IN SOA dg42.mptc.eng.cmu.ac.th. root.dg42.mptc.eng.cmu.ac.th. ( 1997070902 Serial 10800 Refresh 3 hours 3600 ; Retry 1 hour 3600000 Expire 1000 hour 86400 ) Minimum 24 hours IN NS localhost ;สิ้นสุดส่วน Header ;เริ่มต้นส่วน Body localhost IN A 127.0.0.1 1 IN PTR localhost ;สิ้นสุดส่วน Body ซึ่งในส่วนของ Body จะเขียนเหมือนกันหมดในทุก server จึงไม่ต้องทำการแก้ไขอะไร แก้ไขเพียงส่วน Header ให้เหมาะสมเท่านั้น การสร้าง Cache initialize file โดยปกติ Cache initialize file จะใช้วิธีการ copy จาก template file มากกว่า เพราะว่า ไม่มีความจำเป็นต้องทำเอง แต่ว่าจะนำตัวอย่างของ file ที่ใช้จริง มาแสดงให้ดูเป็นตัวอย่าง # cat /etc/named/root.cache . 99999999 IN NS NS.NIC.DDN.MIL. 99999999 IN NS A.ISI.EDU. 99999999 IN NS AOS.BRL.MIL. 99999999 IN NS C.NYSER.NET. 99999999 IN NS GUNTER-ADAM.AF.MIL. 99999999 IN NS NS.NASA.GOV. 99999999 IN NS TERP.UMD.EDU. ;Prep the cache (hotwire the addresses). Order does not matter NS.NIC.DDN.MIL. 99999999 IN A 192.67.67.53 A.ISI.EDU. 99999999 IN A 26.3.0.103 A.ISI.EDU. 99999999 IN A 128.9.0.107 AOS.BRL.MIL. 99999999 IN A 128.20.1.2 AOS.BRL.MIL. 99999999 IN A 192.5.25.82 C.NYSER.NET. 99999999 IN A 192.33.4.12 GUNTER-ADAM.AF.MIL. 99999999 IN A 26.1.0.13 NS.NASA.GOV. 99999999 IN A 128.102.16.10 NS.NASA.GOV. 99999999 IN A 192.52.195.10 TERP.UMD.EDU. 99999999 IN A 128.8.10.90 การติดตั้ง DNS daemon เมื่อทำการแก้ไข DNS database file เสร็จสิ้นแล้ว ก็ลอง run DNS daemon ดู ดังตัวอย่าง # named & ถ้าไม่มี error message ก็แสดงว่าสามารถทำงานได้ตามปกติ ก็ไปแก้ไข file boot script โดยจะแก้ไข file /etc/rc.d/rc.inet2 โดยลบ # ที่นำหน้าบรรทัดดังตัวอย่างออก # # Start the NAMED/BIND name server. if [ -f ${NET}/named ]; then echo -n " named" {NET}/named fi แล้วทำการ Boot เครื่องเพื่อดูว่า Boot Script ทำงานหรือไม่ ถ้าทำงานปกติ สามารถตรวจสอบได้ดังนี้ #ps -ax | grep named 387 ? S 0:31 named 3191 p2 S 0:00 grep named #:~$ แสดงว่า DNS daemon (named) ทำงานได้ และควรตรวจสอบอีกครั้งโดย #nslookup >www.cnn.com Server: ds90.intanon.nectec.or.th Address: 202.44.145.20 Name: cnn.com Addresses: 207.25.71.27, 207.25.71.28, 207.25.71.29, 207.25.71.22 207.25.71.23, 207.25.71.24, 207.25.71.25, 207.25.71.26 Aliases: www.cnn.com >exit # นั่นคือ DNS daemon สามารถทำงานได้ปกติ