「サーバ - BIND(RHEL)」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == DNSサーバ(BIND)は、centos.comというドメイン名からIPアドレスを返したり、IPアドレスからドメイン名を返すサーバであ…」)
 
編集の要約なし
17行目: 17行目:
== BINDのインストール ==
== BINDのインストール ==
DNSサーバを構築するため、BINDをインストールする。<br>
DNSサーバを構築するため、BINDをインストールする。<br>
  sudo yum install bind bind-chroot
  sudo yum install bind bind-chroot bind-utils
<br><br>
<br><br>


25行目: 25行目:
<br>
<br>
  options {
  options {
         #listen-on port 53 { 127.0.0.1; };  ← コメントアウト
        # 全てListenする
         #listen-on-v6 port 53 { ::1; };     ← コメントアウト
         #listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; };
   
        # IPv6を使用しない
         #listen-on-v6 port 53 { ::1; };
        listen-on-v6 { none; };
         version        "unknown";          ← BINDのバージョン情報の非表示化
         version        "unknown";          ← BINDのバージョン情報の非表示化
         directory      "/var/named";
         directory      "/var/named";
37行目: 43行目:
   
   
         recursion yes;                      ← 再帰問合せ機能を有効化(内部DNSサーバとして動作)
         recursion yes;                      ← 再帰問合せ機能を有効化(内部DNSサーバとして動作)
         allow-query    { localhost; localnets; };   ← 内部からのみ問合せを許可
         allow-recursion { localhost; localnets; };   ← 内部からのみ再帰問合せを許可
        # 問い合わせを許可する範囲(内部ネットワークからのみ問い合わせを許可)
         allow-query-cache { localhost; localnets; };  ← 内部からのみキャッシュ問合せを許可
        # allow-query    { localhost; };
         forwarders{ 8.8.8.8; 8.8.4.4; }; ← 本DNSサーバー管理外の問合せ先としてGoogleの公開DNSサーバーを指定
         allow-query    { localhost; 192.168.1.0/24; };
        # 内部からのみ再帰問合せを許可
        # allow-recursion { localhost; };
         allow-recursion { localhost; localnets; };
        # ゾーン情報の転送を許可する範囲(セカンダリDNSがいればその場所/範囲)
        # allow-query-cache { localhost; };
         allow-query-cache { localhost; 192.168.1.0/24; };
   
        # 本DNSサーバ管理外の問合せ先
         forwarders{ 192.168.1.1; 8.8.8.8; };
   
   
         ...省略
         ...省略
55行目: 72行目:
   
   
  # 内部向けDNSの設定
  # 内部向けDNSの設定
# --追記--
  view "internal" {
  view "internal" {
         match-clients { localnets; };
         match-clients {
         match-destinations { localnets; };
          localhost;
# ----
          192.168.1.0/24;
         };
   
   
  zone "." IN {
        match-destinations {
        type hint;
          192.168.1.0/24;
        file "named.ca";
        };
};
   
        zone "." IN {
          type hint;
          file "named.ca";
        };
   
   
include "/etc/named.rfc1912.zones";
        include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
        include "/etc/named.root.key";
   
   
# 追記
         include "/etc/named/named.centos.com.zone";
         include "/etc/named/named.centossrv.com.zone";
  };
  };
# ----
   
   
  # 外部向けDNSの設定
  # 外部向けDNSの設定(固定IPアドレスの場合のみ)
# 追記(固定IPアドレスの場合のみ)
  view "external" {
  view "external" {
        // 外部向け設定
         match-clients {
         match-clients { any; };
          any;
         match-destinations { any; };
        };
         include "/etc/named/named.centossrv.com.zone.wan";
         match-destinations {
          any;
        };
         include "/etc/named/named.centos.com.zone.wan";
  };
  };
<br>
<br>
centos.comの内部向けゾーン定義ファイルを作成する。<br>
centos.comの内部向けゾーン定義ファイルを作成する。<br>
  sudo vi /etc/named/named.centossrv.com.zone
  sudo vi /etc/named/named.centos.com.zone
<br>
<br>
  zone "centossrv.com" {
  zone "centos.com" {
         type master;
         type master;
         file "centossrv.com.db";
         file "centos.com.db";
  };
  };
   
   
97行目: 120行目:
<br>
<br>
centos.comの外部向けゾーン定義ファイルを作成する。(固定IPアドレスの場合のみ)<br>
centos.comの外部向けゾーン定義ファイルを作成する。(固定IPアドレスの場合のみ)<br>
  sudo vi /etc/named/named.centossrv.com.zone.wan
  sudo vi /etc/named/named.centos.com.zone.wan
<br>
<br>
  # 正引き設定
  # 正引き設定
  zone "centossrv.com" {
  zone "centos.com" {
         type master;
         type master;
         file "centossrv.com.db.wan";
         file "centos.com.db.wan";
         allow-query { any; };
         allow-query {
          any;
        };
  };
  };
   
   
176行目: 202行目:
== 内部向け正引きゾーンデータベース(ドメイン名からIPアドレス)の作成 ==
== 内部向け正引きゾーンデータベース(ドメイン名からIPアドレス)の作成 ==
正引きゾーンデータベースを作成する。<br>
正引きゾーンデータベースを作成する。<br>
  sudo vi /var/named/centossrv.com.db
  sudo vi /var/named/centos.com.db
<br>
<br>
  $TTL    86400
  $TTL    86400
  @      IN      SOA    centossrv.com.  root.centossrv.com.(
  @      IN      SOA    centos.com.  root.centos.com.(
                                       2011062001 ; Serial
                                       2011062001 ; Serial
                                       28800      ; Refresh
                                       28800      ; Refresh
185行目: 211行目:
                                       3600000    ; Expire
                                       3600000    ; Expire
                                       86400 )    ; Minimum
                                       86400 )    ; Minimum
         IN NS    centossrv.com.
         IN NS    centos.com.
         IN MX 10 centossrv.com.
         IN MX 10 centos.com.
  @      IN A    192.168.1.3  ;サーバのプライベートIPアドレスを指定(centos.com用)
  @      IN A    192.168.1.3  ;サーバのプライベートIPアドレスを指定(centos.com用)
  *      IN A    192.168.1.3  ;サーバのプライベートIPアドレスを指定(*.centos.com用)
  *      IN A    192.168.1.3  ;サーバのプライベートIPアドレスを指定(*.centos.com用)
196行目: 222行目:
<br>
<br>
  $TTL    86400
  $TTL    86400
  @      IN      SOA    centossrv.com.  root.centossrv.com.(
  @      IN      SOA    centos.com.  root.centos.com.(
                                       2011062001 ; Serial
                                       2020010101 ; Serial
                                       28800      ; Refresh
                                       28800      ; Refresh
                                       14400      ; Retry
                                       14400      ; Retry
                                       3600000    ; Expire
                                       3600000    ; Expire
                                       86400 )    ; Minimum
                                       86400 )    ; Minimum
         IN      NS    centossrv.com.
         IN      NS    centos.com. ; ネームサーバ名
  3      IN      PTR  centossrv.com.  ;サーバIPアドレス最下位部(192.168.1.3)とドメイン名を指定
  30      IN      PTR  centos.com.  ; サーバIPアドレス最下位部(192.168.1.30)とドメイン名を指定
<br><br>
<br><br>


211行目: 237行目:
<br>
<br>
  $TTL    86400
  $TTL    86400
  @      IN      SOA    ns1.centossrv.com.  root.centossrv.com.(
  @      IN      SOA    ns1.centos.com.  root.centos.com.(
                                       2011062001 ; Serial
                                       2011062001 ; Serial
                                       7200      ; Refresh
                                       7200      ; Refresh
217行目: 243行目:
                                       2419200    ; Expire
                                       2419200    ; Expire
                                       86400 )    ; Minimum
                                       86400 )    ; Minimum
         IN NS    ns1.centossrv.com. ← ネームサーバー名
         IN     NS    ns1.centos.com. ; ネームサーバ名
         IN MX 10 centossrv.com. ← MXホスト名(メールサーバーを構築する場合のみ)
         IN     MX 10 centos.com.     ; MXホスト名(メールサーバを構築する場合のみ)
  ns1    IN A    XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ns1.centossrv.com用)
  ns1    IN     A    XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(ns1.centos.com用)
  @      IN A    XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(centossrv.com用)
  @      IN     A    XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(centos.com用)
  www    IN A    XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(www.centossrv.com用)
  www    IN     A    XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(www.centos.com用)
  ftp    IN A    XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ftp.centossrv.com用)
  ftp    IN     A    XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(ftp.centos.com用)
  mail    IN A    XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(mail.centossrv.com用)
  mail    IN     A    XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(mail.centos.com用)
  centos.com. IN TXT "v=spf1 ip4:XXX.XXX.XXX.XXX ~all"  ;サーバのグローバルIPアドレスを指定(メールサーバを構築する場合のみ)
  centos.com. IN TXT "v=spf1 ip4:XXX.XXX.XXX.XXX ~all"  ;サーバのグローバルIPアドレスを指定(メールサーバを構築する場合のみ)
<br><br>
<br><br>
232行目: 258行目:
<br>
<br>
  $TTL    86400
  $TTL    86400
  @      IN      SOA    ns1.centossrv.com.  root.centossrv.com.(
  @      IN      SOA    ns1.centos.com.  root.centos.com.(
                                       2017012901 ; Serial
                                       2020010101 ; Serial
                                       7200      ; Refresh
                                       7200      ; Refresh
                                       7200      ; Retry
                                       7200      ; Retry
                                       2419200    ; Expire
                                       2419200    ; Expire
                                       86400 )    ; Minimum
                                       86400 )    ; Minimum
         IN NS    ns1.centossrv.com.
         IN NS    ns1.centos.com.
  xxx    IN PTR  centossrv.com.  ;サーバIPアドレス最下位部(xxx.xxx.xxx.xxx)とドメイン名を指定
  xxx    IN PTR  centos.com.  ;サーバIPアドレス最下位部(xxx.xxx.xxx.xxx)とドメイン名を指定
<br>
<br>
<span style="color:#C00000">
<span style="color:#C00000">

2020年2月23日 (日) 13:29時点における版

概要

DNSサーバ(BIND)は、centos.comというドメイン名からIPアドレスを返したり、IPアドレスからドメイン名を返すサーバである。

内部でサーバにアクセスするときに、IPアドレスではなく、centos.comでアクセスできるようにするのが、内部向けDNSサーバであり、
外部からサーバにアクセスするときに、自ドメイン名からIPアドレスへの変換(名前解決)を行なうようにするのが、外部向けDNSサーバである。

例えば、外部向けDNSサーバの設定により、自宅サーバが稼動中にも係わらず、
ダイナミックDNSサービス側が保守やトラブル等でサービスが停止したことにより、ドメイン名でサーバにアクセスできなくなるということがなくなる。

※注意
固定IPアドレスの場合は独自ドメイン取得済であること。
外部向けDNSサーバは固定IPアドレス環境の場合のみ。


BINDのインストール

DNSサーバを構築するため、BINDをインストールする。

sudo yum install bind bind-chroot bind-utils



BINDの設定

BINDの設定ファイルを編集する。

sudo vi /etc/named.conf


options {
       # 全てListenする
       #listen-on port 53 { 127.0.0.1; };
       listen-on port 53 { any; };

       # IPv6を使用しない
       #listen-on-v6 port 53 { ::1; };
       listen-on-v6 { none; };

       version         "unknown";          ← BINDのバージョン情報の非表示化
       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-transfer { none; };           ← 追加(ゾーン情報の転送を禁止)

       ...省略

       recursion yes;                      ← 再帰問合せ機能を有効化(内部DNSサーバとして動作)

       # 問い合わせを許可する範囲(内部ネットワークからのみ問い合わせを許可)
       # allow-query     { localhost; };
       allow-query     { localhost; 192.168.1.0/24; };

       # 内部からのみ再帰問合せを許可
       # allow-recursion { localhost; };
       allow-recursion { localhost; localnets; };

       # ゾーン情報の転送を許可する範囲(セカンダリDNSがいればその場所/範囲)
       # allow-query-cache { localhost; };
       allow-query-cache { localhost; 192.168.1.0/24; };

       # 本DNSサーバ管理外の問合せ先
       forwarders{ 192.168.1.1; 8.8.8.8; };

       ...省略

};

logging {
       channel default_debug {
               file "data/named.run";
               severity dynamic;
       };
       category lame-servers { null; }; ← 追加(error (connection refused) resolvingというエラーログの出力抑止)
};

# 内部向けDNSの設定
view "internal" {
       match-clients {
          localhost;
          192.168.1.0/24;
       };

       match-destinations {
          192.168.1.0/24;
       };

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

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

       include "/etc/named/named.centos.com.zone";
};

# 外部向けDNSの設定(固定IPアドレスの場合のみ)
view "external" {
       match-clients {
          any;
       };

       match-destinations {
          any;
       };

       include "/etc/named/named.centos.com.zone.wan";
};


centos.comの内部向けゾーン定義ファイルを作成する。

sudo vi /etc/named/named.centos.com.zone


zone "centos.com" {
       type master;
       file "centos.com.db";
};

zone "1.168.192.in-addr.arpa" {
       type master;
       file "1.168.192.in-addr.arpa.db";
};


centos.comの外部向けゾーン定義ファイルを作成する。(固定IPアドレスの場合のみ)

sudo vi /etc/named/named.centos.com.zone.wan


# 正引き設定
zone "centos.com" {
       type master;
       file "centos.com.db.wan";

       allow-query {
          any;
       };
};

# 逆引き設定(プロバイダから逆引き権限を委譲されている場合のみ)
zone "SUBxxx.xxx.xxx.xxx.in-addr.arpa" {
       type master;
       file "SUBxxx.xxx.xxx.xxx.in-addr.arpa.db.wan";
       allow-query { any; };
};


IPv4のみ有効にする。(error (network unreachable) resolvingというエラーログの出力を抑止する)

sudo echo OPTIONS="-4" >> /etc/sysconfig/named



ルートゾーンの更新と自動更新設定

ルートゾーンは、世界に13台しかないトップレベルドメインを管理するDNSサーバのIPアドレスを管理しているファイルである。
ルートゾーン(named.ca)を更新する。

dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca


また、各月で、ルートゾーンが最新かどうか確認し、更新されていればルートゾーンの更新およびBINDの再起動を自動的に行うようにする。
※ルートゾーンが更新されていた場合のみ、新旧ルートゾーン情報及び、新旧ルートゾーンの差分情報をroot宛にメールする。

sudo vi named.root_update ← ルートゾーン最新化スクリプト作成


#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors

if [ $? -eq 0 ]; then
   sort_new=`mktemp`
   sort_old=`mktemp`
   diff_out=`mktemp`
   sort $new > $sort_new
   sort /var/named/chroot/var/named/named.ca > $sort_old
   diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
   if [ $? -ne 0 ]; then
      (
       echo '-------------------- old named.root --------------------'
       cat /var/named/chroot/var/named/named.ca
       echo
       echo '-------------------- new named.root --------------------'
       cat $new
       echo '---------------------- difference ----------------------'
       cat $diff_out
      ) | mail -s 'named.root updated' root
      cp -f $new /var/named/chroot/var/named/named.ca
      chown named. /var/named/chroot/var/named/named.ca
      chmod 644 /var/named/chroot/var/named/named.ca
      which systemctl > /dev/null 2>&1
      if [ $? -eq 0 ]; then
         systemctl restart named-chroot > /dev/null
      else
         /etc/rc.d/init.d/named restart > /dev/null
      fi
   fi
   rm -f $sort_new $sort_old $diff_out
else
   cat $errors | mail -s 'named.root update check error' root
fi

rm -f $new $errors


ルートゾーンの更新スクリプトに実行権限を付加する。

sudo chmod 700 named.root_update


ルートゾーンの更新スクリプトを毎月自動実行されるディレクトリに移動する。

sudo mv named.root_update /etc/cron.monthly/



内部向け正引きゾーンデータベース(ドメイン名からIPアドレス)の作成

正引きゾーンデータベースを作成する。

sudo vi /var/named/centos.com.db


$TTL    86400
@       IN      SOA     centos.com.  root.centos.com.(
                                     2011062001 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
        IN NS    centos.com.
        IN MX 10 centos.com.
@       IN A     192.168.1.3  ;サーバのプライベートIPアドレスを指定(centos.com用)
*       IN A     192.168.1.3  ;サーバのプライベートIPアドレスを指定(*.centos.com用)



内部向け逆引きゾーンデータベース(IPアドレスからドメイン名)の作成

逆引きゾーンデータベースを作成する。

sudo vi /var/named/1.168.192.in-addr.arpa.db


$TTL    86400
@       IN      SOA     centos.com.  root.centos.com.(
                                     2020010101 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
        IN      NS    centos.com.  ; ネームサーバ名
30      IN      PTR   centos.com.  ; サーバIPアドレス最下位部(192.168.1.30)とドメイン名を指定



外部向け正引きゾーンデータベース(ドメイン名からIPアドレス)の作成(固定IPアドレスの場合のみ)

外部向け正引きゾーンデータベースを作成する。

sudo vi /var/named/centos.com.db.wan


$TTL    86400
@       IN      SOA     ns1.centos.com.  root.centos.com.(
                                     2011062001 ; Serial
                                     7200       ; Refresh
                                     7200       ; Retry
                                     2419200    ; Expire
                                     86400 )    ; Minimum
        IN      NS    ns1.centos.com.  ; ネームサーバ名
        IN      MX 10 centos.com.      ; MXホスト名(メールサーバを構築する場合のみ)
ns1     IN      A     XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(ns1.centos.com用)
@       IN      A     XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(centos.com用)
www     IN      A     XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(www.centos.com用)
ftp     IN      A     XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(ftp.centos.com用)
mail    IN      A     XXX.XXX.XXX.XXX  ; サーバのグローバルIPアドレスを指定(mail.centos.com用)
centos.com. IN TXT "v=spf1 ip4:XXX.XXX.XXX.XXX ~all"  ;サーバのグローバルIPアドレスを指定(メールサーバを構築する場合のみ)



外部向け逆引きゾーンデータベース(IPアドレスからドメイン名)の作成(固定IPアドレスでプロバイダから逆引き権限を委譲されている場合のみ)

外部向け逆引きゾーンデータベースを作成する。

sudo vi /var/named/SUBxxx.xxx.xxx.xxx.in-addr.arpa.db.wan


$TTL    86400
@       IN      SOA     ns1.centos.com.  root.centos.com.(
                                     2020010101 ; Serial
                                     7200       ; Refresh
                                     7200       ; Retry
                                     2419200    ; Expire
                                     86400 )    ; Minimum
       IN NS    ns1.centos.com.
xxx    IN PTR   centos.com.  ;サーバIPアドレス最下位部(xxx.xxx.xxx.xxx)とドメイン名を指定


※注意
ゾーン情報の変更時は、Serial行を年月日と通番2桁(yyyymmddxx)のようにして、必ず、変更前よりも大きな値に変更すること。
例えば、変更前のSerialが2020010101なら、変更後のSerialは2020010102にする。
これにより、後述するセカンダリ側へのゾーン情報の変更が正しく行われるようになる。


BINDの起動

sudo systemctl start named-chroot
sudo systemctl enable named-chroot



ファイヤーウォールのポート開放

CentOSのファイヤーウォールのポートを開放する。(TCP53番ポートとUDP53番ポート)

sudo firewall-cmd --add-service=DNS --parmanent
sudo firewall-cmd --reload



ルータのポート開放

ルータ側の設定で、TCP53番ポートとUDP53番ポートへのアクセスをDNSサーバ(CentOS)に転送するように設定する。

※注意
ルータのポート開放の設定は、各ルータのマニュアルを参照すること。