ติดตั้ง DNS แบบง่าย

เอามาจาก ThaiLinuxCafe - debian : ติดตั้ง dns อย่างง่าย

เรื่องของ DNS (Domain Name Server) เป็นเรื่องหลักของการใช้งานอินเทอร์เน็ต เนื้อหาซับซ้อนและทำความเข้าใจยาก สำหรับในที่นี้ เราเอาแค่ติดตั้งพอใช้งานได้ โดยเราจะติดตั้งเครื่องเซิร์ฟเวอร์เพื่อทำหน้าที่เป็น DNS สำหรับใช้งานเครือข่ายภายใน

โครงร่างคือ

  • เน็ตเวิร์กเราเป็น 192.168.1.0/24 มีโดเมนเป็น example.com
  • เครื่องที่ทำหน้าที่ name server มีชื่อว่า server1.example.com ไอพีเป็น 192.168.1.1 โดยมีชื่อเสมือนคือ ns1.example.com
  • มีเครื่องในวงเครื่องอื่น ๆ ดังนี้
    • ns2 = 192.168.1.2
    • client1 = 192.168.1.101
    • client2 = 192.168.1.102
    • client3 = 192.168.1.103

แพกเกจที่ทำหน้าที่ DNS ในเดเบียนชื่อ bind9 และแพกเกจที่เป็นโปรแกรมช่วยชื่อ dnsutils

งานปรับตั้งคือการสร้างไฟล์สำหรับให้ bind9 เรียกใช้ ดังนี้

  • โซนไฟล์ ไว้สำหรับค้นข้อมูลจากชื่อเป็นไอพี
  • รีเวิร์สไฟล์ ไว้สำหรับค้นข้อมูลย้อนกลับ คือจากไอพีเป็นชื่อ
  • คอนฟิกไฟล์ สำหรับบอก bind9 ว่าเราจะติดตั้ง DNS ในแบบไหน และประกอบด้วยไฟล์ข้อมูลอะไรบ้าง

เริ่มด้วย

ติดตั้ง DNS และโปรแกรมช่วย

# aptitude install bind9 dnsutils

ไปที่ไดเรกทอรีของการปรับตั้ง

# cd /etc/bind

เริ่มสร้างโซนไฟล์ ให้ชื่อว่า example.com.zone มีเนื้อไฟล์ดังนี้

# vi example.com.zone
$TTL    86400
@          IN      SOA    server1.example.com.    root.server1.example.com. (
                          51              ; serial (d. adams)
                          3H              ; refresh after 3 hours
                          15M             ; retry after 15 minutes
                          1W              ; expire after 7 days
                          1D )            ; minimum TTL (Time To Live) of 1 days
@          IN      NS      ns1.example.com.    ; primary NS
@          IN      NS      ns2.example.com.    ; secondary NS

ns1        IN      CNAME  server1

; append or edit host ip here
server1  IN      A      192.168.1.1
ns2      IN      A      192.168.1.2
client1  IN      A      192.168.1.101
client2  IN      A      192.168.1.102
client3  IN      A      192.168.1.103

สร้างรีเวิร์สไฟล์ ให้ชื่อว่า example.com.reverse มีเนื้อไฟล์ดังนี้

# vi example.com.reverse
$TTL    86400
@          IN      SOA    server1.example.com.    root.server1.example.com. (
                          51              ; serial (d. adams)
                          3H              ; refresh after 3 hours
                          15M             ; retry after 15 minutes
                          1W              ; expire after 7 days
                          1D )            ; minimum TTL (Time To Live) of 1 days
@          IN      NS      ns1.example.com.    ; primary NS
@          IN      NS      ns2.example.com.    ; secondary NS

; append or edit host name here
1        IN      PTR    server1.example.com.
2        IN      PTR    ns2.example.com.
101      IN      PTR    client1.example.com.
102      IN      PTR    client2.example.com.
103      IN      PTR    client3.example.com.

สร้างคอนฟิกไฟล์สำหรับโซน example.com ให้ชื่อว่า example.com.conf มีเนื้อไฟล์ดังนี้

# vi example.com.conf
zone "example.com" IN {
        type master;
        file "/etc/bind/example.com.zone";
        allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "/etc/bind/example.com.reverse";
        allow-update { none; };
};

เปลี่ยนสิทธิ์ให้ bind เป็นเจ้าของไฟล์

# chown bind:bind example.com.*

บอกให้ bind9 เอาไฟล์ของเราไปใช้งาน โดยการเพิ่มลงในไฟล์ named.conf.local ดังนี้

# vi named.conf.local
...
include "/etc/bind/example.com.conf";

เสร็จแล้วก็สั่งเริ่ม bind9 ใหม่

# /etc/init.d/bind9 restart

ถ้ามีข้อผิดพลาด ให้ดูที่ /var/log/syslog

ทดสอบโดย

# nslookup server1.example.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Name:   server1.example.com
Address: 192.168.1.1

ทดสอบย้อนกลับ

# nslookup 192.168.1.1
Server:         192.168.1.1
Address:        192.168.1.1#53

1.1.168.192.in-addr.arpa        name = server1.example.com.

หมายเหตุ

  • เลขซีเรียลตามตัวอย่างเป็น 51 แต่ส่วนใหญ่นิยมใช้วันที่ เช่น 2006030401 เป็นต้น
  • ในเนื้อไฟล์ของโซนไฟล์และริเวิร์สไฟล์ เวลาพิมพ์ระวังอยาลืมเครื่องหมายจุด ท้ายชื่อโฮสต์
  • สำหรับเครื่อง DNS ที่ทำหน้าที่เกตเวย์ออกอินเทอร์เน็ต พบว่าเมื่อแก้ไขไฟล์ /etc/resolv.conf ให้ชี้ไปที่ DNS ของไอเอสพี เครื่องเราจะทำหน้าที่เป็น slave โดยอัตโนมัติ
  • ถ้าจะเพิ่มโดเมน และเป็นเน็ตเวิร์กคนละวง ก็ใช้วิธีเดียวกันได้ โดยสร้างโซนไฟล์ รีเวิร์สไฟล์ และคอนฟิกไฟล์สำหรับโดเมนที่เพิ่ม
  • ถ้าเพิ่มโดเมน และเป็นเน็ตเวิร์กวงเดียวกัน เช่น หนึ่งไอพี มีหลายโดเมน ให้สร้างเฉพาะโซนไฟล์ ไม่ต้องสร้างรีเวิร์สไฟล์ ซึ่งก็จะทำให้เรียกดูชื่อย้อนจากไอพีไม่ได้
  • ถ้าจะเพิ่มเน็ตเวิร์กเป็นสองวง โดยเป็นโดเมนเดียวกัน ให้ดูตัวอย่างที่ Debian Administration: Two-in-one DNS server with BIND9

เนื้อหาไม่ค่อยถูกตามหลักการนะครับ เพราะมันยาก ถ้าจะให้รู้เรื่องจริง ๆ ต้องเข้าใจระบบอินเทอร์เน็ตพอสมควร ในที่นี้เอาแค่พอใช้งานได้ครับ

อ้างอิงเพิ่มเติม

Topic: 

Comments

ถ้าผมมี ip จริง ผมสามารถทำให้เครื่องที่ได้ ip จริงตัวนี้เป็น dns สำหรับ domain อื่นได้หรือไม่ครับ

ได้ครับ

พอดี config bind9 แล้วมีปัญหาครับ คือผมมี server หนึ่งเครื่อง แล้วผมคอนฟิก หลายๆโดเมน ลงบนเครื่องเดียว สามารถทำได้ไม่มีปัญหามาติดตรงที่ reverse ครับ ผมสามารถสร้า ไฟล์ reverse หลายไฟล์ได้หรือเปล่าครับ พอผม set ให้ใช้ไฟล์ reverse มากกว่าหนึ่งไฟล์แล้วมันขึ้น error ครับ

คิดว่าทำ reverse ได้แค่โดเมนเดียวครับ คงต้องเลือกเอาว่าจะทำที่โดเมนไหน

เห็นตรงกันกับคุณ wd เช่นกันครับ
___
Neutron: Linux Addict!

อือ แล้วอย่างนั้น ผมจะทำเมลล์ server ที่มีหลายโดเมน เมื่อผมทดสอบส่งเมลล์แล้วเข้า เป็น spam mail ทุกที มีวิธีแก้หรือเปล่าครับ ไปหาอ่านจากที่อื่นมา เขาบอกว่ามันเกี่ยวกับ reverse DNS และ SPF record ถ้าทำ reverse DNS ไม่ได้ ก็คงแย่ หรือว่าต้องติดต่อกับเจ้าของเมลล์นั้นๆ โดยตรงครับ

ผมเดาว่าถ้าเป็นโฮสต์ที่มีไอพีไม่คงที่ เขาจะเหมาว่าเป็น spam ทั้งหมด
กรณีนี้คงไม่มีทางแก้ นอกจากจะอาศัยพึ่งบริการของ gmail

แต่ถ้าเป็นโฮสต์ที่มีไอพีคงที่นี่ ผมยังไม่มีประสบการณ์เหมือนกัน ว่าเขาตัดสินการเป็น spam อย่างไร

ขอบคุณมากเลยครับ มีอีกหนึ่งคำถามครับ หวังว่าคงยังไม่เบื่อนะครับ มีวิธีตรวสอบหรือเปล่าครับว่า DNS ที่เขา config สามารถใช้งานได้แล้วหรือยัง

ผมใช้คำสั่ง nslookup มีรูปแบบเป็น

$ nslookup [-option] [name | -] [server]

เช่น

$ nslookup example.com ourdns.example.com

สมมุติว่าเครื่อง name server ของเราชื่อ ourdns.example.com

บางครั้งหากทำหลายวงเป็น internal/external อาจต้องลองจากเครือข่ายข้างนอกครับ

แล้ว ถ้ามี Mail server ด้วยจะกำหนดยังไงบ้างครับ

Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้