🌐

DNS基礎

に公開

DNS概要

DNS (Domain Name System) は、インターネット上で人間に読みやすいドメイン名とコンピュータが理解できるIPアドレスを相互変換するための階層的かつ分散的なデータベースシステム

IPアドレス

IPアドレスは、インターネット上の各デバイスやサーバーを一意に識別するための32ビット(IPv4)または128ビット(IPv6)の数値アドレスで、ネットワーク通信における「住所」の役割を果たす

ドメイン名とは

インターネット上のリソースやサービスを特定するための、人間が理解しやすい文字列形式のアドレス
コンピューターは数値のIPアドレス(例:192.0.2.1)で通信しますが、人間にとってこれらの数字を記憶することは困難なため、ドメイン名は、この問題を解決するために作られた

ドメイン名の役割

  • 記憶の容易さ: example.com192.0.2.1のようにユーザーが記憶しやすい名前を選択
  • ブランドアイデンティティ: 組織やサービスの識別に使用して整合性が取りやすい
  • 柔軟性: IPアドレスが変更されてもドメイン名は同じまま
  • SEO効果: 検索エンジン最適化への影響
  • 階層的構造: インターネット全体の組織化されたアドレッシング
  • 多言語対応: 国際化ドメイン名(IDN)の検討

ドメイン名の制限事項・購入ポイント

  • 長さ: 全体で253文字以内、各ラベルは63文字以内
  • 文字: 英数字とハイフン(先頭末尾以外)
  • 予約語: 特定の文字列は使用不可
  • ドメイン名は「購入」するものではなく、一定期間の使用権を取得
  • レジストラ(登録業者)を通じて登録手続きを行う
  • 通常1年単位で契約し、更新が必要

ドメイン・サブドメイン例

  • mozilla.org - Mozilla組織のメインサイト
  • google.com - Googleのメインサイト
  • github.com - GitHubプラットフォーム
  • developer.mozilla.org - Mozilla開発者向けドキュメント
  • support.mozilla.org - Mozillaサポートページ
  • mail.google.com - Gmailサービス
  • docs.github.com - GitHub文書

ドメインの構造

ドメイン名は、ドット(.)で区切られた複数のラベルで構成され、右から左に読む

ドメイン名 = ホスト名 + ドメイン + ルートドメイン

www.example.com.
│   │      │   └── (.)ルートドメイン(省略されがちだが、存在する)
│   │      └── トップレベルドメイン(TLD)
│   └── セカンドレベルドメイン(SLD)
└── ホスト名

省略されるため忘れがちですが、ドメイン名の末尾には必ず「.」ルートドメインが存在
ホスト名が最後に付随されるドメイン名もある

最上位にルートドメイン(.)が存在し、その直下に各階層ごとにドメインが階層構造にある

引用: https://lpi.or.jp/lpic_all/linux/network/network07.shtml

ルートサーバではjpcomなど、一番上のドメイン名のDNSサーバーがインターネット上のどの位置にあるか(つまり、どのIPアドレスなのか)を管理
ルートドメインの直下にあるドメイン群はTLD(トップレベルドメイン),その次がSLD(セカンドドメイン)と続く

各要素の詳細

汎用トップレベルドメイン(Generic TLD)

  • .com - 商業用(最も一般的)
  • .org - 組織・非営利団体
  • .net - ネットワーク関連
  • .info - 情報サイト
  • .biz - ビジネス用
  • .name - 個人用

国別トップレベルドメイン(Country Code TLD)

  • .jp - 日本
  • .us - アメリカ合衆国
  • .uk - イギリス
  • .fr - フランス
  • .de - ドイツ
  • .cn - 中国

制限付きTLD・新しいgTLD(New Generic TLD)

  • .gov - 政府機関専用
  • .edu - 教育機関専用
  • .mil - 軍事関連専用
  • .tech - 技術関連
  • .shop - ショッピング
  • .blog - ブログ
  • .app - アプリケーション

セカンドレベルドメイン(SLD)

  • 組織名やサービス名を表す部分
  • 登録者が選択できる部分
  • ブランディングの重要な要素

DNS名前解決プロセス

クライアント(例:Webブラウザ)が、特定のドメイン名(例:example.com)にアクセス

  1. クライアントのデバイスでキャッシュがないかチェック
    1. ローカルブラウザのキャッシュをチェック
    2. ローカルOSのDNSキャッシュを確認
  2. クライアントがDNSリゾルバーにリクエスト
    1. クライアントは設定されたDNSリゾルバーにドメイン名の問い合わせ
    2. DNSリゾルバーは自身のキャッシュを確認し情報がある場合は、そのIPアドレスをクライアントに返し、情報がない場合は次に進む
  3. DNSリゾルバーがルートサーバーにリクエスト
    1. DNSリゾルバーは、ルートネームサーバーに問い合わせを行い、対象のTLD(例:.com)のネームサーバー情報(アドレス情報など)を取得
  4. DNSリゾルバーがTLDサーバーにリクエスト
    1. 取得したTLDネームサーバー(例:.comのネームサーバー)に問い合わせを行い、対象のセカンドレベルドメイン(例:example.com)のネームサーバー情報を取得
  5. 権威ネームサーバーでIPアドレスを取得
    1. DNSリゾルバーは、取得したセカンドレベルドメインのネームサーバー(例:example.comのネームサーバー)に問い合わせを行い、ドメイン名に対応するIPアドレスを取得
  6. 結果をクライアントに返却
    1. DNSリゾルバーは、取得したIPアドレスをクライアントに返す
    2. クライアントは、取得したIPアドレスに対して接続を開始し、Webサーバーからコンテンツを取得して表示

名前解決に必要なサーバー

  1. DNSリカーシブリゾルバー
  2. ルートネームサーバー
  3. TLDネームサーバー
  4. 権威ネームサーバー

DNSの名前解決の一連は以下の流れ

引用: https://www.cloudflare.com/ja-jp/learning/dns/what-is-dns/

1. DNSリカーシブリゾルバー

クライアントからのドメイン名解決のリクエストを受け取り、ドメイン名に対応するIPアドレスを取得するために、DNS階層を横断してクエリを行うサーバー
通常インターネットサービスプロバイダ(ISP)や企業ネットワーク内のDNSサーバによって提供

リカーシブリゾルバの主な機能は以下の通り

  • クライアントからのDNSリクエストを受け取る
  • 自身のキャッシュを確認し、以前に解決したドメイン名の情報があれば、キャッシュからIPアドレスを返す
  • キャッシュに情報がない場合ルートネームサーバから始めて、TLDネームサーバ、ドメインのネームサーバと順に問い合わせを行い、最終的にドメイン名に対応するIPアドレスを取得
  • 取得したIPアドレスをクライアントに返す

2. ルートサーバー

DNSルートサーバは、インターネットで利用されるDNSにおいて、ツリー構造の起点となるサー
バー
ルートゾーンには、com、org、jp、arpaなどのトップレベルドメイン(TLD)の参照情報が書かれており、具体的にそれぞれのTLDを受け持つDNSサーバがどんな名前であるか、どのようなIPアドレスを持っているか、といった情報が記載
DNSクライアントはその情報を元にして、次に問い合わせるべきDNSサーバを把握

3. TLDネームサーバー

TLDネームサーバーは、特定のトップレベルドメイン(.com、.org、.jpなど)のDNS情報を管理し、その下位のセカンドレベルドメインの権威ネームサーバ情報を提供するサーバー群です。

TLDネームサーバは、各トップレベルドメイン(例:.com.org.net.jp など)に関連付けられており、そのドメイン内のセカンドレベルドメイン(例:example.com)のネームサーバ情報を提供

4. 権威ネームサーバ

特定のドメインに関する最終的な権威あるDNS情報を管理し、そのドメインのDNSレコード(A、AAAA、MXなど)を提供するネームサーバー
DNSの階層構造の名前解決を全てたどり完全なドメインを管理するネームサーバで、階層構造の一番下に位置します。

DNSのキャッシング

クライアントからのリクエストに対する迅速な名前解決のため、いくつかのキャッシングが存在
DNSには、大きく分けて下記の二種類のキャッシングが存在

DNSサーバー自身のキャッシュ

過去のDNS情報をキャッシュに保存しておくことで、同じ問い合わせに対しては、上位(権威のある)のDNS に問い合わせを行う必要なく、キャッシュ保存された情報から回答できる

  • キャッシュサーバー
    • 特定のドメインを管理せず、キャッシュによる回答のみ専用に行うDNSサーバー
  • ゾーンサーバー
    • ドメイン(ゾーン)を管理するサーバー

ブラウザのDNSキャッシュ

最新のWebブラウザ(chrome等)では、デフォルトでDNSレコードを一定時間キャッシュする
DNSレコードの要求が行われると、最初にチェックする場所はブラウザのキャッシュになる

DNSのゾーンについて

DNSデータを管理する単位ないしは範囲のことであり、ドメイン名とIPアドレスの対応関係を管理するための重要な概念
ゾーンはドメイン管理権限が与えられた組織や個人が、ドメインのDNS情報(ドメイン名、サブドメイン名、IPアドレスなど)を管理するために使用

DNSゾーンの管理は、ドメイン登録業者やDNSホスティングサービスにより行われるため
ドメイン所有者は、サービスを通じて、自分のドメインに関連するDNS情報を更新したり、新しいサブドメインを追加できる

構成

  • ゾーンの起点となるドメイン名
  • ドメイン名に関連するサブドメイン名
  • ドメイン名とサブドメイン名に関連するリソースレコード
    • リソースレコードには、AレコードやAAAAレコード、CNAMEレコードなどがある
  • SOA(Start of Authority)レコード
    • ゾーンの権威情報を示すレコードで、ゾーンの管理者情報やゾーンファイルのシリアル番号、リフレッシュ間隔、再試行間隔、キャッシュの有効期限など
  • NS(Name Server)レコード
    • ゾーンを管理するネームサーバの情報を示すレコード

DNSレコード

DNSレコードは、ドメイン名とIPアドレスの対応関係を示す情報を含むデータのことで、DNSレコードは権威ネームサーバによって管理
各ドメイン名には、ドメイン名を管理する権威ネームサーバが割り当てられるため、
ドメイン名に対応するIPアドレスを取得するためには、ドメイン名を管理する権威ネームサーバに問い合わせる必要がある

権威ネームサーバは、ドメイン名とIPアドレスの対応情報を管理するサーバー
権威ネームサーバは、ドメイン名をクライアントから受け取り、関連付けられた情報(ドメイン名に対応するIPアドレスや、メールサーバ(MXレコード)など)を提供

DNSレコードの種類

レコード名 説明
A IPv4アドレスにマッピングを保持するレコード
AAAA IPv6アドレスにマッピングを保有するレコード
CNAME ドメイン・サブドメインを別ドメインに転送するがIPアドレスは提供しない
別名(エイリアス)設定
MX メールサーバーにメールを送信
NS DNSエントリのネームサーバーを格納
SOA ドメインに関するゾーンの権威情報を格納
TXT 管理者がレコードにテキスト情報(SPF、DKIM、検証用)を登録できる
SRV サービス固有の情報を指定
PTR リバースルックアップ(逆引き)で逆引き(IPからドメイン名)を提供
CAA SSL証明書発行権限
DNSKEY DNSSEC公開鍵
DS DNSSEC委任署名者
DNSレコードとは? | Cloudflare

セキュリティ

脅威

  1. DNSハイジャック: ドメイン設定の不正変更
  2. キャッシュポイズニング: 偽の情報でキャッシュを汚染
  3. DNSスプーフィング: 偽のIPアドレスに誘導
  4. DDoS攻撃: DNSサーバーへの大量アクセス
  5. タイポスクワッティング: 類似ドメインでの詐欺

対策

DNSSEC(DNS Security Extensions)

  • 目的: DNS応答の真正性と完全性を保証
  • 仕組み: デジタル署名による検証
  • 利点: 中間者攻撃やキャッシュポイズニングを防止
  • 課題: 設定の複雑さと管理コスト

DNS over HTTPS(DoH)/DNS over TLS(DoT)

  • DoH: HTTPS経由でDNSクエリを暗号化
  • DoT: 専用ポート(853)でTLS暗号化
  • 利点: プライバシー保護とセキュリティ向上
  • 対応: Chrome、Firefox、Safariで対応済み

レジストラレベルのセキュリティ

  • レジストラロック: ドメイン移管の制限
  • 2FA: 多要素認証の有効化
  • 通知設定: 変更時のアラート設定
  • WHOIS保護: 個人情報の非公開化

補足情報

国際化ドメイン名(IDN)

  • 定義: ASCII以外の文字を使用したドメイン名
  • 技術: Punycode形式でエンコード
  • : 日本語.jp → xn--wgv71a119e.jp
  • 利点: 各国語での直感的なドメイン名
  • 課題: フィッシング攻撃への悪用、技術的複雑さ

パフォーマンス最適化

  1. Anycast: 複数の地理的場所からサービス提供
  2. DNS負荷分散: 複数のIPアドレスでトラフィック分散
  3. CDN統合: コンテンツ配信ネットワークとの連携
  4. キャッシュ戦略: 適切なTTL設定

TTL(Time To Live)

  • 定義: DNSレコードのキャッシュ有効期限
  • 影響: 変更の反映速度とサーバー負荷のバランス
  • 設定: 通常300秒(5分)から86400秒(24時間)
  • 戦略: 変更予定時は短く、安定時は長く設定

参考資料

公式ドキュメント・標準

技術解説・学習資料

Cloudflare技術資料

実践的ツール

Discussion