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


# DNSサーバー実装の実践ガイド：動的更新とクライアントキャッシュ

## 1. Webサーバー連携設定

### 1.1 HTTPサーバーのインストールと基本設定
```bash
# Apache HTTPサーバーのインストール
sudo yum -y install httpd

# テスト用インデックスページの作成
echo "www.example.com" | sudo tee /var/www/html/index.html

# サービスの起動と自動起動設定
sudo systemctl enable --now httpd
```

**検証コマンド**：
```bash
curl -I http://localhost
```

## 2. クライアント側でのDNS設定

### 2.1 ネットワーク設定ファイルの編集
```bash
# CentOS/RHELの場合
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1="10.0.0.8"

# 設定の再読み込み
sudo nmcli con reload
sudo nmcli con up eth0
```

### 2.2 設定の確認
```bash
cat /etc/resolv.conf
# 期待される出力：
# nameserver 10.0.0.8
```

### 2.3 DNS解決のテスト
```bash
dig www.example.com +short
# 期待される出力：10.0.0.7

curl http://www.example.com
# 期待される出力：www.example.com
```

## 3. 動的DNS更新の実装

### 3.1 ゾーン設定の変更
```nginx
zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { any; };
};
```

### 3.2 必要な権限設定
```bash
sudo chmod 770 /var/named
sudo setsebool -P named_write_master_zones on
```

### 3.3 nsupdateコマンドによる動的更新
```bash
nsupdate
> server 127.0.0.1
> zone example.com
> update add ftp.example.com 86400 IN A 203.0.113.10
> send
> quit
```

**更新検証**：
```bash
dig ftp.example.com +short
# 期待される出力：203.0.113.10
```

## 4. DNSクライアントキャッシュの最適化

### 4.1 CentOS/RHELでの設定
```bash
# nscdのインストールと設定
sudo yum -y install nscd
sudo systemctl enable --now nscd

# キャッシュ統計の確認
sudo nscd -g | grep -A 5 "hosts cache"

# キャッシュのクリア
sudo nscd -i hosts
```

**主要統計指標**：
| 指標                | 説明                         |
|---------------------|------------------------------|
| cache hit rate      | キャッシュヒット率           |
| current cached      | 現在のキャッシュエントリ数   |
| maximum cached      | 最大キャッシュエントリ数     |

### 4.2 Ubuntuでの設定
```bash
# キャッシュステータスの確認
systemd-resolve --statistics

# キャッシュのクリア
sudo systemd-resolve --flush-caches
```

**systemd-resolvedの主な機能**：
- DNSSEC検証
- LLMNR/MDNSサポート
- 複数DNSサーバーのフェイルオーバー

## 5. トラブルシューティングチェックリスト

### 5.1 一般的な問題と解決策
| 現象                     | 確認ポイント                   | 解決方法                     |
|--------------------------|--------------------------------|------------------------------|
| 名前解決できない         | `dig +trace`の結果            | ファイアウォール設定確認     |
| ゾーン転送失敗           | マスタ/スレーブのシリアル番号 | シリアル番号のインクリメント |
| 動的更新が反映されない   | SELinuxコンテキスト           | `named_write_master_zones`設定|
| キャッシュがクリアされない| nscdサービスのステータス       | サービス再起動               |

### 5.2 ログ確認方法
```bash
# BINDログの確認
sudo tail -f /var/log/named.log

# システムログのフィルタリング
journalctl -u named --since "1 hour ago"
```

## 6. セキュリティベストプラクティス

### 6.1 推奨設定項目
1. TSIG鍵を使用したゾーン転送制限
2. 再帰問い合わせの制限
3. DNSSECの有効化
4. 定期的なゾーンファイルのバックアップ
5. 不要なDNS機能の無効化（例：version.bind問い合わせ）

```nginx
// セキュアなoptions設定例
options {
    allow-recursion { 192.168.0.0/24; };
    allow-transfer { none; };
    dnssec-validation auto;
    version "not disclosed";
};
```

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

### 7.1 キャッシュ設定の最適化
```nginx
options {
    max-cache-size 512M;
    max-cache-ttl 3600;    // 1時間
    min-cache-ttl 300;     // 5分
    cleaning-interval 60;  // 1分毎のキャッシュ掃除
};
```

### 7.2 スレッドプール設定
```nginx
options {
    listen-on port 53 { any; };
    coresize default;
    datasize default;
    stacksize default;
    max-ncache-ttl 10800;  // 3時間
};
```