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



# DNSサービス関連の核心概念と技術実装

## 2. DNSサーバーの種類と動作原理

### 2.1 DNSサーバーの分類
| タイプ           | 役割                             | 特徴                     |
|------------------|----------------------------------|--------------------------|
| プライマリDNS     | オリジナルゾーンデータを保持      | 書き込み可能             |
| セカンダリDNS     | ゾーン転送でデータを複製          | 読み取り専用             |
| キャッシュDNS     | クエリ結果を一時保存              | フォワーダ機能を併用     |

#### 2.1.1 プライマリDNSの特徴
- ゾーンファイルの排他的管理
- SOAレコード内でシリアル番号管理
- ゾーン情報の更新権限を持つ

#### 2.1.2 セカンダリDNSの同期メカニズム
```bash
# named.conf設定例
zone "example.com" {
    type slave;
    masters { 192.168.1.10; };
    file "slaves/example.com.zone";
};
```

**同期パラメータ**：
- リフレッシュ間隔（推奨：2時間）
- リトライ間隔（推奨：10分）
- 有効期限（推奨：1週間）
- 通知メカニズム（NOTIFY）

### 2.2 ゾーン転送の方式比較
| 方式       | 転送データ量 | ネットワーク負荷 | 使用シナリオ         |
|------------|-------------|------------------|----------------------|
| フル転送   | 大          | 高               | 初回同期時           |
| 増分転送   | 小          | 低               | 定期的な更新時       |

### 2.3 正引き/逆引きの仕組み
```bash
# 正引きクエリ例
dig www.example.com

# 逆引きクエリ例
dig -x 192.168.1.1
```

## 3. リソースレコードの詳細解説

### 3.1 主要RRタイプ一覧
| タイプ  | 用途                     | 例                           |
|---------|--------------------------|------------------------------|
| SOA     | ゾーン権限情報           | example.com. IN SOA ...      |
| NS      | ネームサーバー指定       | example.com. IN NS ns1       |
| A       | IPv4アドレスマッピング   | www IN A 192.168.1.1         |
| AAAA    | IPv6アドレスマッピング   | www IN AAAA 2001:db8::1       |
| CNAME   | エイリアス設定           | ftp IN CNAME www             |
| MX      | メールサーバー指定       | example.com. IN MX 10 mail    |
| TXT     | テキスト情報             | example.com. IN TXT "v=spf1..." |

### 3.2 SOAレコード詳細設定
```bash
$ORIGIN example.com.
@  IN  SOA  ns1.example.com. admin.example.com. (
    2023082001  ; シリアル番号
    7200        ; リフレッシュ間隔（2時間）
    900         ; リトライ間隔（15分）
    1209600     ; 有効期限（2週間）
    3600        ; ネガティブキャッシュTTL（1時間）
)
```

**パラメータ解説**：
- シリアル番号：32bit整数（YYYYMMDDNN形式推奨）
- 管理メールアドレス：`admin.example.com` → `admin@example.com`

### 3.3 MXレコードの優先度設定
```bash
@       IN  MX  10  mail1
@       IN  MX  20  mail2
mail1   IN  A       203.0.113.5
mail2   IN  A       198.51.100.10
```

**ポイント**：
- 優先度数値が小さい方が高優先
- フェイルオーバー構成に有効
- SPFレコードとの連携必須

## 4. 高度なDNS設定テクニック

### 4.1 サブドメイン委任の実装
```bash
# 親ドメイン設定
sub IN NS ns1.sub.example.com.
sub IN NS ns2.sub.example.com.
ns1.sub IN A 192.168.2.10
ns2.sub IN A 192.168.2.20

# 子ドメイン設定
$ORIGIN sub.example.com.
@ IN SOA ns1.sub admin.sub (
    2023082001
    3600
    900
    604800
    1800
)
```

**Glue Recordの重要性**：
- 委任チェーンの切断防止
- 再帰問い合わせの効率化
- DNSSEC署名連携の基盤

### 4.2 動的DNS更新
```bash
# TSIG鍵生成
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST ddns-key

# 更新リクエスト例
nsupdate -k Kddns-key.+163+12345.key
> server 192.168.1.10
> update add newhost.example.com. 3600 A 192.168.1.100
> send
```

## 5. 実践的なトラブルシューティング

### 5.1 キャッシュ管理コマンド
```bash
# Windows
ipconfig /flushdns

# Linux
systemctl restart nscd
rndc flush
```

### 5.2 ゾーン転送検証
```bash
dig AXFR example.com @ns1.example.com
```

**セキュリティ対策**：
- TSIGによる認証
- ACL制限
- TCPのみ許可

## 6. クラウド時代のDNS技術

### 6.1 HTTPDNSの仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/21927227-8a03-45c1-bc7b-b3f7cde2d934.png)



**従来DNSとの比較**：
| 項目           | 従来DNS               | HTTPDNS               |
|----------------|-----------------------|-----------------------|
| プロトコル      | UDP 53                | HTTP/HTTPS 80/443     |
| レイテンシ      | 100-300ms             | 30-100ms              |
| セキュリティ    | DNSSECが必要          | TLSで暗号化           |
| ロードバランシング| DNSラウンドロビン    | 精密なALB連携         |

### 6.2 主要クラウドプロバイダのDNS機能
| プロバイダ   | 特徴                             | 代表機能                     |
|------------|----------------------------------|-----------------------------|
| AWS        | Route 53 エイリアスレコード      | レイテンシーベースルーティング |
| Azure      | Traffic Manager連携             | 地理ルーティング              |
| GCP        | Cloud DNS + Load Balancing       | グローバルエニーキャスト      |

## 7. よくある課題と解決策

### 7.1 TTL設定のベストプラクティス
```bash
# 変更前（通常運用）
$TTL 86400

# メンテナンス時（事前設定）
$TTL 300
```

**注意点**：
- 変更反映には新旧TTLの最大値が必要
- DNSSEC署名の更新周期と連動
- CDNキャッシュの考慮

### 7.2 マルチベンダーDNS運用
```bash
# ベンダー間委任設定例
@ IN NS ns1.cloud-provider.com.
@ IN NS ns2.on-premise.example.
```

**リスク管理**：
- ベンダーロックイン回避
- フェイルオーバー戦略
- 監視システムの統合

## 8. セキュリティ強化の実装

### 8.1 DNSSEC導入例
```bash
# 鍵生成
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com

# ゾーン署名
dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o example.com -t example.com.zone
```

### 8.2 DoH/DoT設定
```bash
# Cloudflare DoHエンドポイント
https://cloudflare-dns.com/dns-query

# Unbound設定例
server:
  tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt"
forward-zone:
  name: "."
  forward-addr: 1.1.1.1@853#cloudflare-dns.com
```