サーバの構築

サーバの構築手順

DNSサーバの構築

必要なパッケージのインストール

ターミナル
sudo apt install bind9 dnsutils
named -v # バージョン確認

設定ファイルの場所を確認

ターミナル
cat /etc/bind/named.conf
出力
include "/etc/bind/named.conf.options";         // bindの設定
include "/etc/bind/named.conf.local";           // 正引き逆引きの参照ファイルの設定
include "/etc/bind/named.conf.default-zones";   // デフォルト設定 (変更しない)

bind9の設定

ターミナル
sudo nano /etc/bind/named.conf.options

エディタ
//======================================
// /etc/named.conf.options
//======================================
// optionsでDNS全般の設定をします.

options {
    directory "/var/cache/bind";
    version "unknown";          //BINDのバージョン情報を公開しない
    listen-on port 53 {
        127.0.0.1;
        192.168.10.99;          // DNSサーバのIPアドレス
    };

    listen-on-v6 { ::1; };

    allow-query {               // 問合せ
        localhost;
        192.168.10.0/24;
    };

    forwarders {
        1.1.1.1;
        8.8.8.8;
    };
    forward first;
    dnssec-validation auto;

    recursion yes;           // 再帰検索要求
    allow-recursion {
        127.0.0.1;
        192.168.10.0/24;
    };
};

参照ファイルの設定

ターミナル
sudo nano /etc/bind/named.conf.local

エディタ
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

// file : /var/cache/bind/...

// 正引き(ドメイン : lan)設定
zone "lan"{
    type master;
    file "raspi3b.zone"; // 正引きファイル : /var/cache/bind/raspi3b.zone を参照
};

// 逆引き設定(ネットワークアドレス : 192.168.10.0)
zone "10.168.192.in-addr.arpa"{
    type master;
    file "raspi3b.rev"; // 逆引きファイル : /var/cache/bind/raspi3b.rev を参照
};

正引き設定

ターミナル
sudo nano /var/cache/bind/raspi3b.zone

エディタ
$TTL 3600
@ IN SOA raspi3b.lan. root.raspi3b.lan. (
    06010000   ; serial (毎回変更すること推奨)
    3H         ; refresh
    15M        ; retry
    1W         ; expire
    1H )       ; minimum

            IN      NS      raspi3b.lan.
            IN      A       192.168.10.99
www         IN      CNAME   raspi3b.lan.
raspi3b     IN      A       192.168.10.99
gateway     IN      A       192.168.10.1

逆引き設定

ターミナル
sudo nano /var/cache/bind/raspi3b.rev

エディタ
$TTL 3600
@ IN SOA raspi3b.lan. root.raspi3b.lan. (
    0601000000 ; serial (毎回変更すること推奨)
    3H         ; refresh
    15M        ; retry
    1W         ; expire
    1H )       ; minimum

            IN      NS      raspi3b.lan.
99          IN      PTR     raspi3b.lan.
1           IN      PTR     gateway.lan.

設定ミスが無いか確認

ターミナル
named-checkconf                                                     # 設定ファイルの構文チェック
named-checkzone lan /var/cache/bind/raspi3b.zone                    # 正引き確認
named-checkzone 10.168.192.in-addr.arpa /var/cache/bind/raspi3b.rev # 逆引き確認

DNSサーバを再起動

ターミナル
sudo systemctl restart bind9
sudo systemctl status bind9 # 状態確認

DNSサーバについて

用語 概要 再帰問い合わせ 権威応答
オープンリゾルバ 外部の不特定多数からの再帰問い合わせに応答するキャッシュサーバ
DNSリフレクション/増幅攻撃の踏み台に悪用される可能性あり
ACLで問い合わせ元を制限して防ぐ
受け付ける(問題) ✕
スタブリゾルバ
リゾルバ(クライアント側)
OSやアプリに組み込まれた簡易リゾルバ
自身では名前解決を行わず、キャッシュサーバへ再帰問い合わせ(RDビット=1)を依頼する

  • Linuxの /etc/resolv.conf
  • Windowsのネットワーク設定
で参照先を指定する
依頼する側 ✕
キャッシュサーバ
フルサービスリゾルバ
再帰サーバ
DNSキャッシュサーバ
スタブリゾルバの代わりにルートから順にたどって名前解決(反復問い合わせ)を行い、結果をTTLの間キャッシュする
  • BIND(named)
  • Unbound
  • PowerDNS Recursor
など
社内/ISP内など限定された範囲に提供する
受け付ける ✕
ゾーンサーバ
コンテンツサーバ
権威DNSサーバ
権威サーバ
自分が管理するゾーンのデータを保持し、そのゾーンについて権威ある応答(AAビット=1)を返す
プライマリ(マスタ)とセカンダリ(スレーブ)で冗長化し、ゾーン転送(AXFR/IXFR)で同期する
受け付けない 〇

DNSレコード

レコード Type 名称 フィールド・種別 説明・注意点 主な用途 記述例
A 1 Address IPv4アドレス(32bit) 同一名に複数登録するとDNSラウンドロビンになる ホスト名からIPv4アドレスへの正引き
www 3600 IN A 192.0.2.1
AAAA 28 IPv6 Address IPv6アドレス(128bit)
(RFC 3596)
Aと同様に複数登録で分散できる ホスト名からIPv6アドレスへの正引き
www 3600 IN AAAA 2001:db8::1
CNAME 5 Canonical Name 正規名
(別名の指す先のドメイン名)
  • ゾーンの頂点(apex)には置けない
  • 同じ名前に他のレコードと共存できない
  • NS・MXの指す先にしてはならない
  • ホスト名の別名定義
  • CDN・SaaSへの向き先設定
blog 3600 IN CNAME www.example.com.
MX 15 Mail Exchanger PRIORITY(優先度)
16bit整数
  • 数値が小さいほど優先される
  • 同値なら分散される
  • 例: 10
ドメイン宛メールの配送先指定
@ 3600 IN MX [PRIORITY] [HOSTNAME]
HOSTNAME
(メールサーバのホスト名)
  • A/AAAAを持つホスト名とし、CNAMEにしない
  • 例: mail.example.com.
NS 2 Name Server 権威サーバのホスト名
  • 親ゾーン側に委任用のNSが必要
  • NS名がゾーン内にある場合はグルーレコードも必要
  • ゾーンの権威サーバの宣言
  • サブドメインの委任
@ 86400 IN NS ns1.example.com.
SOA 6 Start of Authority MNAME
  • プライマリゾーンサーバのホスト名
  • 例: ns1.example.com.
  • ゾーンの起点
  • ゾーンに必ず1つだけ存在する
  • ゾーン転送やキャッシュ期間の制御
@ IN SOA [MNAME] [RNAME] (
    [SERIAL]
    [REFRESH]
    [RETRY]
    [EXPIRE]
    [MINIMUM] )
RNAME
  • 管理者のメールアドレス
    (@ を . に置換して表記)
  • 例: root.example.com.
SERIAL
  • ゾーンのバージョン番号
  • ゾーン変更時に増やし、セカンダリが更新を検知する
  • 毎回変更すること推奨
    (例: 2026092901)
REFRESH
  • セカンダリがプライマリの更新を確認する間隔[秒]
  • 例: 3600
RETRY
  • REFRESHの確認に失敗した際の再試行間隔[秒]
  • 例: 900
EXPIRE
  • 確認できない状態が続いた際、セカンダリがゾーンを無効とするまでの時間[秒]
  • 例: 604800
MINIMUM
  • ネガティブキャッシュのTTL[秒](RFC 2308)
  • 例: 300
PTR 12 Pointer ドメイン名
  • 逆引きゾーン
    • in-addr.arpa
    • ip6.arpa
    に置く
  • 権限はIPアドレスの割り当て元(ISPなど)にある
  • メールサーバでは正引きと逆引きの一致が求められることが多い
IPアドレスからホスト名への逆引き
1.2.0.192.in-addr.arpa. IN PTR www.example.com.
TXT 16 Text 一般(任意のテキスト)
  • 1文字列あたり255バイトまで
  • 長い値(DKIM鍵など)は分割して複数の文字列で記述する
ドメイン所有確認など
@ 3600 IN TXT "site-verification=abc123"
SPF 送信を許可するサーバの指定(ドメイン名 @ に設定)
@ IN TXT "v=spf1 ip4:192.0.2.0/24 -all"
DKIM 電子署名を検証する公開鍵(セレクタ._domainkey に設定)
sel1._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGf..."
DMARC SPF/DKIM失敗時の扱いとレポート先(_dmarc に設定)
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
OPT 41 Option NAME
  • 通常のRRではドメイン名
  • OPTでは常にルート(.)
  • EDNS(0)(RFC 6891)によるDNSメッセージの拡張
  • 大きなUDPサイズやDNSSEC対応の通知など
  • 実メッセージの追加セクションにのみ現れる疑似レコードで、1メッセージに最大1つ

ゾーンファイルには記述しない。dig での表示形式:

; EDNS: version: [VERSION], flags: [FLAGS]; udp: [UDP_SIZE]
TYPE 41
CLASS
  • 通常のRRではクラス(IN等)
  • OPTでは要求元が受信可能なUDPペイロードサイズ([UDP_SIZE])
TTL
  • 通常のRRではキャッシュ時間
  • OPTでは
    • 拡張RCODEの上位8bit
    • EDNSバージョン([VERSION])
    • フラグ([FLAGS]
    • DOビット
    など
RDATA オプションコード+データの列(ECS、Cookie、パディングなど)
CAA 257 Certification Authority Authorization flags
  • 通常は 0
  • 128 は未知のタグを理解できないCAに発行を拒否させる(critical)
  • ドメインに対して証明書を発行してよい認証局(CA)の制限(RFC 8659)
  • 該当ドメインになければ親ドメインへたどって評価される
@ 3600 IN CAA [flags] [tag] "[value]"
tag
  • issue(発行許可CA)
  • issuewild
    (ワイルドカード証明書)
  • iodef(違反時の通知先)
value
  • タグに対応する値
    • CAのドメイン名
    • 通知先URL
    など
  • 例: letsencrypt.org

DNSの関連技術

用語 概要
DDNS
Dynamic DNS
動的DNS
IPアドレスが変わるホストのレコードを自動で更新する仕組み
DNS UPDATE(RFC 2136)や、事業者提供の更新APIで実現する
家庭用回線・DHCP環境で利用
変更を早く反映するためTTLを短く設定することが多い
DNSラウンドロビン
ラウンドロビンDNS
同一の名前に複数のA/AAAAレコードを登録し、応答の順序を入れ替えることでアクセスを分散する簡易負荷分散
ヘルスチェックがなく、障害ノードにも振り分けられる
キャッシュの影響で均等に分散されないことがある
DNSSEC DNSの応答にデジタル署名を付け、応答の改ざんやなりすまし(キャッシュポイズニング)を検知できるようにする拡張仕様(RFC 4033〜4035)
  • 署名(RRSIG)
  • 公開鍵(DNSKEY)
  • 親ゾーンに登録する鍵のハッシュ(DS)
によりルートから続く信頼の連鎖で検証する
検証はキャッシュサーバ側で行われ、検証に成功するとADビットが立つ
通信の暗号化(盗聴防止)は行わない