【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; };
};
logging: ロギングの設定を開始。
channel: ログ出力の方法や場所を定義。
file: ログを出力するファイル名とパスを指定。
severity: ログの重要度(レベル)を指定。
print-category: カテゴリ情報をログに含める。
print-severity: 重要度情報をログに含める。
print-time: タイムスタンプをログに含める。
category: ログの種類(カテゴリ)を指定。
syslog: システムログにメッセージを送信。
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;
type master; - ゾーンがマスターゾーンであることを指定。
type slave; - ゾーンがスレーブゾーンであることを指定。
file "example.com.zone"; - ゾーンファイルのパスを指定。
allow-query { any; }; - すべてのクライアントからのクエリを許可。
allow-transfer { 192.168.1.2; }; - ゾーン転送を特定のIPアドレスに制限。
masters { 192.168.1.1; }; - スレーブゾーンに対してマスターサーバーのIPアドレスを指定。
notify yes; - ゾーン情報が更新されたときにスレーブサーバーに通知を送信。
also-notify { 192.168.1.3; }; - ゾーン情報が更新されたときに追加で通知を受け取るサーバーのIPアドレスを指定。
forwarders { 8.8.8.8; }; - フォワーディング先のDNSサーバーのIPアドレスを指定。
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.com
・CNAME(別名)レコードを検索する
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.comとns2.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.comとmx2.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.com、ftp.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; };
};