設定 - Bind(SUSE)

提供:MochiuWiki : SUSE, EC, PCB
2024年12月26日 (木) 09:01時点におけるWiki (トーク | 投稿記録)による版 (→‎ルータのポート開放)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

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

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

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

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


DNSのレコード

レコードタイプ 説明 DNS定義ファイル等での定義例
Aレコード A(Address)レコードは、IPv4でホスト名とIPアドレスの関連付けを定義するレコードである。 <ドメイン名> IN NS dns.sub.example.com.
AAAAレコード AAAAレコードは、IPv6でホスト名とIPアドレスの関連付けを定義するレコードである。 -
CNAMEレコード CNAMEレコードは、正規ホスト名に対する別名を定義するレコードである。
特定のホスト名のDNSレコードについて、別のホスト名のレコードを参照させる時に利用する。
www IN CNAME backup1.example.com.
MXレコード MXレコードは、対象ドメイン宛のメールの配送先(メールサーバ)のホスト名を定義するレコードである。 <ドメイン名> IN MX 10 mail.example.com.
NSレコード NSレコードとは、ゾーン情報を管理するネームサーバのサーバ名を定義するレコードである。 <ドメイン名> IN NS dns.sub.example.com.
TXT(SPF)レコード TXTレコードは、ホスト名に関連付けるテキスト情報(文字列)を定義するレコードである。
送信ドメイン認証の認証情報等を記述する。
www IN TXT "Please Dont Touch Me"



BINDのインストール

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

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

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



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

内部向け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";
};


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

この設定を有効にするには、外部向けDNSサーバを静的IPアドレスにする必要がある。

内部向けDNSサーバの正引きゾーンデータベースを作成する。
以下の例に記述しているXXやYY等のIPアドレスを、該当するクライアントPCのIPアドレスに変更すること。

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


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

$TTL 86400

; SOAレコード(権威DNSサーバが担当しているゾーン(管理する範囲)に関する情報)
@      IN SOA ns.suse.com.    root.suse.com. (
                                     2022041001 ; シリアル番号 例. 作成年月日 + 01(連番)を記述する
                                     28800      ; 更新チェックの間隔
                                     14400      ; リトライ間隔
                                     3600000    ; 問い合わせを諦める間隔
                                     86400      ; ネガティブキャッシュの有効期限
)

; NSレコード(管理の委託先のDNSサーバ名)
; 記述方法 : <対象のドメイン名> IN NS <対象のドメイン名を管理しているDNSサーバ名>
; メールサーバを指定する場合は、MXレコードを記述する
@      IN NS ns.suse.com.

; Aレコード(ドメイン名に対応するIPアドレス)
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

; CNAMEレコード(ドメイン名に別名を付ける)
; 記述方法 : <別名> IN CNAME <元のドメイン名>
subpc1 IN CNAME pc1

; DNSレコードは他にも、AAAAレコード、PTRレコード、HINFOレコード、WKSレコード、TXTレコード等がある


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

この設定を有効にするには、外部向けDNSサーバを静的IPアドレスにする必要がある。

内部向けDNSサーバの逆引きゾーンデータベースを作成する。
以下の例に記述しているXXやYY等のIPアドレスを、該当するクライアントPCのIPアドレスに変更すること。

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


内部向けDNSサーバの起動

内部向けDNSサーバを起動する。
併せて、ファイアーウォールのポート開放も行う。

sudo systemctl start named.service

sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload


内部向けDNSサーバの停止

内部向けDNSサーバを停止する。
併せて、ファイアーウォールのポートも閉じる。

sudo systemctl stop named.service

sudo firewall-cmd --permanent --remove-service=dns
sudo firewall-cmd --reload


クライアントPCの設定

まず、ドメイン検索の設定を行う。

  • KDEを使用している場合
    1. [KDEシステム設定]を起動して、[接続]を選択する。
    2. [接続]画面左の接続名を選択して、[接続]画面右の[IPv4]タブ - [DNSサーバ:]項目に内部向けDNSサーバのIPアドレスを追加する。
    3. 同様に、[接続]画面右の[IPv4]タブ - [検索ドメイン:]項目に内部向けDNSサーバのドメイン名を入力する。
      例えば、DNSサーバ名がns.suse.comの場合、suse.comと入力する。

  • リゾルバファイルを編集する場合
    /etc/resolv.confファイルにおいて、内部向けDNSサーバのドメイン名を入力する。
    例えば、DNSサーバ名がns.suse.comの場合、suse.comと入力する。
    sudo vi /etc/resolv.conf

    domain suse.com
    または
    search suse.com


次に、クライアントPCのネットワークを再起動する。

  • systemctlコマンドを使用する場合
    sudo systemctl restart NetworkManager
  • nmcliコマンドを使用する場合
    NetworkManagerの全てのインターフェイスを停止した後、それらを起動する。
    sudo nmcli networking off && sudo nmcli networking on

  • Linuxを再起動する場合
    sudo shutdown -r now


ドメイン名の正引きおよび逆引きの確認

内部向けDNSサーバと各クライアントPCの正引きおよび逆引きができるかどうかを確認する。

nslookup ns.suse.com   # 内部向けDNSサーバの正引き
nslookup pc1.suse.com  # クライアントPC 1の正引き
nslookup pc2.suse.com  # クライアントPC 2の正引き
nslookup pc3.suse.com  # クライアントPC 3の正引き

nslookup 192.168.1.XX  # 内部向けDNSサーバの逆引き
nslookup 192.168.1.YY  # クライアントPC 1の逆引き
nslookup 192.168.1.ZZ  # クライアントPC 2の逆引き
nslookup 192.168.1.AA  # クライアントPC 3の逆引き

# 再帰問い合わせが無効の場合(recursion項目がnoの場合)
dig @<該当PCのIPアドレス> <該当PCのドメイン名>
例1. dig @192.168.10.5 ns.suse.net
例2. dig @192.168.10.6 pc01.suse.net



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

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

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

まず、ルートゾーン(named.ca)を更新する。

dig . ns @198.41.0.4 +bufsize=1024 > /var/lib/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アドレス)

この設定を有効にするには、外部向けDNSサーバを静的IPアドレスにする必要がある。

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

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


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


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

この設定を有効にするには、外部向けDNSサーバを静的IPアドレスにして、プロバイダから逆引き権限を委譲されている必要がある。

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

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


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


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

外部向けDNSサーバの起動

外部向けDNSサーバを起動する。
併せて、ファイアーウォールのポート開放も行う。

sudo systemctl start named-chroot

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


外部向けDNSサーバの停止

外部向けDNSサーバを停止する。
併せて、ファイアーウォールのポートも閉じる。

sudo systemctl stop named-chroot

sudo firewall-cmd --parmanent --remove-service=dns
sudo firewall-cmd --reload


ルータのポート開放

ルータ側の設定で、TCP53番ポートおよびUDP53番ポートへのアクセスを外部向けDNSサーバに転送するように設定する。

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