ติดตั้ง bind บน ubuntu

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 31-10-2554

ดูแลโดย WIPAT

เพิ่มเติมบันทึกเมื่อ 24-02-2558

ดูแลโดย WIBOON


  • ทดสอบกับ ubuntu 10.04, 14.04 LTS
  • Ubuntu Security Notice USN-2503-1 : Bind vulnerability (bind9 vulnerability)
    Update instructions
    The problem can be corrected by updating your system to the following package version:
    Ubuntu 14.04 LTS: bind9 1:9.9.5.dfsg-3ubuntu0.2


  1. สมมติว่า name server ของ ISP ที่ให้บริการ มีหมายเลข ip คือ 10.0.0.5 และ name server ของเราเป็นเลข 10.0.1.3
    ก่อนติดตั้ง ให้ทดสอบว่า server เครื่องนี้ สามารถท่องอินเทอร์เนตได้อย่างสมบูรณ์
    • ลองใช้ browser ไปที่ www.google.com ว่าใช้งานได้
    • ตรวจสอบดู dns server ที่ตนเองใช้อยู่ในปัจจุบันในแฟ้ม /etc/resolv.conf
      ด้วยคำสั่งว่า cat /etc/resolv.conf ได้ข้อความประมาณว่า nameserver 10.0.0.5
      ตัวอย่างนี้คือระบบเลือกใช้ name server มีหมายเลข ip คือ 10.0.0.5

    • ลองใช้คำสั่งว่า nslookup www.yahoo.com ได้คำตอบประมาณว่า
      Server: 10.0.0.5
      Address: 10.0.0.5#53

      Non-authoritative answer:
      www.yahoo.com canonical name = www.yahoo.akadns.net.
      Name: www.yahoo.akadns.net
      Address: 209.191.93.52

  2. ติดตั้งโปรแกรม bind ด้วยคำสั่ง sudo apt-get install bind9 bind9-doc bind9-host dnsutils
    สั่งให้ DNS sever ทำงาน ใช้คำสั่ง sudo /etc/init.d/bind9 start
    ปรับแต่งค่าต่างๆได้ที่แฟ้ม /etc/bind/named.conf.options
    แล้วสั่งให้ DNS server ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/bind9 reload

  3. การทำเป็น name server แบบ forward only
    แก้ไขแฟ้ม /etc/bind/named.conf.options ให้มีข้อมูลประมาณดังตัวอย่าง

    options {
    directory "/var/cache/bind";
    forward first;
    forwarders {
    10.0.0.5;
    };
    // dnssec-validation auto; หากยังไม่พร้อมในเรื่อง dnssec ให้ใส่ // เพื่อ comment จะทำให้ใช้งาน resolve name ได้
    auth-nxdomain no;
    allow-query { any; };
    };

    แก้ไขเสร็จแล้ว ให้สั่ง reload name server ใหม่ ด้วยคำสั่ง sudo /etc/init.d/bind9 reload

    ทดสอบผลงานด้วยคำสั่ง
    nslookup www.yahoo.com 127.0.0.1
    ได้ผลประมาณว่า
    Server: 127.0.0.1
    Address: 127.0.0.1#53

    Non-authoritative answer:
    www.yahoo.com canonical name = www.wa1.b.yahoo.com.
    www.wa1.b.yahoo.com canonical name = www-real.wa1.b.yahoo.com.
    Name: www-real.wa1.b.yahoo.com
    Address: 209.131.36.158


    ถึงตอนนี้แสดงว่า name server ของเราทำงานเป็นแบบ forward only ได้แล้ว

  4. หากต้องการทำเป็น caching only ด้วยก็ให้ทำต่อคือ
    สำหรับ Ubuntu 10.04 ซึ่งยังคงใช้ /etc/resolv.conf ให้แอดมินแก้ไขเองได้
    แก้ไขแฟ้ม /etc/resolv.conf เพิ่มข้อความว่า
    name server 127.0.0.1 ไว้บนบรรทัดแรกสุด ประมาณว่า

    nameserver 127.0.0.1
    nameserver 10.0.0.5

    หมายความว่า ให้เลือก query จากตนเองก่อน หากไม่พบ ก็ไปต่อที่ 10.0.0.5

    แก้ไขแค่นี้ ก็ใช้ได้แล้ว ไม่ต้องไป reload หรือ restart
    รอสัก 2 นาที แล้วลองทดสอบผลงานด้วยคำสั่ง
    nslookup www.yahoo.com
    ได้ผลประมาณว่า
    Server: 127.0.0.1
    Address: 127.0.0.1#53

    Non-authoritative answer:
    www.yahoo.com canonical name = www.wa1.b.yahoo.com.
    www.wa1.b.yahoo.com canonical name = www-real.wa1.b.yahoo.com.
    Name: www-real.wa1.b.yahoo.com
    Address: 209.131.36.158
    แสดงว่าใช้งานได้แล้ว

    สำหรับ Ubuntu 14.04 ซึ่งไม่ให้แอดมินแก้ไขแฟ้ม /etc/reolv.conf ตรงๆ ก็ให้ปรับคอนฟิกของ /etc/network/interface ดังนี้
    ตัวอย่างการตั้งแบบกำหนดค่าเอง ให้แก้ไขแฟ้ม /etc/network/interfaces
    sudo vi /etc/network/interfaces

    ให้มีบรรทัดข้อมูลว่า
    auto eth0
    iface eth0 inet static
    address 10.0.100.5
    netmask 255.255.255.0
    gateway 10.0.100.1
    dns-nameservers 127.0.0.1 192.100.77.5
    บรรทัด iface eth0 inet static คือการระบุว่าจะตั้ง IP แบบ static
    บรรทัด address 10.0.100.5 คือการระบุค่า IP address ที่จะใช้
    บรรทัด netmask 255.255.255.0 คือการระบุค่า netmask ที่จะใช้
    บรรทัด gateway 10.0.100.1 คือการระบุค่า gateway ที่จะใช้
    บรรทัด dns-namesservers ให้ใส่ค่า dns server ไว้ในแฟ้มนี้ด้วย หมายความว่ามี name server 2 ตัว โดยตัวแรกคือ 127.0.0.1 และตัวที่สองคือ 192.100.77.5
    รีสตาร์ทเครื่องเพื่อรับค่าใหม่
    sudo shutdown -r now

  5. มีคำแนะนำสำหรับการป้องกัน และอนุญาตเฉพาะเน็ตบางเน็ตให้ทำ recursion ได้เท่านั้น
    ให้แก้ไขในแฟ้ม /etc/bind/named.conf.options โดยเพิ่ม
    acl "trusted" {
    10.0.100.0/24;
    localhost;
    localnets;
    };

    และในช่วง option { ... } ให้เพิ่มคำสั่งเหล่านี้ด้วยครับ
    options {
    ...
    allow-query { any; };
    allow-recursion { trusted; };
    allow-query-cache { trusted; };
    ...
    };

    Reference: https://kb.isc.org/article/AA-00269/0/What-has-changed-in-the-behavior-of-allow-recursion-and-allow-query-cache.html

  6. หากต้องการทำเป็น name server สำหรับบริการทั่วๆไป
    มีตนเองเป็น primary และมี myisp.domain.com เป็น secondary
    **** ต้องยกเลิกหรือลบบรรทัดข้อความในแฟ้ม /etc/bind/named.conf.options (ถ้ามี)ว่า forward first; ทิ้งออกไปด้วย

    แก้ไขที่แฟ้ม /etc/bind/named.conf.local
    **** การใส่ comment ใน zone file ให้ใส่เครื่องหมาย ";" นำหน้า
    ให้มีข้อมูล zone และ reserve zone ที่ต้องการ ดังตัวอย่าง
    zone "mydomain.com" {
    type master;
    allow-query { any; };
    file "/etc/bind/my-domain.zone";
    };
    zone "1.0.10.in-addr.arpa" {
    type master;
    file "/etc/bind/10-0-1.zone";
    };

    ต่อไปให้สร้างแฟ้ม zone ต่างๆ
    แก้ไขแฟ้ม /etc/bind/my-domain.zone ให้มีข้อมูลประมาณดังตัวอย่าง
    $TTL 3D
    @ IN SOA localhost. root.localhost. (
    2014021701 ; serial (d. adams)
    3H ; refresh
    15M ; retry
    1W ; expiry
    1D ) ; minimum
    @ IN NS ns

    localhost IN A 127.0.0.1
    ns IN A 10.0.1.3
    myserver1 IN A 10.0.1.207
    myserver2 IN A 10.0.1.208

    หมายเหตุ เลข serial ให้ใช้แบบนี้ซึ่งนิยมคือ ปีค.ศ. 2014 เดือนที่สอง 02 วันที่ 17 และต่อด้วย ครั้งที่แก้ไขไฟล์ในวันนี้ คือ 01

    ต่อไปให้สร้างแฟ้ม reverse zone
    แก้ไขแฟ้ม /etc/bind/10-0-1.zone มีข้อมูลประมาณดังตัวอย่าง
    $TTL 3D
    @ IN SOA localhost. root.localhost. (
    2014021701 ; serial (d. adams)
    3H ; refresh
    15M ; retry
    1W ; expiry
    1D ) ; minimum
    @ IN NS ns.mydomain.com.

    205 IN PTR myserver1.mydomain.com.
    207 IN PTR myserver1.mydomain.com.

    ให้ DNS ทำงานด้วยคำสั่ง sudo /etc/init.d/bind9 restart
    ทดสอบใช้งานได้เลย

  7. ตัวอย่างการทำ name server 2 ตัว ตัวหนึ่งเป็น master อีกตัวเป็น slave เพื่อสำรองข้อมูล
    สมมติว่าเลข ip ของ master เป็น 10.0.0.5 และ slave เป็น 10.0.0.6

    บน master ทำการติดตั้งทำนองเดียวกับ name server ทั่วไป
    แต่ให้แก้ไขแฟ้ม /etc/bind/named.conf.local เป็นประมาณตามตัวอย่างว่า
    zone "mydomain.com" {
    type master;
    allow-query { any; };
    file "/etc/bind/my-domain.zone";
    allow-transfer { 10.0.0.6; };
    };

    บน slave ทำการติดตั้งทำนองเดียวกับ name server ทั่วไป
    แต่ให้แก้ไขแฟ้ม /etc/bind/named.conf.local เป็นประมาณตามตัวอย่างว่า
    zone "mydomain.com" {
    type slave;
    allow-query { any; };
    file "/var/cache/bind/my-domain.zone";
    masters { 10.0.0.5; };
    };

    ให้ DNS ทำงานด้วยคำสั่ง sudo /etc/init.d/bind9 reload
    ทดสอบใช้งานได้เลย