DNSの仕組みと設計
DNS(Domain Name System)は、ドメイン名とIPアドレスを相互に変換する分散データベースシステムです。この記事では、DNSの動作原理から設計・セキュリティまでを整理します。
DNSの役割
Section titled “DNSの役割”DNSの階層構造
Section titled “DNSの階層構造”| レベル | 説明 | 例 |
|---|---|---|
| ルート | 最上位、「.」で表記 | . |
| TLD | トップレベルドメイン | .com, .jp, .org |
| SLD | セカンドレベルドメイン | example.com |
| ホスト名 | 個別のホスト | www.example.com |
DNSサーバーの種類
Section titled “DNSサーバーの種類”| 種類 | 役割 | 特徴 |
|---|---|---|
| プライマリDNS | ゾーン情報の原本を保持 | ゾーンファイルを直接管理 |
| セカンダリDNS | プライマリのコピーを保持 | ゾーン転送で同期 |
| フルリゾルバ | 再帰問い合わせを処理 | キャッシュ機能あり |
| フォワーダ | 他のDNSへ転送 | 自身では解決しない |
名前解決の流れ
Section titled “名前解決の流れ”再帰クエリと反復クエリ
Section titled “再帰クエリと反復クエリ”クエリの種類
Section titled “クエリの種類”DNSレコードタイプ
Section titled “DNSレコードタイプ”| レコード | 用途 | 例 |
|---|---|---|
| Aレコード | ホスト名→IPv4 | www IN A 192.168.1.1 |
| AAAAレコード | ホスト名→IPv6 | www IN AAAA 2001:db8::1 |
| CNAME | 別名の定義 | blog IN CNAME www |
| MXレコード | メールサーバー指定 | @ IN MX 10 mail.example.com |
| NSレコード | ネームサーバー指定 | @ IN NS ns1.example.com |
| TXTレコード | テキスト情報 | @ IN TXT “v=spf1 …” |
| PTRレコード | 逆引き(IP→名前) | 1 IN PTR www.example.com |
| SOAレコード | ゾーンの管理情報 | シリアル番号、更新間隔など |
| SRVレコード | サービスの場所 | _ldap._tcp IN SRV … |
MXレコードの優先度
Section titled “MXレコードの優先度”ポイント: 優先度の数値が小さいほど優先される
AXFR と IXFR
Section titled “AXFR と IXFR”ゾーン転送のトリガー
Section titled “ゾーン転送のトリガー”SOAレコードの構成
Section titled “SOAレコードの構成”| フィールド | 説明 | 典型値 |
|---|---|---|
| SERIAL | 変更を示す番号(増加させる) | YYYYMMDDnn |
| REFRESH | セカンダリの確認間隔 | 3600(1時間) |
| RETRY | 確認失敗時の再試行間隔 | 600(10分) |
| EXPIRE | プライマリ不達時の有効期限 | 604800(1週間) |
| MINIMUM | ネガティブキャッシュのTTL | 3600(1時間) |
DNSキャッシュとTTL
Section titled “DNSキャッシュとTTL”TTL設計のポイント:
DNSセキュリティ
Section titled “DNSセキュリティ”キャッシュポイズニング
Section titled “キャッシュポイズニング”- ソースポートのランダム化: 予測困難にする
- トランザクションIDのランダム化: 予測困難にする
- DNSSEC: 電子署名による応答の検証
- レートリミット: 攻撃の抑制
DNSSEC
Section titled “DNSSEC”DNS設計のベストプラクティス
Section titled “DNS設計のベストプラクティス”内部DNS/外部DNS分離
Section titled “内部DNS/外部DNS分離”スプリットDNSのメリット:
- 内部サーバー情報を外部に公開しない
- 内部では詳細な名前解決が可能
- セキュリティの向上
DNSレコード設計例
Section titled “DNSレコード設計例”; SOAレコードexample.com. IN SOA ns1.example.com. admin.example.com. ( 2024011801 ; シリアル番号 3600 ; リフレッシュ(1時間) 600 ; リトライ(10分) 604800 ; 有効期限(1週間) 3600 ; ネガティブキャッシュTTL)
; NSレコードexample.com. IN NS ns1.example.com.example.com. IN NS ns2.example.com.
; Aレコードns1 IN A 192.168.1.10ns2 IN A 192.168.1.11www IN A 192.168.1.100mail IN A 192.168.1.50
; MXレコード@ IN MX 10 mail.example.com.@ IN MX 20 mail2.example.com.
; CNAMEレコードblog IN CNAME www
; TXTレコード(SPF)@ IN TXT "v=spf1 mx ip4:192.168.1.0/24 -all"試験対策のポイント
Section titled “試験対策のポイント”-
クエリの種類を理解する
- 再帰クエリ: クライアント→キャッシュDNS
- 反復クエリ: キャッシュDNS→各権威DNS
-
レコードタイプを正確に覚える
- A: IPv4、AAAA: IPv6
- MX: メール(優先度は小さいほど優先)
- CNAME: 他のAレコードのエイリアス
-
ゾーン転送の仕組み
- AXFR: 全体転送、IXFR: 差分転送
- NOTIFYによるプッシュ通知
-
セキュリティ対策
- DNSSECの仕組み(ZSK, KSK, RRSIG, DS)
- キャッシュポイズニングの原理と対策
-
設計パターン
- プライマリ/セカンダリの冗長構成
- スプリットDNSによる内外分離