24 LAN内からホスト/ドメイン名でサーバにアクセス可能にする1/2( DNS サーバBIND9導入)

CentOSに構築してたLAN内向けサービスのRaspberry Pi移行第1弾!
今回はDNSサーバーをRaspberry Piに構築します。

今回のDNSサーバーと次回のDHCPサーバーを作るメリットは
LAN内からサーバーにローカルIPアドレスでなくホスト名やドメイン名でアクセスできるようになります。
LAN内外を意識せずWEBページにアクセスできるようになるので便利。

単にDNSサーバーを立てただけでは、クライアント側(LAN内の他の端末)の設定でDNSサーバーを個別に指定してやる必要があります。
DHCPサーバーではDNSサーバーを指定してあげることが可能になるので、クライアント側はDNSを意識せず接続できるようになります。

【今回の構築の流れ】
1. インストール
2. 設定
3. ゾーンファイル・データベースの作成
4. その他の設定 (IPv6無効化とか)
5. 動作チェック
6. クライアント側の設定(Windows8.1 IPv6無効化)

【本設定の前提】
・グローバルIPアドレス固定環境で独自ドメイン取得済み。ただ外向け設定をしないのであんま関係ないかも。
・IPv6は使わない。
・外部向けの設定はしない。あくまでLAN内向けサービス。
・chroot化はしない。外部公開する場合はセキュリティの定石だが、内部からしかアクセスさせないなのとポートも閉じてるので。
・ドメイン名:wings2fly.jp
・ローカルネットワーク:192.168.84.0/24
・Raspberry PiのローカルIPアドレス:192.168.84.40
・メールサーバーのグローバルIPアドレス:49.212.243.24

※ドメイン名、ローカルネットワーク、Raspberry PiのローカルIPアドレス、メールサーバーのIPアドレスは各自の環境に合わせてください。この例は私の環境の例です。

【参考URL】
Raspberry Pi、DebianでのDNS設定
Debian 7.0 Wheezy – DNSサーバー – BINDインストール/設定 : Server World
Raspberry pi セットアップその4 bind9のインストールと設定
Debian 7 Wheezy – DNS サーバ構築! – mk-mode BLOG
CentOSでのDNS設定
CentOS 6.5 – DNS サーバ(BIND)構築! – mk-mode BLOG
DNSサーバー構築(BIND) – CentOSで自宅サーバー構築
chroot化
Debian 7 Wheezy – BIND の chroot 化! – mk-mode BLOG

では始めましょ~

【1. インストール】

DNSサーバの有名どころBINDを入れます。
DebianではBIND9のようです。一緒にbind9utilsもインスコされる模様。
一緒に入れてるdnsutilsは動作確認のdigコマンド用。

sudo apt-get -y install bind9 dnsutils

うぉ、インスコできない?!
インストール元のサーバーが404 NotFoundになってる。暫く触ってなかったからかしら。
インスコ前にアップデートします。
sudo apt-get update

気を取り直して再度インスコ
sudo apt-get -y install bind9 dnsutils

無事インスコされましたがサーバーが自動で立ち上がったので設定が終わるまで止めておきます。
sudo service bind9 stop

【2. 設定】

① 設定ファイル構成の変更

Debianのデフォルト設定ファイルの構成は以下のようになってます。

/etc/bind/
├named.conf (メイン設定ファイルだが以下のファイルを読み込んでるだけ)
├named.conf.options (実質メインの設定ファイル)
├named.conf.local (localのゾーン設定を記載するファイル。デフォは空っぽ)
└named.conf.default-zones (デフォルトのゾーン設定ファイル)

ちょっと分かりにくいのでnamed.confの読み込み設定を変更して以下の構成にします。

/etc/bind/
├named.conf (メイン設定ファイルだが以下のファイルを読み込んでるだけ)
├named.conf.options (実質メインの設定ファイル)
├named.conf.internal-zones (内向けゾーン設定。新規追加)
└(named.conf.external-zones) (外向けゾーン設定。今回は使わない)

では、named.confを編集します。
sudo vi /etc/bind/named.conf

元の状態
include “/etc/bind/named.conf.options”;
include “/etc/bind/named.conf.local”;
include “/etc/bind/named.conf.default-zones”;

変更後
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”; # 追加。でも今回は使わないのでコメントアウト

② オプション設定ファイルの変更

オプションファイルを編集してサービスを提供する範囲をサーバー本体とLAN内のみに限定。
sudo vi /etc/bind/named.conf.options

以下のように追加
options {
directory “/var/cache/bind”;

# 以下追加
allow-query { localhost; localnets; };
allow-transfer { localhost; localnets; };
allow-recursion { localhost; localnets; };
# 追加ここまで

また、IPv6も無効化します。一番最後のほうにある記載を以下のように修正

auth-nxdomain no; # conform to RFC1035
#listen-on-v6 { any; }; # ←コメントアウト
listen-on-v6 { none; }; # ←追記
};

【3. ゾーンファイル・データベースの作成】

① ゾーンファイルの作成

ゾーンファイルを作成して設定します。
このゾーンファイルでDNSサーバーのカバーする範囲を指定します。
参照するデータベースファイルもここで指定します。

ちなみに内部向けってのはLAN内向けってことです。外部向けはその逆でLAN外向け。

今回は内部向けのみ。
sudo vi /etc/bind/named.conf.internal-zones

新規ファイルが開くので以下を記載

view "internal" {
    match-clients {
        localhost;
        192.168.84.0/24;
    };

    #正引き
    zone "wings2fly.jp" {
        type master;
        file "/etc/bind/wings2fly.jp.lan";
        allow-update { none; };
    };

    #逆引き
    zone "84.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/84.168.192.db";
        allow-update { none; };
    };
    include "/etc/bind/named.conf.default-zones";

    empty-zones-enable no;
};

※逆引きゾーンの設定名はローカルネットワーク192.168.84.0の最後の”.”以下(第4オクテットという)を取ってひっくり返す。
で、最後に”.in-addr.arpa”をくっつける
例えば
192.168.84.0なら84.168.192.in-addr.arpa
192.168.1.0なら1.168.192.in-addr.arpa
となる。
ちなみに正引きはドメイン→IPの変換、逆引きはIP→ドメインの変換です。

② ゾーンデータベースファイル作成

このデータベースがIPアドレスとサーバーホスト名(FQDN)の対応表になります。
ゾーンファイルで指定したゾーンデータベースファイルを作成します。
今回は内部向けの正引き逆引きの2つ。

まず内部向け正引き。
sudo vi /etc/bind/wings2fly.jp.lan

新規ファイルが開くので以下記載

$TTL    86400
@       IN      SOA     ns.wings2fly.jp.  root.wings2fly.jp. (
                                      2015010201 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400      ; Minimum TTL 
)
        IN NS       ns.wings2fly.jp.
        IN MX 10    mail
@       IN A        192.168.84.110
ns      IN A        192.168.84.40
www     IN CNAME    wings2fly.jp.
mail    IN A        49.212.243.24
st110   IN CNAME    wings2fly.jp.
raspberrypi IN CNAME    ns.wings2fly.jp.

[簡単な説明]
始めの1行はお約束です。このまま記載。
2行目のns.wings2fly.jp.はその後のNSで指定するネームサーバー名に変更すること。
その後のroot.wings2fly.jp.はドメイン名の前にroot.後ろに.をつける。
(上記2つと各データベースエントリーのドメイン名最後についてる”.”は必須です。)
3行目はシリアル番号。日付+後ろに2桁。今回最初に作るので日付+01にしてます。
データベースを更新するごとに下2桁を1つずつ増加させます。
4~6行目は更新などのタイミングを秒で指定。数字はhttp://centossrv.com/bind.shtmlの値をパクってます。
7行目の数字はいじらないほうが無難。

9~16行目までがデータベースの中身です。
ここは各自の環境に合わせて書き換えてください。
9行目でネームサーバー名を指定。最後のドットを忘れない。
10行目はメールサーバー名。本ブログのNo19同様にmailを指定して、
mailのエントリでメールサーバーのIPアドレスを指定してあげます。
11行目の”@”はドメインルート。ここではst110のIPアドレスを指定してます。
12行目でns.wings2fly.jpのIPアドレスを指定してます。ここはもちろんRaspberry PiのIPアドレス。
13行目の”www”と15行目の”st110″は別名指定。ドメインルートを参照するようにしてます。
14行目でmail登場。外部メールサーバのIPアドレスを指定。
16行目のraspberrypiも別名指定。ns.wings2fly.jpを参照

続いて内部向け逆引き
sudo vi /etc/bind/84.168.192.db

新規ファイルが開くので以下記載

$TTL 86400
@   IN  SOA     ns.wings2fly.jp. root.wings2fly.jp. (
        2015010201  ;Serial
        28800       ;Refresh
        14400       ;Retry
        3600000     ;Expire
        86400       ;Minimum TTL
)

        IN NS   ns.wings2fly.jp.
        IN PTR  wings2fly.jp.
        IN A    255.255.255.0
110     IN PTR  st110.wings2fly.jp.
40      IN PTR  raspberrypi.wings2fly.jp.

[簡単な説明Part2]
1~8行目は正引きとおんなじ。
9行目はネームサーバーを指定。ここも同じ。
10行目はドメインルートを指定。
11行目はサブネットマスクを指定してると思われるが不明。おまじない。
12行目と13行目でst110とraspberrypiのドメイン名を設定。
最初の数字110と40は各サーバーのIPアドレス(192.168.84.110と192.168.84.40)の最後の数字。

【4. その他の設定】

① 問い合わせ先DNSサーバの追加

/etc/resolv.confを編集して自分自身を問い合わせ先に追加。

sudo vi /etc/resolv.conf

以下のように記載する。
nameserver 192.168.84.40 # 追加(DNSサーバー=Raspberry Piのアドレス)
nameserver 192.168.84.1 # 最初からあるルータのアドレス

② IPv6の無効化

IPv6は使用しないのでBIND起動用スクリプトを修正。

sudo vi /etc/default/bind9

以下のように修正する。
# startup options for the server
OPTIONS=”-u bind -4″

【5. 動作チェック】

設定は一通り終わったので、動作をチェックします。どきどき
まず、止めてたBINDを起動。
sudo service bind9 start

各コマンドの後にANSWER SECTIONが正しく表示されていればまずは正常に動作してます。
なぜか外部正引き・逆引きでAUTHORITY/ADDITIONAL SECTIONが表示されなかったのですが、
しばらくしたら正引きのみ表示されるようになりました。なんで???

[内部正引き]
dig ns.wings2fly.jp

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> ns.wings2fly.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34054
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;ns.wings2fly.jp. IN A

;; ANSWER SECTION:
ns.wings2fly.jp. 86400 IN A 192.168.84.40

;; AUTHORITY SECTION:
wings2fly.jp. 86400 IN NS ns.wings2fly.jp.

;; Query time: 7 msec
;; SERVER: 192.168.84.40#53(192.168.84.40)
;; WHEN: Fri Jan 2 19:08:29 2015
;; MSG SIZE rcvd: 63

[内部逆引き]
dig -x 192.168.84.40

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> -x 192.168.84.40
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41080
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;40.84.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
40.84.168.192.in-addr.arpa. 86400 IN PTR raspberrypi.wings2fly.jp.

;; AUTHORITY SECTION:
84.168.192.in-addr.arpa. 86400 IN NS ns.wings2fly.jp.

;; ADDITIONAL SECTION:
ns.wings2fly.jp. 86400 IN A 192.168.84.40

;; Query time: 8 msec
;; SERVER: 192.168.84.40#53(192.168.84.40)
;; WHEN: Fri Jan 2 19:10:18 2015
;; MSG SIZE rcvd: 115

[外部正引き]
dig www.isc.org

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> www.isc.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61958
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 6

;; QUESTION SECTION:
;www.isc.org. IN A

;; ANSWER SECTION:
www.isc.org. 46 IN A 149.20.64.69

;; AUTHORITY SECTION:
isc.org. 7186 IN NS ord.sns-pb.isc.org.
isc.org. 7186 IN NS ams.sns-pb.isc.org.
isc.org. 7186 IN NS ns.isc.afilias-nst.info.
isc.org. 7186 IN NS sfba.sns-pb.isc.org.

;; ADDITIONAL SECTION:
ams.sns-pb.isc.org. 86385 IN A 199.6.1.30
ams.sns-pb.isc.org. 86385 IN AAAA 2001:500:60::30
ord.sns-pb.isc.org. 86385 IN A 199.6.0.30
ord.sns-pb.isc.org. 86385 IN AAAA 2001:500:71::30
sfba.sns-pb.isc.org. 86385 IN A 149.20.64.3
sfba.sns-pb.isc.org. 86385 IN AAAA 2001:4f8:0:2::19

;; Query time: 8 msec
;; SERVER: 192.168.84.40#53(192.168.84.40)
;; WHEN: Fri Jan 2 19:11:28 2015
;; MSG SIZE rcvd: 276

[外部逆引き]
dig -x 149.20.64.69

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> -x 149.20.64.69
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19239
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;69.64.20.149.in-addr.arpa. IN PTR

;; ANSWER SECTION:
69.64.20.149.in-addr.arpa. 3600 IN PTR www.isc.org.

;; Query time: 218 msec
;; SERVER: 192.168.84.1#53(192.168.84.1)
;; WHEN: Fri Jan 2 19:12:24 2015
;; MSG SIZE rcvd: 68

【6. LAN内の他端末の設定】

IPv6を無効にしたのでLANの回線を使っているWindows端末もIPv6を無効にしておきます。
Windows8の場合を説明をします。
Macやアンドロイドは持ってないのでよく分かりません。
iPhoneはやり方が分からんので割愛。すまそ。

コンパネ(コントロールパネルね)から以下のように進む。
ネットワークとインターネット→ネットワークと共有センター

んで、左側のアダプターの設定の変更を開く。
ウィンドウが開いてネットワーク接続設定のアイコンがいくつか表示されので、
普段接続しているものを右クリック→プロパティ

真ん中のリストの中で「インターネットプロトコルバージョン6 (TCP/IPv6)」のチェックを外す。
これでIPv6は無効になる。

ノートパソコンとかで有線と無線を併用している場合はどちらも同じように設定する。

以上で、DNSサーバー構築は終了です。
次回DHCPサーバー構築へつづく!

2015年1月2日作成
2015年1月4日公開

シェアする

  • このエントリーをはてなブックマークに追加

フォローする