見出し画像

【Linux】 DNSの設定

作業ログ

DNS

用語

「DNS」とは、ホスト名とIPアドレスとの名前解決(ドメイン名(ホスト名))とIPアドレスとの結び付け)を行う機能、あるいは、サーバのこと。

ゾーン
自ら管理するドメインの範囲。ドメイン名に関する正当な情報を持ち、管理できる状態にあることを「権威を持つ」と呼ぶ。ゾーンの一部の管理を分割して、他の管理者に任せることができることを「委任」と呼ぶ。

マスターDNSサーバ
多重化する際に扱うゾーンデータのマスターを管理。

スレーブDNSサーバ
ゾーンデータをコピーして機能するサーバ。マスターからスレーブへデータをコピーすることを転送という。


BIND (Berkeley Internet Name Domain)の設定

インストール

yum -y install bind bind-chroot bind-utils

bind → BIND本体
bind-chroot → BINDをchroot化するため
bind-utils → digなどのDNS関連コマンドを使用するため

Linux OSにDNSを導入する時に使用するソフトウェア。DNS 権威サーバー、もしくは キャッシュ DNS サーバーとして機能する。設定ファイルは/etc/named.conf

書式

<ステートメント> [<パラメータ>] {
  <サブステートメント>
};

ステートメント
 options
  named の基本的な設定
 logging   BIND のログ出力方法を設定
 zone   ゾーンデータベースの種類とゾーンファイルを設定
 include   指定したファイルを追加の設定ファイルとして読み込む
 acl アクセス制御リストを定義。特定のIPアドレスやホスト名、ネットワークなどを許可/拒否することができる。

設定例

options

options {
    directory "/var/named";  #DNSサーバーが使用するワーキングディレクトリを指定
    listen-on { 127.0.0.1; };  #DNSサーバーがクエリを受け付けるIPアドレスを指定
    allow-query { any; };  #どのネットワークからの問い合わせも受ける
    allow-recursion { 127.0.0.1; };  #再帰問い合わせを許可するIPアドレスやネットワークを指定
    recursion yes;  #再帰問い合わせの許可
    forward first;  #forwarder に問い合わせし、解決しなければローカルに問い合わせる
    forward only;  #forwarder のみに問い合わせしてローカルサーバで解決しない
    forwarders {
        8.8.8.8;
        8.8.4.4;  #DNSサーバーが持たないゾーンは、 (8.8.8.8、8.8.4.4) に転送
};

logging

logging {
    channel default_log {
        file "/var/log/named/named.log" versions 3 size 5m;  # ファイルは最大5MBで、3世代保持
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel query_log {
        file "/var/log/named/query.log" versions 2 size 10m;
        severity debug;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

   # システムログ(syslog)に警告レベルのメッセージを送信
    channel syslog_log {
        syslog daemon;
        severity warning;
    };

   # defaultカテゴリのメッセージはdefault_logチャンネルに出力
   # queriesカテゴリのメッセージはquery_logチャンネルに出力
   # securityカテゴリのメッセージはsyslog_logチャンネルに出力
    category default { default_log; };
    category queries { query_log; };
    category security { syslog_log; };
};
  1. logging: ロギングの設定を開始。

  2. channel: ログ出力の方法や場所を定義。

  3. file: ログを出力するファイル名とパスを指定。

  4. severity: ログの重要度(レベル)を指定。

  5. print-category: カテゴリ情報をログに含める。

  6. print-severity: 重要度情報をログに含める。

  7. print-time: タイムスタンプをログに含める。

  8. category: ログの種類(カテゴリ)を指定。

  9. syslog: システムログにメッセージを送信。

  10. null: ログ出力を無効化。


zone

マスター、スレーブ共に使える設定

zone "example.com" IN {  #「example.com」というゾーンに関する設定
    type slave;         
    file "example.com.zone";  
    masters { 192.0.2.1; };   
    allow-transfer { 192.0.2.1; 192.0.3.0/24; };  
   notify yes; 
   also-notify { 192.168.1.3; }; 
   forwarders { 8.8.8.8; }; 
   check-names warn;
  1. type master; - ゾーンがマスターゾーンであることを指定。

  2. type slave; - ゾーンがスレーブゾーンであることを指定。

  3. file "example.com.zone"; - ゾーンファイルのパスを指定。

  4. allow-query { any; }; - すべてのクライアントからのクエリを許可。

  5. allow-transfer { 192.168.1.2; }; - ゾーン転送を特定のIPアドレスに制限。

  6. masters { 192.168.1.1; }; - スレーブゾーンに対してマスターサーバーのIPアドレスを指定。

  7. notify yes; - ゾーン情報が更新されたときにスレーブサーバーに通知を送信。

  8. also-notify { 192.168.1.3; }; - ゾーン情報が更新されたときに追加で通知を受け取るサーバーのIPアドレスを指定。

  9. forwarders { 8.8.8.8; }; - フォワーディング先のDNSサーバーのIPアドレスを指定。

  10. check-names warn; - ゾーンファイル内の名前検証に関する動作を設定。


include

include "/etc/named/zones.conf";  
#/etc/named/zones.confというファイルを読み込んで設定を適用

acl

acl "blocked" {
    192.0.2.0/24;
    192.0.3.0/24;
};

options {
    ...
    allow-query { any; };
    deny-query { blocked; };
  allow-transfer { trusted; };
};
# "blocked"という名前のACLに含まれている192.0.2.0/24、
# 192.0.3.0/24のアドレスからのクエリは、拒否され、
# それ以外のアドレスからのクエリは許可される

# 許可する場合
options {
    ...
    allow-query { blocked; };
    deny-query { any; };
};

# ゾーンごとのACL設定
zone "example.com" {
    type master;
    file "/var/named/example.com.zone";
    allow-transfer { blocked };
};


名前解決のコマンド

dig

dig [@server] {OP} [domain] [quere] [class]
NSサーバーに対してクエリを発行するためのコマンド
  -t:クエリの種類を指定。A、AAAA、MX、NSなどが指定できます。
 -c:クエリのクラスを指定。IN(Internet)が指定できます。
 -x:クエリをIPアドレスで行う。
 -h:ヘルプを表示。

$ dig -t A example.com
$ dig -c IN example.com
$ dig -x 192.0.2.1
$ dig -h

host

host [OP] [ホスト名/ドメイン名/IPアドレス] [問い合わせ先DNSサーバ] 
-a : DNS情報をすべて表示します。
 -t : DNS情報の種類を指定します。(A,MX,NSなど)
 -v : 詳細なログを出力します。
 -4 : IPv4アドレスのみを使用します。
 -6 : IPv6アドレスのみを使用します。

host 8.8.8.8
・ドメイン名からIPアドレスを検索する

host google.com
・特定のDNSサーバーを使用して検索する

host -t MX example.com 8.8.8.8
・特定のタイプのレコードのみを検索する

host -t A example.comCNAME(別名)レコードを検索する

host -t CNAME example.com

nslookup

nslookup  [OP] [ホスト名]
-type=TYPE : 指定されたタイプのレコードを検索します。
 -query=TYPE : 同上
 -class=CLASS : 指定されたクラスのレコードを検索します。
 -server=SERVER : 指定されたDNSサーバーに問い合わせます。
 -port=PORT : 指定されたポート番号で問い合わせます。

指定したDNSサーバーから情報を取得する
nslookup -server=8.8.8.8 example.com

特定のポート番号でDNSサーバーに問い合わせる:
nslookup -port=53 example.com

MXレコードを検索する:
nslookup -type=mx example.com

ゾーン転送の設定を行う
nslookup -type=ns example.com

ステータスコードを取得する
nslookup -query=ANY example.com


ゾーンファイル

自分の管理する範囲内におけるIPアドレスとドメイン名の対応が書いてあるファイルのこと

リソースレコード

 SOA:ゾーンの管理情報を記述
 NS:ゾーンに対する権威を持つサーバーのドメイン名を指定
 MX:メールサーバを記述
 A:ドメイン名に対するIPv4アドレスを指定
 AAAA:ドメイン名に対するIPv6アドレスを指定
 CNAME:ドメイン名に付けた別名(あだ名)が書かれた行
 PTR:IPアドレスに対するドメイン名を指定(逆引きDNSで使用)

設定例

【ドメイン名】 【クラス名】 SOA 【DNSサーバのドメイン名】 【連絡先】 

@ IN SOA ns1.example.com. admin.example.com. (
  2017022700 ; serial   #【シリアル番号任意の10桁】
  3600       ; refresh  # セカンダリサーバーへのゾーン情報の転送間隔
  1800       ; retry    # リトライ間隔
  604800     ; expire   # リフレッシュが失敗している時のセカンダリサーバの有効時間
  86400      ; minimum  # ネガティブキャッシュの有効期限(存在しないドメイン名に対して「存在しない」という情報)
)


【ドメイン名】 IN NS 【DNSサーバ名】

# example.comドメインに対応する名前サーバーを
# ns1.example.comns2.example.comに設定する
example.com. IN NS ns1.example.com.
example.com. IN NS ns2.example.com.

# サブドメインの設定
sub.example.com. IN NS ns1.example.com.


【ドメイン名】 IN MX 【優先度】 【配達先メールサーバ】

# example.comドメインのメールサーバーを
# mx1.example.commx2.example.comに設定する。数字は優先順位。
example.com. IN MX 10 mx1.example.com.
example.com. IN MX 20 mx2.example.com.

# サブドメインの設定
sub.example.com. IN MX 10 mx1.example.com.


【ドメイン名】 IN A 【IPアドレス】

# example.comドメインに対応するIPアドレスを192.0.2.1と192.0.2.2に設定する
example.com. IN A 192.0.2.1
example.com. IN A 192.0.2.2

# サブドメインの設定
sub.example.com. IN A 192.0.2.2


【ドメイン名】 IN AAAA 【IPアドレス】

# example.comドメインに対応するIPv6アドレスを2001:db8::1と2001:db8::2に設定する
example.com. IN AAAA 2001:db8::1
example.com. IN AAAA 2001:db8::2

# サブドメインの設定
sub.example.com. IN AAAA 2001:db8::2


【別名】 IN CNAME 【元のドメイン名】

# example.comドメインの別名としてwww.example.comftp.example.comを指定する
www.example.com. IN CNAME example.com.
ftp.example.com. IN CNAME example.com.

# example.comドメインのサブドメイン sub.example.comの別名としてsub.example.com.mydomain.comを指定する
sub.example.com.mydomain.com. IN CNAME sub.example.com.


【逆引き用IPアドレス】 IN PTR 【ドメイン名】

/var/named/3.168.192.in-addr.arpa.zoneなどの逆引き用のゾーンファイルを作成し、/etc/named.confファイルにゾーンの設定を書き入れる。

/var/named/3.168.192.in-addr.arpa.zone
---------------------------------------------------------------
#IPアドレス192.168.3に対応するドメイン名をexample.comに設定する:
(IP addrの第四オクテッド) IN PTR example.com.
1    IN PTR example.com.
100   IN PTR example.com.

# IPアドレス2001:0db8:85a3:0000:0000:8a2e:0370:7334に
# 対応するドメイン名をexample.comに設定する
4.3.7.0.3.e.a.8.5.a.3.8.b.d.0.1.0.0.2.ip6.arpa IN PTR example.com
---------------------------------------------------------------



vi /etc/named.conf
---------------------------------------------------------------
zone "3.168.192.in-addr.arpa" IN {
     type master;
     file "/var/named/3.168.192.in-addr.arpa.zone";
     allow-update { none; };
 };




NTPサーバー から上位NTPサーバー への 再帰問い合わせの例


よろしければサポートお願いします!よりいい情報を発信します。