「設定 - Bind(SUSE)」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == DNSサーバ(BIND)は、suse.comというドメイン名からIPアドレスを返したり、IPアドレスからドメイン名を返すサーバである。<br> <br> 内部向けDNSサーバは、LANにあるサーバまたはクライアントPCにアクセスする時、IPアドレスではなくsuse.com等のドメイン名を入力してアクセスできるようにするDNSサーバである。<br> 外部向けDNSサーバは、WANにあるサ…」)
 
22行目: 22行目:
<br><br>
<br><br>


== BINDの設定 ==
== BINDの設定 : 内部向けDNSの場合 ==
BINDの設定ファイルを編集する。<br>
BINDの設定ファイルを編集する。<br>
  sudo vi /etc/named.conf
  sudo vi /etc/named.conf
<br>
<br>
  options {
  options {
        # 全てListenする場合
    ...
        #listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; };
   
   
        # IPv6を使用しない
    # 内部向けDNSサーバの管理外の問合せ先
        #listen-on-v6 port 53 { ::1; };
    #forwarders { 192.0.2.1; 192.0.2.2; };
        listen-on-v6 { none; };
    forwarders { 192.168.1.1; };
   
   
        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; };          ← 追加(ゾーン情報の転送を禁止)
   
   
        ...省略
    # 全てListenする場合 (未設定でもよい)
    #listen-on port 53 { 127.0.0.1; };
    listen-on port 53 { any; };
   
   
        recursion yes;                     ← 再帰問合せ機能を有効化(内部DNSサーバとして動作)
    # IPv6を使用しない場合
    #listen-on-v6 { any; };
    listen-on-v6 { none; };
   
   
        # 問い合わせを許可する範囲を指定
    ...
        # 以下の例では、LAN(192.168.1.*)からのみ問い合わせを許可している
        # allow-query    { localhost; };
        allow-query    { localhost; 192.168.1.0/24; };
   
   
        # 内部からのみ再帰問合せを許可
    # 問い合わせを許可する範囲を指定
        # allow-recursion { localhost; };
    # 以下の例では、LAN(192.168.1.*)からのみ問い合わせを許可している
        allow-recursion { localhost; localnets; };
    #allow-query { 127.0.0.1; };
    allow-query { 127.0.0.1; 192.168.1.0/24; };
        # ゾーン情報の転送を許可する範囲(セカンダリDNSがいればその場所/範囲)
        # allow-query-cache { localhost; };
        allow-query-cache { localhost; 192.168.1.0/24; };
        # 本DNSサーバ管理外の問合せ先
        forwarders{ 192.168.1.1; };
        ...省略
   
   
    ...略
  };
  };
   
   
  logging {
  ...略
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
        category lame-servers { null; }; ← 追加(error (connection refused) resolvingというエラーログの出力抑止)
};
   
   
  # 内部向けDNSの設定
  # コメントアウトする
  view "internal" {
  #include "/etc/named.conf.include";
        match-clients {
          localhost;
          192.168.1.0/24;
        };
   
   
        match-destinations {
...略
          192.168.1.0/24;
 
        };
# 内部向けDNSサーバのゾーンの設定 (追加)
   
# 192.168.1.* の正引き
        zone "." IN {
  zone "suse.com" {
          type hint;
    type master;
          file "named.ca";
    file "suse.db";
        };
        include "/etc/named.d/named.rfc1912.zones";
        include "/etc/named.d/named.root.key";
        include "/var/lib/named/named.suse.com.zone";
  };
  };
   
   
  # 外部向けDNSの設定(固定IPアドレスの場合のみ)
  # 192.168.1.* の逆引き
  view "external" {
  zone "1.168.192.in-addr.arpa" {
        match-clients {
    type master;
          any;
    file "1.168.192.in-addr.arpa.db";
        };
        match-destinations {
          any;
        };
        include "/var/lib/named/named.centos.com.zone.wan";
  };
  };
<br>
<br>
suse.comの内部向けゾーン定義ファイルを作成する。<br>
suse.comの内部向けゾーン定義ファイルを作成する。<br>
sudo vi /var/lib/named/named.suse.com.zone
以下の例に記述しているXXやYY等のIPアドレスを、該当するクライアントPCのIPアドレスに変更すること。<br>
<br>
<br>
  zone "suse.com" {
内部向けDNSサーバの正引きするためのゾーンファイルを作成する。<br>
        type master;
  sudo vi /var/lib/named/suse.db
        file "suse.com.db";
<br>
  };
# /var/lib/named/suse.dbファイル
$TTL 86400
@      IN SOA ns.suse.com.    root.suse.com. (
                                      2022041001 ; Serial  例. 作成年月日 + 01(連番)を記述する
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400      ; Minimum TTL
  )
   
   
  zone "1.168.192.in-addr.arpa" {
  @      IN NS ns.suse.com. ;
        type master;
ns      IN A 192.168.1.XX  ; 内部向けDNSサーバのIPアドレス
        file "1.168.192.in-addr.arpa.db";
pc1    IN A 192.168.1.YY  ; クライアントPC 1
  };
pc2    IN A 192.168.1.ZZ  ; クライアントPC 2
  pc3    IN A 192.168.1.AA  ; クライアントPC 3
<br>
<br>
suse.comの外部向けゾーン定義ファイルを作成する。(固定IPアドレスの場合のみ)<br>
内部向けDNSサーバの逆引きするためのゾーンファイルを作成する。<br>
  sudo vi /etc/named/named.suse.com.zone.wan
  sudo vi /var/lib/named/1.168.192.in-addr.arpa.db
<br>
<br>
  # 正引き設定
  # /var/lib/named/1.168.192.in-addr.arpa.dbファイル
  zone "suse.com" {
         type master;
$TTL 86400    ;
         file "suse.com.db.wan";
  @  IN SOA ns.suse.com.    root.suse.com. (
                        2022041001 ; Serial  例. 作成年月日 + 01(連番)を記述する
                        3H        ; Refresh
                        1H         ; Retry
                        1W         ; Expire
                        1D )      ; Minimum
   
   
        allow-query {
    IN NS  ns.suse.com.  ;
          any;
    IN PTR suse.com.    ;
        };
    IN A 255.255.255.0  ;
};
   
   
  # 逆引き設定(プロバイダから逆引き権限を委譲されている場合のみ)
  XX    IN PTR ns.suse.com.  ; 内部向けDNSサーバのIPアドレス
  zone "SUBxxx.xxx.xxx.xxx.in-addr.arpa" {
  YY    IN PTR pc1.suse.com. ; クライアントPC 1
        type master;
ZZ    IN PTR pc2.suse.com. ; クライアントPC 2
        file "SUBxxx.xxx.xxx.xxx.in-addr.arpa.db.wan";
AA    IN PTR pc3.suse.com.  ; クライアントPC 3
        allow-query { any; };
  };
<br>
<br>
IPv4のみ有効にする。(error (network unreachable) resolvingというエラーログの出力を抑止する)<br>
設定ファイルが正常に記述されているかどうかを確認する。<br>
  sudo echo OPTIONS="-4" >> /etc/sysconfig/named
  sudo named-checkconf
<br><br>
<br><br>



2022年4月11日 (月) 11:12時点における版

概要

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

内部向けDNSサーバは、LANにあるサーバまたはクライアントPCにアクセスする時、IPアドレスではなくsuse.com等のドメイン名を入力してアクセスできるようにするDNSサーバである。
外部向けDNSサーバは、WANにあるサーバまたはクライアントPCにアクセスする時、自ドメイン名からIPアドレスへの変換(名前解決)を行なうようにするDNSサーバである。

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

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


BINDのインストール

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

# 内部向けDNSサーバを構築する場合
sudo zypper install bind bind-utils

# 外部向けDNSサーバを構築する場合
sudo zypper install bind bind-utils bind-chrootenv



BINDの設定 : 内部向けDNSの場合

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

sudo vi /etc/named.conf


options {
    ...略

    # 内部向けDNSサーバの管理外の問合せ先
    #forwarders { 192.0.2.1; 192.0.2.2; };
    forwarders { 192.168.1.1; };

    ...略

    # 全てListenする場合 (未設定でもよい)
    #listen-on port 53 { 127.0.0.1; };
    listen-on port 53 { any; };

    # IPv6を使用しない場合
    #listen-on-v6 { any; };
    listen-on-v6 { none; };

    ...略

    # 問い合わせを許可する範囲を指定
    # 以下の例では、LAN(192.168.1.*)からのみ問い合わせを許可している
    #allow-query { 127.0.0.1; };
    allow-query { 127.0.0.1; 192.168.1.0/24; };

    ...略
};

...略

# コメントアウトする
#include "/etc/named.conf.include";

...略
 
# 内部向けDNSサーバのゾーンの設定 (追加)
# 192.168.1.* の正引き
zone "suse.com" {
    type master;
    file "suse.db";
};

# 192.168.1.* の逆引き
zone "1.168.192.in-addr.arpa" {
    type master;
    file "1.168.192.in-addr.arpa.db";
};


suse.comの内部向けゾーン定義ファイルを作成する。
以下の例に記述しているXXやYY等のIPアドレスを、該当するクライアントPCのIPアドレスに変更すること。

内部向けDNSサーバの正引きするためのゾーンファイルを作成する。

sudo vi /var/lib/named/suse.db


# /var/lib/named/suse.dbファイル

$TTL 86400

@      IN SOA ns.suse.com.    root.suse.com. (
                                     2022041001 ; Serial  例. 作成年月日 + 01(連番)を記述する
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400      ; Minimum TTL
)

@       IN NS ns.suse.com. ;
ns      IN A 192.168.1.XX  ; 内部向けDNSサーバのIPアドレス
pc1     IN A 192.168.1.YY  ; クライアントPC 1
pc2     IN A 192.168.1.ZZ  ; クライアントPC 2
pc3     IN A 192.168.1.AA  ; クライアントPC 3


内部向けDNSサーバの逆引きするためのゾーンファイルを作成する。

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


# /var/lib/named/1.168.192.in-addr.arpa.dbファイル

$TTL 86400    ;

@   IN SOA ns.suse.com.    root.suse.com. (
                       2022041001 ; Serial   例. 作成年月日 + 01(連番)を記述する
                       3H         ; Refresh
                       1H         ; Retry
                       1W         ; Expire
                       1D )       ; Minimum

   IN NS  ns.suse.com.  ;
   IN PTR suse.com.     ;
   IN A 255.255.255.0   ;

XX     IN PTR ns.suse.com.   ; 内部向けDNSサーバのIPアドレス
YY     IN PTR pc1.suse.com.  ; クライアントPC 1
ZZ     IN PTR pc2.suse.com.  ; クライアントPC 2
AA     IN PTR pc3.suse.com.  ; クライアントPC 3


設定ファイルが正常に記述されているかどうかを確認する。

sudo named-checkconf



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

ルートゾーンは、世界に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.(
                                     2020010101 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
        IN NS    centos.com.
        IN MX 10 centos.com.
@       IN A     192.168.1.30  ;サーバのプライベートIPアドレスを指定(centos.com用)
*       IN A     192.168.1.30  ;サーバのプライベート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.(
                                     2020010101 ; 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)に転送するように設定する。

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