DNSサーバーとは何か？

## 目次
1. [はじめに](#はじめに)  
2. [DNSサーバーの基本概要](#dnsサーバーの基本概要)  
3. [DNSの仕組みと役割](#dnsの仕組みと役割)  
4. [DNSの種類](#dnsの種類)  
5. [DNSレコードの主な種類](#dnsレコードの主な種類)  
6. [DNSのセキュリティ上の注意点](#dnsのセキュリティ上の注意点)  
7. [DNSサーバーを選ぶときのポイント](#dnsサーバーを選ぶときのポイント)   
8. [参考リンク](#参考リンク)










## はじめに

インターネットでWebサイトを閲覧するとき、「**ドメイン名**」と呼ばれるわかりやすい文字列（例：`example.com`）を使います。しかし、実際にはコンピュータ同士がやり取りするには「**IPアドレス**」が必要になります。  この「ドメイン名」を「IPアドレス」へ変換（名前解決）する役割を担うのが、**DNSサーバー**です。

本記事では、DNSサーバーの概要や仕組み、種類、セキュリティ、選ぶときのポイントなどを解説していきます。  










## DNSサーバーの基本概要

### DNSとは？
- **Domain Name System（DNS）** は、ドメイン名をIPアドレスに変換するための仕組み。  
- ユーザーが「`www.example.com`」などのドメイン名でアクセスしやすいように、裏では「`93.184.216.34`」のような数字の列（IPアドレス）に変換している。  
- インターネットの基盤を支える重要な技術であり、Webサイトやメール、その他のネットワークサービスを利用するときに必ず通る「入り口」的存在。

### DNSサーバーの役割

#### 1. 名前解決（ドメイン名→IPアドレス）の実行

- **ドメイン名の利便性**  
  インターネット上で実際に通信する際は、ホスト（サーバー）の位置を表すIPアドレスが必要になります。しかし、人間にとっては長い数字の列（例：`192.0.2.1` など）を覚えるのは大変です。そこで「`www.example.com`」のような分かりやすい文字列を使い、それを機械が理解できるIPアドレスへ変換する仕組みを提供するのがDNSサーバーです。

- **問い合わせの流れ**  
  1. ユーザーがWebブラウザなどでドメイン名を入力  
  2. DNSリゾルバ（キャッシュDNSサーバー）やOSのキャッシュを参照  
  3. 未キャッシュの場合はルートDNSサーバー、TLD DNSサーバーを経由し、最終的にはそのドメインを管理する権威DNSサーバーに問い合わせ  
  4. 得られたIPアドレスがユーザーに返ってくる  

- **DNSがなければどうなる？**  
  もしDNSがなければ、ユーザーはIPアドレスを直接入力してサイトへアクセスする必要があります。これは覚えにくいうえ、サーバーのIPアドレス変更に伴う混乱も大きくなるでしょう。DNSがあることで、私たちは直感的な文字列（ドメイン名）でサイトやサービスにアクセスできるのです。


#### 2. キャッシュ機能による高速化

- **キャッシュとは？**  
  DNSサーバーは一度取得したドメインとIPアドレスの対応情報を一定時間保存（キャッシュ）します。キャッシュに保存しておくことで、同じドメイン名の再問い合わせが発生したとき、短時間で回答が返せるようになります。

- **TTL（Time To Live）の活用**  
  - キャッシュ情報には有効期限（TTL）が設定されます。  
  - 期限が切れるまではキャッシュを利用して高速応答が可能ですが、TTLが切れると改めて外部のDNSサーバーに問い合わせて最新の情報を取得します。  
  - 適切なTTLの設定により、アクセス性能と情報の新鮮さをバランス良く管理できます。

- **メリット**  
  1. **応答速度が速い**  
     - キャッシュがある場合は、わざわざ外部のDNSサーバーをたどらなくてもよい。  
  2. **ネットワーク負荷の軽減**  
     - 何度も同じ問い合わせを繰り返す必要がないため、全体としてのDNSサーバー負荷が下がる。

- **デメリット**  
  - キャッシュが残っているため、ドメインのIPアドレスを変更した場合に反映が遅れることがある。  
  - 不要になった情報をキャッシュし続けると、誤った情報を返すリスク（ただしTTLによって緩和される）。


#### 3. ドメイン情報の管理（権威DNSサーバーの場合）

- **権威DNSサーバーとは？**  
  あるドメイン（例：`example.com`）の正しいDNSレコードを保持し、「そのドメイン名はどのIPアドレスか」を最終的に答える責任を持つサーバーを「権威DNSサーバー（Authoritative DNS Server）」と呼びます。

- **ゾーン情報（ゾーンファイル）の保持**  
  - 権威DNSサーバーは自分の管理下にあるドメインのゾーンファイルを保持しており、そこには以下のような情報が含まれます。  
    - **Aレコード**（IPv4アドレスの指定）  
    - **AAAAレコード**（IPv6アドレスの指定）  
    - **MXレコード**（メールサーバー情報）  
    - **CNAMEレコード**（エイリアス設定）  
    - **TXTレコード**（任意のテキスト情報、SPFなど）  
    - **NSレコード**（Name Server情報）  
  - こうしたレコードを正確に管理・更新することで、ドメインに関するさまざまなアクセスが適切に処理されます。

- **プライマリDNSとセカンダリDNS**  
  - 一般的に、権威DNSサーバーは冗長構成をとり、メインのプライマリDNS（Primary DNS）と複数のセカンダリDNS（Secondary DNS）を運用します。  
  - ゾーン転送機能を使い、プライマリDNSの最新情報をセカンダリDNSへ複製することで、障害やトラフィック集中への耐性を高めています。

- **管理上の注意点**  
  - **ゾーン転送の制限**: 意図しない相手にゾーンファイルを渡さないように、アクセスを制限する。  
  - **TTL設定の調整**: 変更が必要な時期にはTTLを短めに設定しておくと、切り替えがスムーズになる。  
  - **セキュリティアップデート**: DNSソフトウェアのアップデートを怠ると、DNSキャッシュポイズニングなどの攻撃リスクが高まる。










## DNSの仕組みと役割

### DNS問い合わせの流れ
![スクリーンショット 2024-12-30 19.28.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2752598/610f09ba-9b27-cbe0-053f-455991c219af.png)
[参考リンク](https://www.geeksforgeeks.org/domain-name-system-dns-in-application-layer/)

下記の解説は、GeeksforGeeksが提示している図をもとに、DNS問い合わせの流れを番号順に細かく説明したものです。  
ユーザーが「`https://geeksforgeeks.org`」にアクセスする際、クライアント・DNSリゾルバ・ルートサーバー・TLDサーバー・権威DNSサーバー・実サーバーがどのようにやり取りをしているかを理解しやすくなります。


#### 1. クライアントからのアクセス要求

- **ユーザーの操作**:  
  PCやスマートフォンなどの端末のブラウザから「`https://geeksforgeeks.org`」にアクセスしようとする。
- **最初の確認**:  
  端末（OS）やブラウザはまず、ローカルキャッシュ（OSのDNSキャッシュやブラウザキャッシュ）を確認して、すでに`geeksforgeeks.org`のIPアドレスを知っているかどうかをチェックする。
- **ポイント**:  
  キャッシュがある場合は後続の問い合わせが不要となるが、今回はキャッシュがヒットしない想定で次のステップに進む。


#### 2. ローカルキャッシュ（OSキャッシュ、ルーターキャッシュ）の確認

- **ローカルキャッシュの仕組み**:  
  端末（OS）がDNS解決結果を一時的に保存している場合がある。さらに自宅やオフィスのルーターがDNS情報をキャッシュしていることもある。  
  ここでヒットすれば即座にIPアドレスを返して通信を完了できる。
- **キャッシュミス時**:  
  ローカルキャッシュに`geeksforgeeks.org`の情報がない場合、次のステップへ進む。


#### 3. ホストファイルの確認

- **ホストファイルとは**:  
  OSの設定ファイルの一種（Windowsなら`C:\Windows\System32\drivers\etc\hosts`、Linux/macOSなら`/etc/hosts`など）で、特定のドメイン名とIPアドレスの対応を強制的に記述できる仕組み。
- **ホストファイルにない場合**:  
  大半の一般ユーザーではホストファイルに独自設定をしていないため、この段階で何も見つからないケースが多い。  
  見つからなかった場合はリゾルバ（DNSサーバー）へ問い合わせが移る。



#### 4. DNSリゾルバがルートサーバーに問い合わせ

- **DNSリゾルバ（キャッシュDNSサーバー）**:  
  クライアントの設定によって指定されたDNSリゾルバ（ISPやGoogle Public DNS、Cloudflare DNSなど）が外部問い合わせを行う。  
  まだキャッシュされていないため、まずはルートDNSサーバーに「`.org`ドメインを管理するTLDサーバーはどこか？」と問い合わせる。
- **ルートDNSサーバーの役割**:  
  ルートサーバーは「**最上位の案内役**」であり、`.org`などのTLDを管理するDNSサーバーを紹介するだけ。  
  ここでは実際のIPアドレスは返さず、TLDサーバーのアドレスを返答する。


#### 5. ルートサーバーからの応答

- **TLDサーバーへの道案内**:  
  ルートサーバーは「`.org`を管理しているのは、このTLDサーバーだよ」という情報をDNSリゾルバに渡す。  
- **次のステップへの橋渡し**:  
  実際に`geeksforgeeks.org`の情報を持っているわけではなく、あくまで「次にどこを尋ねるべきか」を教える。


#### 6. 「権威DNSサーバーを教えてほしい」というリクエスト

- **TLDサーバーへ問い合わせ**:  
  リゾルバはルートサーバーから得たTLDサーバー（`.org`を管理するサーバー）に問い合わせを行う。  
  「`geeksforgeeks.org`の権威DNSサーバー（＝最終的に正解を知っているサーバー）はどこか？」と質問するイメージ。
- **TLDサーバーの役割**:  
  `.org`配下の各ドメインを管理する権威DNSサーバーがどこにあるのかを知っており、リゾルバにそれを提示する。


#### 7. TLDサーバーから権威DNSサーバーの情報取得

- **権威DNSサーバーを紹介**:  
  TLDサーバーは「`geeksforgeeks.org`のゾーンを管理しているのは、この権威DNSサーバーだよ」という情報を返す。
- **実際のIPアドレスはまだ得られない**:  
  ここまでは「階層的に次に問い合わせるDNSサーバー」を教えてもらうステップであり、まだ`geeksforgeeks.org`自体のIPアドレスはわからない。


#### 8. DNSリゾルバが権威DNSサーバーに問い合わせ

- **最終的な正解を持つサーバーへの問い合わせ**:  
  リゾルバがTLDサーバーから教えられた「`geeksforgeeks.org`の権威DNSサーバー」に対し、「`www.geeksforgeeks.org`のIPアドレスを教えてほしい」という問い合わせを送る。
- **ゾーンファイルの参照**:  
  権威DNSサーバーは、該当ドメインのゾーン情報（Aレコード、AAAAレコードなど）を正確に保持しているため、ここで初めて最終的なIPアドレスが取得できる。


#### 9. 権威DNSサーバーからの応答

- **Aレコード（IPv4）などの情報**:  
  権威DNSサーバーは「`www.geeksforgeeks.org` → `x.x.x.x`（IPアドレス）」という対応関係をリゾルバに返す。  
- **リゾルバのキャッシュ更新**:  
  リゾルバは、この回答を自分のキャッシュに一定時間（TTL）保存しておくことで、後続の問い合わせを高速化する。


#### 10. DNSリゾルバがクライアントへ応答

- **クライアントへの最終回答**:  
  リゾルバは、権威DNSサーバーから得たIPアドレスをクライアント（ブラウザ）に返答する。  
- **クライアントから見ると**:  
  「一度DNSリゾルバに問い合わせると、あとはまとめて最終的なIPアドレスが返ってくる」形になるため、これを**再帰問い合わせ**と呼ぶ（クライアントの視点）。


#### 11. クライアントが実サーバーにリクエスト送信

- **IPアドレスを使った通信**:  
  クライアント（ブラウザ）が`geeksforgeeks.org`に紐づく実際のIPアドレス（たとえば `93.184.216.34` など）に対して、HTTP/HTTPSリクエストを送る。  
- **Webサーバーとのやり取り開始**:  
  DNS解決が完了したことで、具体的なWebページ取得やAPIコールなどが行われ、ユーザーは目的のサイトを閲覧できるようになる。


#### 12. 実サーバーからの応答（Webページ取得）

- **Webページのデータ送信**:  
  実サーバーはクライアントからのリクエストを受け取り、WebページのHTMLやCSS、JavaScript、画像などのデータを返却する。
- **ユーザーのブラウザで表示**:  
  受け取ったデータをもとにブラウザは画面を描画し、ユーザーは「`https://geeksforgeeks.org`」のページを閲覧できるようになる。















## DNSの種類

DNSサーバーは、その役割によっていくつかに分類されます。

1. **ルートDNSサーバー**  
   - インターネット全体のドメイン空間の根本を担うサーバー。  
   - 全世界に13系統存在し、運用者も分散している。

2. **TLD（トップレベルドメイン）DNSサーバー**  
   - `.com`, `.org`, `.net` などのgTLDや、`.jp`, `.us` など国別ccTLDを管理するDNSサーバー。  
   - ルートDNSサーバーからの問い合わせに対して、各ドメインを管理している権威DNSサーバーを教える役割。

3. **権威DNSサーバー（Authoritative DNS Server）**  
   - 特定のドメイン（例：`example.com`）の正しいDNS情報（ゾーン情報）を持つサーバー。  
   - レコードの最終的な答えを返す。

4. **リゾルバ（キャッシュDNSサーバー）**  
   - クライアントから問い合わせを受け、必要に応じて外部のDNSサーバーへ問い合わせを行う。  
   - 得た情報をキャッシュして高速化する。












## DNSレコードの主な種類

DNSで管理される情報を「**DNSレコード**」と呼びます。代表的なものは以下の通りです。

- **Aレコード（Address record）**  
  ドメイン名をIPv4アドレスに紐付ける。  

- **AAAAレコード**  
  ドメイン名をIPv6アドレスに紐付ける。  

- **CNAMEレコード（Canonical Name record）**  
  別名（エイリアス）を正規のドメイン名に紐付ける。  

- **MXレコード（Mail Exchange record）**  
  ドメイン名のメールサーバーのホスト名を指定する。  

- **TXTレコード**  
  任意のテキスト情報を格納。SPF設定やドメイン所有証明などに利用される。  

- **NSレコード（Name Server record）**  
  そのドメインを管理するDNSサーバーを指定する。  

これらのレコードを適切に設定することで、Webサイトのアクセスやメールの送受信などが円滑に機能します。
















## DNSのセキュリティ上の注意点

DNSはインターネットの根幹を支える重要な仕組みであるがゆえに、攻撃の標的にもなりやすいです。以下のようなセキュリティ上の注意点があります。

1. **DNSキャッシュポイズニング**  
   - 攻撃者が偽のDNS応答をキャッシュDNSサーバーに送り込み、正規のドメイン名を不正なIPアドレスに誘導する攻撃。  
   - 対策として、DNSSEC（DNS Security Extensions）の導入や、ソフトウェアを常に最新に保つことが重要。

2. **DDoS攻撃（DNS Amplification Attack）**  
   - DNSの仕組みを悪用して、大量のトラフィックを特定のサーバーへ送り付ける攻撃。  
   - オープンリゾルバ化しないように設定し、レートリミットを導入する。

3. **ゾーン転送の制限**  
   - 権威DNSサーバーのゾーン転送がオープンな状態だと、外部にDNSレコードの詳細情報を渡してしまう危険がある。  
   - アクセス制御を行い、転送先DNSサーバーを限定する。

4. **DNS over HTTPS (DoH), DNS over TLS (DoT)**  
   - 通信を暗号化することでプライバシー保護や改ざん防止を図る技術。  
   - 一部のDNSプロバイダやWebブラウザが対応しており、今後も注目されている。










## DNSサーバーを選ぶときのポイント

1. **可用性と冗長構成**  
   - DNS障害を防ぐために、冗長化されたインフラを提供しているDNSプロバイダを選ぶ。  
   - 複数のリージョンにサーバーを設置しているかも重要。

2. **速度とパフォーマンス**  
   - レイテンシを下げ、クライアントに近いエッジサーバーを用意しているか確認。  
   - CloudflareやAWS Route53など、大規模CDNやクラウドが提供するDNSは、世界中に分散されたサーバーネットワークを持つ。

3. **セキュリティ機能**  
   - DNSSEC対応、DDoS緩和策などを提供しているプロバイダが望ましい。  
   - ゾーン転送や権限管理もチェックする。

4. **管理のしやすさ・運用コスト**  
   - DNSレコードの編集画面やAPIなど、運用管理のしやすさも考慮。  
   - 無料プランと有料プランの違い、サポート体制などを比較。






## 参考リンク

- **[Cloudflare - What is a DNS Server?](https://www.cloudflare.com/learning/dns/what-is-a-dns-server/)**  
- **[Fortinet - What is DNS?](https://www.fortinet.com/resources/cyberglossary/what-is-dns)**  
- **[NordVPN - DNSとは？](https://nordvpn.com/ja/blog/what-is-dns/)**  
- **[AWS Route53 - What is DNS?](https://aws.amazon.com/jp/route53/what-is-dns/)**  
- **[GeeksforGeeks - Domain Name System (DNS) in Application Layer](https://www.geeksforgeeks.org/domain-name-system-dns-in-application-layer/)**