NO IMAGE

内部向けDNSサーバー設定

外部のDNSサーバーは、ELDOMAIN のDNSサーバーを使用させていただいています。

これまで、内部(ルーターで隔てられたLAN上)では、DNSサーバーは使用しておらず、hosts ファイルに、IP アドレスとホスト名を記述して代替としてきました。

これだと、ノートPCをLANに繋いで使用しているときは、サーバ機のIPアドレスを192.168.1.21に指定しますが、持ち出して外部ネットワークに繋いでいるときは、hosts ファイルの記述をコメントアウトして修正・保存する必要が生じます。また、クライアントPCが増えたり、バーチャル環境にクライアントOSを導入する度に、hosts ファイルを作成しなければならず、いらぬ手間がかかり面倒です。

そこで、遅ればせながら、クライアントPCがLANに接続した場合はLAN内のDNSサーバーを参照し、名前解決をするようにDNSサーバーを導入することにしました。

DNSサーバーには、BINDを使用します。BINDは、Berkeley Internet Name Domain の略で、カリフォルニア大学バークレー校で開発 され、現在は、ISC(Internet Systems Consortium)よって開発が進められています。世界で使われているDNS( Domain Name System)サーバーのほとんどが、これを元に作られたもの。

DNSサーバー BIND9 とそのユーティリティをインストール

# yum -y install bind bind-utils

ドメイン兼サーバー定義ファイル「named.conf」を編集

# vi /etc/named.conf

内部向けの設定を、view “internal” {  };内に記述しました。

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view "internal" {
        match-clients { localhost; localnets; };
        recursion yes;

        zone "." IN {
                type hint;
                file "named.ca";
        };

        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";

        zone "a21-hp.com" IN {
                type master;
                file "a21-hp.com.zone";
                allow-update { none; };
        };

        zone "1.168.192.in-addr.arpa" IN {
                type master;
                file "a21-hp.com.rev";
                allow-update { none; };
        };

};

ドメイン正引きファイル・・・上記 named.conf で指定したファイル「a21-hp.com.zone」を作成します。

# vi /var/named/a21-hp.com.zone
$ORIGIN a21-hp.com.
$TTL 86400
@       IN      SOA     dns.a21-hp.com.         root.a21-hp.com. (
                        2013082219      ; serial
                        3600            ; refresh (1 hour)
                        900             ; retry (15 minites)
                        604800          ; expire (1 week)
                        86400           ; minimum (1 day)
)
        IN      NS              dns.a21-hp.com.
        IN      NS              a21-hp.com.
        IN      MX      10      mail.a21-hp.com.
        IN      A               192.168.1.21
dns     IN      A               192.168.1.21
www     IN      A               192.168.1.21
mail    IN      A               192.168.1.21
hpc     IN      A               192.168.1.7
tv-pc   IN      A               192.168.1.5

ドメイン逆引きファイル・・・上記 named.conf で指定したファイル「a21-hp.com.rev」を作成します。

# vi /var/named/a21-hp.com.rev
$ORIGIN 1.168.192.in-addr.arpa.
$TTL    86400
@       IN      SOA     dns.a21-hp.com.         root.a21-hp.com. (
                        2013082219      ; serial
                        3600            ; refresh 1Hour
                        900             ; retry 15min
                        604800          ; expire 1w
                        86400           ; minimum 24Hour
)
        IN      NS              dns.a21-hp.com.
        IN      A               192.168.1.21
21      IN      PTR             a21-hp.com.
7       IN      PTR             hpc.a21-hp.com.
5       IN      PTR             tv-pc.a21-hp.com.

DNSサーバーを起動する

# service named start

DNSサーバーを自動起動に設定

# chkconfig named on
# chkconfig –list named

「hosts」ファイルを開き編集。

# vi /etc/hosts

最初の1行を追加し、他をコメントアウト。

127.0.0.1       localhost.localdomain localhost
#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 www.a21-hp.com
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
#192.168.1.21 a21-hp.com localhost.a21-hp.com

DNS参照設定ファイル「resolv.conf」を編集

# vi /etc/resolv.conf
search 21-hp.com
nameserver 192.168.1.21

DNSサーバーの動作確認(サーバー上)


[root@localhost ~]# nslookup
> www.a21-hp.com
Server:         192.168.1.21
Address:        192.168.1.21#53

Name:   www.a21-hp.com
Address: 192.168.1.21
> mail.a21-hp.com
Server:         192.168.1.21
Address:        192.168.1.21#53

Name:   mail.a21-hp.com
Address: 192.168.1.21
> 192.168.1.21
Server:         192.168.1.21
Address:        192.168.1.21#53

21.1.168.192.in-addr.arpa       name = a21-hp.com.
> set type=SOA
> a21-hp.com
Server:         192.168.1.21
Address:        192.168.1.21#53

a21-hp.com
        origin = dns.a21-hp.com
        mail addr = root.a21-hp.com
        serial = 2013082219
        refresh = 3600
        retry = 900
        expire = 604800
        minimum = 86400
> exit

[root@localhost ~]#


クライアント側からDNSサーバーにアクセスするためには、ファイアーウォール(iptables)で、ポート番号53を開く必要があります。

当初、サーバ機で名前解決できるのに、クライアントで名前解決ができない状態で、だいぶ悩みましたが、service iptables stop したら、正常に機能したので、気がついた次第であります。

# vi /etc/sysconfig/iptables

ポート番号53の開放を追加(30、31行目)

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter

# まずは、受信は全て破棄に設定
:INPUT DROP [0:0]

# 同様に、転送は全て破棄に設定
:FORWARD DROP [0:0]

# 送信は全て通過
:OUTPUT ACCEPT [0:0]

# 上記条件下で、プロトコルがICMPなら通過(pingは通す)
-A INPUT -p icmp -j ACCEPT

# 自ホストからのアクセスなら全て許可
-A INPUT -i lo -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 各ポートをアクセス許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

# FTPでのアクセスを許可
-A INPUT -p tcp -m tcp --dport 21 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT

# その他の受信は「接続を拒否されました」表示で拒否
-A INPUT -j REJECT --reject-with icmp-host-prohibited

# その他の転送は「接続を拒否されました」表示で拒否
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

DNSサーバーの動作確認(クライアント上)

クライアント側PC(Win7)で、DNSでの名前解決を確認する前に、「hosts」ファイルを開き、全行コメントアウトします。(C:\windows\system32\drivers\etc\hosts)
ファイル編集にはエディタを管理者権限で開く必要があります。

# Copyright (c) 1993-2009 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

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

#192.168.1.21			a21-hp.com
#192.168.1.21			www.a21-hp.com
#192.168.1.21			mail.a21-hp.com

次に、DNSサーバーを指定します。

20130824a
現在、インターネットに接続している接続(ローカル接続)をクリックし、この画面を表示したら、プロパティの中から「TCP/IPv6」はチェックを外し無効にします。

その後、「TCP/IPv4」の選択したら「プロパティ」ボタンをクリックし、次の画面を開きます。


20130824bDNSサーバーのアドレスとして、自宅サーバーのIPアドレス(192.168.1.21)を設定します。

ゲートウェイとしてルーターのアドレス(192.168.1.1)を指定しているので、指定した優先DNSで名前解決ができないドメイン名は、自動的に外部DNSサーバーから名前解決されるようです。



20130824cWin7上で、コマンドプロンプトを開き、nslookupコマンドを実行し、CentOSの場合と同様に、名前が引けることを確認します。



実際にブラウザでの表示、メールの送受信などを行い、問題ないことを確認します。
(既に、開いていたブラウザは、一旦終了し、再起動する必要があるようです。)