DNS、CDNサービスの詳細解説(三)


# 1. BIND DNSサーバーの基本構成

## 1.1 BINDのインストール
主要ディストリビューションでのインストールコマンド：

```bash
# CentOS/RHEL
sudo yum install bind bind-utils

# Ubuntu/Debian
sudo apt install bind9 bind9-utils bind9-host
```

## 1.2 主要ファイル構成
| ファイル/ディレクトリ              | 説明                          |
|-----------------------------------|-------------------------------|
| /etc/named.conf                   | メイン設定ファイル            |
| /etc/named.rfc1912.zones          | ゾーン定義ファイル            |
| /var/named/                       | ゾーンファイル格納ディレクトリ|
| /usr/sbin/named                   | BINDデーモン実行ファイル      |
| /var/log/named.log                | ログファイル（デフォルト）    |

![BINDファイル構成図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/c0ac83db-9808-4958-a752-35ff3aafdfdb.png)

# 2. プライマリDNSサーバー設定手順

## 2.1 メイン設定ファイルの編集
```bash
sudo vim /etc/named.conf
```
変更ポイント：
```nginx
options {
    listen-on port 53 { any; };  // 全インターフェースでリッスン
    allow-query     { any; };     // 全クライアントからの問い合わせ許可
    dnssec-validation no;        // DNSSEC検証無効化（テスト環境用）
};
```

## 2.2 ゾーン定義の追加
```bash
sudo vim /etc/named.rfc1912.zones
```
追加例：
```nginx
zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { none; };
};
```

## 2.3 ゾーンファイルの作成
```bash
sudo cp -p /var/named/named.localhost /var/named/example.com.zone
sudo vim /var/named/example.com.zone
```

基本テンプレート：
```bind
$TTL 1D
@   IN SOA  ns1.example.com. admin.example.com. (
    2023082101  ; Serial
    3H          ; Refresh
    15M         ; Retry
    1W          ; Expire
    1D )        ; Minimum TTL

    NS  ns1.example.com.
    NS  ns2.example.com.

ns1     A   192.168.1.10
ns2     A   192.168.1.20
www     A   192.168.1.100
mail    MX 10 mail.example.com.
```

# 3. 設定検証とサービス起動

## 3.1 構文チェック
```bash
# メイン設定ファイル検証
sudo named-checkconf

# ゾーンファイル検証
sudo named-checkzone example.com /var/named/example.com.zone
```

## 3.2 サービス操作
```bash
# サービス起動
sudo systemctl start named

# 設定再読み込み
sudo rndc reload
# または
sudo systemctl reload named
```

# 4. 主要管理ツールの活用

## 4.1 digコマンド活用例
```bash
# 基本クエリ
dig example.com

# 詳細オプション付き
dig +trace +nodnssec example.com

# 逆引き確認
dig -x 192.168.1.100

# ゾーン転送シミュレーション
dig axfr example.com @localhost
```

## 4.2 rndc管理コマンド
| コマンド               | 機能                           |
|-----------------------|--------------------------------|
| rndc status           | サービス状態表示               |
| rndc reload           | 設定再読み込み                 |
| rndc querylog         | クエリログの有効化/無効化      |
| rndc flush            | キャッシュ消去                 |
| rndc stats            | 統計情報の出力                 |

# 5. 実践的な設定例：Webサーバー向けDNS

## 5.1 ネットワーク構成
```mermaid
graph TD
    Client -->|DNS Query| BIND_Server
    BIND_Server -->|Response| Client
    Client -->|HTTP Request| Web_Server
```

## 5.2 詳細設定手順
1. **基本Aレコード設定**
```bind
web01   A   203.0.113.10
web02   A   203.0.113.20
```

2. **ロードバランシング設定**
```bind
www     A   203.0.113.10
www     A   203.0.113.20
```

3. **フェイルオーバー設定**
```bind
        MX 10 primary-mail.example.com.
        MX 20 backup-mail.example.com.
```

## 5.3 高度な設定テクニック
**TTL最適化例**：
```bind
$TTL 300  ; 通常時5分
@ IN SOA ... (
    2023082101
    3H
    15M
    1W
    60 )       ; ネガティブキャッシュTTL
```

**CNAME使用時の注意点**：
- MXレコードとの併用不可
- 他のCNAMEを参照不可
- ゾーン頂点での使用不可

# 6. トラブルシューティングガイド

## 6.1 一般的なエラーと解決策
| エラーメッセージ           | 原因                     | 解決方法                   |
|---------------------------|--------------------------|----------------------------|
| SERVFAIL                   | 権威サーバー応答不可     | 再帰問い合わせの確認       |
| REFUSED                    | クエリ拒否               | ACL設定の見直し            |
| NXDOMAIN                   | ドメインが存在しない     | ゾーンファイルの確認       |
| FORMERR                    | パケットフォーマット異常 | クライアントソフト更新     |

## 6.2 デバッグ手順
1. クエリの基本確認
```bash
dig +short example.com
```
2. 再帰性問い合わせの追跡
```bash
dig +trace example.com
```
3. ログの確認
```bash
tail -f /var/log/named.log
```

# 7. セキュリティ強化設定

## 7.1 chroot環境の構築
```bash
sudo yum install bind-chroot
sudo systemctl restart named-chroot
```

## 7.2 TSIG鍵によるゾーン転送保護
```bash
# 鍵生成
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST example-transfer

# 設定ファイル追記
key "example-transfer" {
    algorithm hmac-sha512;
    secret "xxxxxxxxxxxxxxxxxxxx==";
};
```

# 8. パフォーマンスチューニング

## 8.1 キャッシュ最適化
```nginx
options {
    max-cache-size 512M;
    max-cache-ttl 3600;
    min-cache-ttl 300;
};
```

## 8.2 スレッド設定
```nginx
options {
    listen-on-v6 { any; };
    coresize default;
    datasize default;
    stacksize default;
    max-ncache-ttl 10800;
    cleaning-interval 60;
};
```