サーバーを構築する上で一番難しいのは何かと問われたら、私はメールサーバーの構築を挙げたいたいと思います。
自宅サーバーから、メールの送信と受信が完璧に行えたら、その人のレベルは一人前と言っても良いと思います。
そんなの簡単ですよ。apt-get install コマンドを使えば、何の問題もありませんよと言う人もいるかと思いますが、何も考える事がなくインストール出来た人は、ラッキーだったのでしょう。
ソフトはインストールに失敗しないように作られておりますから、ほとんどのソフトはインストールに失敗はしません。
しかし、一度インストールや設定で動作しなかった場合に、どこを見てどのように修正すれば良いのかは、初心者には無理でしょう。
素人の人は、エラーログを見る事さえ満足に出来ない人がおります。

私は、今回BINDを何年振りかでインストールしてみましたが、今までの感覚ではBINDのインストールは、ファイルの作成さえ落ち着いて行えば、インストール作業は難しくないと思っておりましたが、bind9 のインストールでその考えを覆されました。

bind9rndc: connect failed: 127.0.0.1#953: connection refused

こんな正体不明の表示が出て、その回復には相当に悩まされる人が出てくると思います。
当然ながら、このエラーに関しての質問はサイト上に数多く記載されておりますので、英語や日本語のサイトをこまめに見ていけば、解決方法は見つかるでしょう。
しかし、私はこの現象は一つだけの理由で発生するものでは無いのではないかと思っています。(基本的には、rndc.key の記載フォルダの問題のようです)
私の場合は、現象が出たら削除して、再インストールして対処しておりますが、最初は良くても何回かやると発生したりするので、回復させるコツみたいなのがあります。
内容の変更後に、restart を2回やったらエラーが消えたりするので、経験回数が必要と言っても良いかも知れません。
作成内容が多いだけでインストール作業は単純そのものですが、1発で動作しない事が多く、BINDのインストールは難度が高いと言って間違いありません。

dig meckk.com ; <<>> DiG 9.7.3 <<>> meckk.com ;; global options: +cmd ;; connection timed out; no servers could be reached

ひょっとしたら、こんな表示にも出会うかも知れませんね。
私がサーバーに何年振りかでインストールしたのには訳があります。
自宅サーバーですから、サーバーはローカル上のアドレスにあります。
ルーターで外部からのリクエスト(通常は80番ポートへのアクセス)を切り分けて、サーバーに接続しております。
それによって、外部からWEBサーバーに接続してホームページを公開させております。
アクセスは ddo.jp さんのDNSサーバーを利用させていただいておりますので、ドメインでアクセスができます。
今までは、内部からもドメインでアクセスができましたので、これが普通なのだろうと思っておりましたが、最近光回線に変更したら、内部からドメインでアクセスが出来なくなってしまいました。
実はこれが普通の動作で、今まで使用していたバッファローのブロードバンドルーター(BBR-4MG)が特殊と言うか、親切設計になっていただけのようです。

自宅サーバーを構築している人が、自分のホームページをドメインでアクセスできないのは不便です。
自分だけで使用しているのなら不便で済ませる事も出来ますが、家族が居る人は致命的な欠陥であると言われるでしょう。(何も知らない素人は怖いです)
外部のDNSサーバーはグローバルなIPアドレスの提供しかしないので、ローカルネットワークではドメインを使用してアクセスできないのは、当然と言えば当然です。
ローカルからドメインで接続させるには以下の方法があるようです。

(1)直接にローカルのネットワークアドレスを入れて表示させる。
http://192.168.1.81/ と言うようなやり方です。
ネットワーク機器の設定方法では良く使われるのですが、これではドメインからアクセスすると言う本来の方法から外れております。
特にこの方式の致命的な欠点は、ドメインの異なるバーチャルホストへの切り替えが全くできません。
これは論外の方法です。

(2)使用しているパソコンで、名前解決(ドメインからIPアドレスへの変換)をさせる。
自分の使っているパソコンの中で名前解決をさせると言う方法です。
WindowsXpの場合は、C:\windows\SYSTEM32\DRIVERS\etc\の中に、host ファイルと言う物があります。
どのOSでも、ほぼ同じ所にあるようです。
中身は、以下のようになっておりますが、一番最後に追記した部分が、名前解決させる部分です。

# Copyright (c) 1993-1999 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host 127.0.0.1 localhost 192.168.1.81 meckk.com 192.168.1.81 yukke-no-kobeya.ddo.jp

変更して上書き保存をした瞬間から動作します。
この設定は、ブラウザがIEでも、クロームでもオペラでも共通に機能しますので、なかなか便利です。
実際に公開しているサーバーとは異なるサーバーにも接続できますので、私もテストなどに使用しております。
設定が簡単なので、多くの解説サイトでも記載されておりますが、以下の欠点があります。
その人の使用しているパソコンしか通用しないので、数台のパソコンがある環境では、設定が大変です。
それに、この設定は最優先されるので、将来的にローカルにDNSサーバーを構築しても、その内容が反映されません。
当然ながら、このやり方ではバーチャルホストの切り替えはできません。

(3)外部のプロキシサーバーを利用する。
接続をローカルで行うから接続ができないのですから、外部にある無料のプロキシサーバーを経由して自分のサイトにアクセスすれば接続できます。
この方法の良い点は、外部から接続しているので、サーバーにフィルターが掛かっているような場合でも、それを通して表示できる点です。
つまり、本当の外部からアクセスしている状態で、自分のホームページを見る事ができます。
この方法にも欠陥があります。
まず、アクセスが遅くなる点でしょう。
これは、外部を経由するのですから当然ですが、そんなにイライラする程に遅くにはなりません。
外部のプロキシサーバーは、接続が不安定です。
昨日は存在していたプロキシサーバーが今日は接続できない(存在しない)状態になることは日常的にあります。
これでは、使いにくくなります。
それと、通信内容を傍受されてしまうのも欠点でしょう。
外部のプロキシサーバーは中国やロシア内にあるのも多いですから、暗証コードなどをプロキシサーバーを経由するのは危険です。
事実、外部の無料のプロキシサーバーは色々な情報収集のために設置されて居る場合が多いです。
プロキシサーバーを使うのは、せいぜいサイトのチェック程度にするのが安心でしょう。

(4)自宅サーバーにDNSサーバーを搭載する。
ここでやろうとしている事です。
正直な所、この方法しか無いと言うほどの方法なのですが、解説サイトは多くありません。
何と言っても、搭載する敷居が高いからだろうと、私は思っております。(先入感が大部分なのですが、最近の若い人は安直な事しかできません)
この方法であれば、DNSの問い合わせ先をこのサーバーに指定するだけで、使用が可能になります。
自分のパソコンのホストファイルを編集するよりは、設定が一般的でしょう。
自宅にプロキシサーバーでも設置すれば、パソコンには触る必要さえ無くなると思いますが、家庭環境ではそこまでやる必要はないでしょう。
当然ながら、バーチャルホストも問題なく接続できます。

前置きが長くなりましたが、早速インストールしてみましょう。
インストールする前に、apt-get update するのは常識ですね。(転ばぬ先の杖ですが、釈迦に説法でしょう)

root@meckk:~# apt-get -y install bind9 
The following NEW packages will be installed:
  bind9 bind9utils{a} libbind9-60{a} libdns69{a} libisc62{a} libisccc60{a}
  libisccfg62{a} liblwres60{a}
0 packages upgraded, 8 newly installed, 0 to remove and 34 not upgraded.
Need to get 1447 kB of archives. After unpacking 3625 kB will be used.
Get:1 http://security.debian.org/ squeeze/updates/main libisc62 armel 1:9.7.3.dfsg-1~squeeze8 [163 kB]
Get:2 http://security.debian.org/ squeeze/updates/main libdns69 armel 1:9.7.3.dfsg-1~squeeze8 [661 kB]
Get:3 http://security.debian.org/ squeeze/updates/main libisccc60 armel 1:9.7.3.dfsg-1~squeeze8 [30.6 kB]
Get:4 http://security.debian.org/ squeeze/updates/main libisccfg62 armel 1:9.7.3.dfsg-1~squeeze8 [49.5 kB]
Get:5 http://security.debian.org/ squeeze/updates/main libbind9-60 armel 1:9.7.3.dfsg-1~squeeze8 [37.2 kB]
Get:6 http://security.debian.org/ squeeze/updates/main liblwres60 armel 1:9.7.3.dfsg-1~squeeze8 [47.3 kB]
Get:7 http://security.debian.org/ squeeze/updates/main bind9utils armel 1:9.7.3.dfsg-1~squeeze8 [118 kB]
Get:8 http://security.debian.org/ squeeze/updates/main bind9 armel 1:9.7.3.dfsg-1~squeeze8 [340 kB]
Fetched 1447 kB in 3s (399 kB/s)
Preconfiguring packages ...
Selecting previously deselected package libisc62.
(Reading database ... 19284 files and directories currently installed.)
Unpacking libisc62 (from .../libisc62_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package libdns69.
Unpacking libdns69 (from .../libdns69_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package libisccc60.
Unpacking libisccc60 (from .../libisccc60_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package libisccfg62.
Unpacking libisccfg62 (from .../libisccfg62_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package libbind9-60.
Unpacking libbind9-60 (from .../libbind9-60_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package liblwres60.
Unpacking liblwres60 (from .../liblwres60_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package bind9utils.
Unpacking bind9utils (from .../bind9utils_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Selecting previously deselected package bind9.
Unpacking bind9 (from .../bind9_1%3a9.7.3.dfsg-1~squeeze8_armel.deb) ...
Processing triggers for man-db ...
!Setting up libisc62 (1:9.7.3.dfsg-1~squeeze8) ...
Setting up libdns69 (1:9.7.3.dfsg-1~squeeze8) ...
Setting up libisccc60 (1:9.7.3.dfsg-1~squeeze8) ...
Setting up libisccfg62 (1:9.7.3.dfsg-1~squeeze8) ...
Setting up libbind9-60 (1:9.7.3.dfsg-1~squeeze8) ...
Setting up liblwres60 (1:9.7.3.dfsg-1~squeeze8) ...
Setting up bind9utils (1:9.7.3.dfsg-1~squeeze8) ...
Setting up bind9 (1:9.7.3.dfsg-1~squeeze8) ...
Adding group `bind' (GID 114) ...
Done.
Adding system user `bind' (UID 109) ...
Adding new user `bind' (UID 109) with group `bind' ...
Not creating home directory `/var/cache/bind'.
wrote key file "/etc/bind/rndc.key"
#
Starting domain name service...: bind9.

root@meckk:~#

インストール時の内容など見る人はいないと思うのですが、重要な内容が含まれている時があります。
この場合が正にそうで、インストール終了間際に以下の記載があります。
Not creating home directory `/var/cache/bind'.
wrote key file "/etc/bind/rndc.key"
これが重要だったとは、悩んで解決した後に気がつくんですが。

私は最終的に、 へなちょこlinuxer ≫ Debian 6 サーバー構築 ≫ と言うサイトの解説に沿って構築したのですが、このサイトも多くのDNSサーバーの解説サイトの内容を参考にして作成したのが、書いてある内容を見れば分ります。
どのサイトもやりかたはほとんど一緒なのですが、このサイトの通りにすろと一発で成功すると言うサイトには、なかなか巡り会えないと思います。
以前に、Fedora で構築したときは、すんなりと構築できたような気がするのですが。

root@meckk:~#  vi /etc/bind/named.conf 
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
#include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.internal-zones";
include "/etc/bind/named.conf.external-zones";

解説の通りです。

root@meckk:~#  vi /etc/bind/named.conf.internal-zones 
view "internal" {
  match-clients {
    localhost;
    192.168.1.0/24;
  };
  zone "." {
    type hint;
    file "db.root";
  };
  zone "meckk.com" {
    type master;
    file "meckk.com.lan";
    allow-update { none; };
  };
  zone "yukke-no-kobeya.ddo.jp" {
    type master;
    file "yukke-no-kobeya.ddo.jp.lan";
    allow-update { none; };
  };
  zone "1.168.192.in-addr.arpa" {
    type master;
    file "1.168.192.db";
    allow-update { none; };
  };
  zone "localhost" {
    type master;
    file "db.local";
  };
  zone "127.in-addr.arpa" {
    type master;
    file "db.127";
  };
  zone "0.in-addr.arpa" {
    type master;
    file "db.0";
  };
  zone "255.in-addr.arpa" {
    type master;
    file "db.255";
  };
};

解説サイトの内容の方が、コメントが多くて分り易いですね。

root@meckk:~#  vi /etc/bind/named.conf.external-zones 
view "external" {
    match-clients {
    any;
  };
  zone "." {
    type hint;
    file "db.root";
  };
  zone "meckk.com" {
    type master;
    file "meckk.com.wan";
    allow-update { none; };
  };
  zone "43.105.111.121.in-addr.arpa" {
    type master;
    file "43.105.111.121.db";
    allow-update { none; };
  };
};

書いてあるIPアドレスなどの部分は、自分の環境に合わせてください。
ここに書いてある内容は、架空のアドレスです。

root@meckk:~#  vi /etc/bind/named.conf.options 
options {
        directory "/etc/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                192.168.1.10;   ← 解説と異なるがここはプロバイダのDNSを記載すべきかも( 192.168.1.1 ルーターのアドレス)
        };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

directory "/etc/bind";の部分は、最初 directory "/var/cache/bind"; にして動作させておりました。
前述の、Not creating home directory `/var/cache/bind'.
wrote key file "/etc/bind/rndc.key" に関係する部分です。

root@meckk:~#  vi /etc/bind/meckk.com.lan 
$TTL 86400
@  IN   SOA     meckk.com. root.meckk.com. (
        2011000002      ;Serial
        28800           ;Refresh
        14400           ;Retry
        3600000         ;Expire
        86400 )         ;Minimum TTL

        IN      NS      meckk.com.
        IN      MX 10   meckk.com.
@       IN A            192.168.1.10
*       IN A            192.168.1.10


root@meckk:~#  vi /etc/bind/yukke-no-kobeya.ddo.jp.lan 
$TTL 86400
@  IN   SOA     yukke-no-kobeya.ddo.jp. root.yukke-no-kobeya.ddo.jp. (
        2011000002      ;Serial
        28800           ;Refresh
        14400           ;Retry
        3600000         ;Expire
        86400 )         ;Minimum TTL

        IN      NS      yukke-no-kobeya.ddo.jp.
        IN      MX 10   yukke-no-kobeya.ddo.jp.

@       IN      A       192.168.1.10
*       IN      A       192.168.1.10


root@meckk:~#  vi /etc/bind/meckk.com.wan 
$TTL 86400
@  IN           SOA     ns1.meckk.com. root.meckk.com. (
                2011000002      ;Serial
                7200            ;Refresh
                7200            ;Retry
                2418200         ;Expire
                86400 )         ;Minimum TTL

                IN      NS      ns1.meckk.com.
                IN      MX 10   meckk.com.
ns1             IN      A       121.111.105.43
@               IN      A       121.111.105.43
WWW             IN      A       121.111.105.43
ftp             IN      A       121.111.105.43
mail            IN      A       121.111.105.43
meckk.com. IN TXT "v=spf1 ip4:121.111.105.43~all"


root@meckk:~#  vi /etc/bind/1.168.192.db 
$TTL 86400
@  IN           SOA     meckk.com. root.meckk.com. (
                2011000002      ;Serial
                28800           ;Refresh
                14400           ;Retry
                3600000         ;Expire
                86400 )         ;Minimum TTL

                IN      NS      meckk.com.

10              IN      PTR     meckk.com.


root@meckk:~#  vi /etc/resolv.conf 
nameserver 192.168.1.10


root@meckk:~#  /etc/init.d/bind9 restart 
Stopping domain name service...: bind9 waiting for pid 1294 to die.
Starting domain name service...: bind9.
root@meckk:~#


root@meckk:~#  aptitude -y install dnsutils    ← DNSの確認コマンドが入ったパッケージをインストール

root@meckk:~#  dig meckk.com  

; <<>> DiG 9.7.3 <<>> meckk.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31371
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;meckk.com.                     IN      A

;; ANSWER SECTION:
meckk.com.              86400   IN      A       192.168.1.10

;; AUTHORITY SECTION:
meckk.com.              86400   IN      NS      meckk.com.

;; Query time: 2 msec
;; SERVER: 192.168.1.10#53(192.168.1.10)
;; WHEN: Tue Nov 13 16:36:05 2012
;; MSG SIZE  rcvd: 57

単純そのものなのですが、動作しないと悩む事になります。
私の場合はこれで動作しているようなのですが、他のサイトの解説では微妙に記載が食い違っていたりして、動かない時にはパニックになります。
偶然にリスタートを2回やったらエラーが消えたりしたので、訳がわからないです。
繰り返しになりますが、経験を積めば対処方法も色々と覚えてくると言う事でしょうか。
【Tips】
不確かな記載なのですが、パソコンの起動時にDNSサーバーが立ち上がっていないと、動作しないように思えます。
私の環境だけの問題のような気がしますが、Xpを使用していてパソコン起動後にDNSサーバーを立ち上げても名前解決をしてくれませんでした。
それどころか、外部サイトへのアクセスも一切不能になっております。
DNSサーバー起動後に改めて、パソコンを再起動させましたら接続できましたので、動作しない場合は試されてはいかがでしょうか。

それから、このDNSサーバーを通すと接続が異常に遅くなるようなら、設定を見直してください。
構築したDNSサーバーで名前解決が出来なかった場合の処理方法の設定がおかしいです。
記載内容は、あくまで構築直後の状態ですから、私は動作状態によって変更を加えて居る場合が多いです。(テストしては戻したりの繰り返しです)
完璧な設定方法の解説は、私の能力では無理です。

Windows7でこのDNSサーバーに接続した時のことです。
名前解決ができませんでした。
XpとVistaでは問題がなく繋がるのに、なぜWindows7では駄目なのかと色々(nslookup 等を使って)調べてみたら、IPV6で名前解決をしておりました。
このDNSサーバーはIPV6での名前解決はできませんので、プロバイダのDNSに問い合わせて、プロバイダからIPV6のグローバルアドレスの提供を受けているのですから、このアドレスではローカルでは繋がる筈がありません。
当面の解決策として、ネットワークのTCP/IPの設定で、IPV6のチェックを外したら繋がるようになりました。