DNSってなに?

勉強ノート

DNSとは?

一言で言うと?

  • インターネットの通信技術の一つ。
  • 通信1つ1つに割り振られた名前と番号を紐づけるシステムのこと。
  • DNSはDomain Name System」(ドメイン・ネーム・システム)の略。

仕組み

  • 名前解決  :ドメイン名をIPに変換する
  • 分散システム:通信は世の中で大量にあるため、すべてを管理せず、分散管理する仕組み。

詳しい知識

通信の歴史

DNSが登場するまでの歴史を理解しておきましょう。

初期のインターネット通信
もともと、インターネット上の通信には特定の管理システムがありませんでした。しかし、メールやネットワークサービスを効率的に利用するためには、通信を区別する必要がありました。これにより、通信の種類を区別するプロトコルの概念が生まれました。
番号管理(IPアドレス)
プロトコルによって通信の種類は区別できるようになりましたが、通信量の増加に伴い、どのコンピュータがどの通信を担当するかを明確にする必要が出てきました。そこで、IPアドレスという番号によって通信を管理する方式が採用されました。(IPv4とIPv6という2つの規格があります)
ドメイン名の登場
IPアドレスによる番号管理は通信の重複を防ぎましたが、IPアドレスは覚えにくいため、ユーザーにとって不便でした。そこで、通信にわかりやすいドメイン名を付ける考えが生まれました。これにより、人間にとって覚えやすく、管理もしやすい方式になりました。
HOSTS.txtの時代
初期には、各コンピュータが「HOSTS.txt」というファイルにIPアドレスとドメイン名を手動でメモし、それを使って通信先を特定していました。しかし、インターネットの普及に伴い、通信の数が膨大になり、手動でリストを管理することは次第に難しくなりました。
分散管理の登場
こうした問題を解決するために、DNSのような分散型の管理システムが登場しました。これにより、すべての通信情報を一つのファイルで管理する必要がなくなり、複数のサーバーが協力して管理を分担することが可能になりました。
ICANNの設立
インターネットがさらに普及し、世界中のユーザーが増えると、ドメイン名やIPアドレスの割り当てを適切に管理するための専門機関が必要になりました。そのため、ICANN(Internet Corporation for Assigned Names and Numbers)が設立され、ドメイン名やIPアドレスの一元的な管理と運用ルールの制定が行われるようになりました。

改めて…DNSとは?

これまで接続先をいちいち「HOSTS.txt」で手動で管理していましたが、手間がかかる上に、時代の流れとともに分散管理が主流となってきました。そこで、名前とIPアドレスの紐づけ作業を自動化するために登場したのが、**DNS(Domain Name System)**です。

DNSは、名前の紐づけ作業を行い、そのデータを記録・管理する専用のシステムです。また、DNSの登場により、これを扱うためのDNSサーバも誕生しました。

時代が進み、現在では一般家庭にも簡易的なネットワーク機器、例えばWi-FiルーターにDNSサーバが組み込まれており、利用者は何も設定することなく、自動的に接続ができるようになっています。(法人や個人でIP管理を自分で行いたい場合などには、引き続き専用のDNSサーバを使用することもあります)

そして、スマートフォンが普及し、インターネットの接続が手動で管理できないほど複雑になった現在でも、DNSのおかげで世界中のネットワークが問題なく機能しています。

DNSのメリット

ここでDNSのメリットを理解しましょう。

  • IPアドレスとドメイン名を紐づけて管理できる 人間にとって覚えにくい数字の羅列(IPアドレス)を、覚えやすいドメイン名と紐づけて管理できるため、利便性が向上します。これにより、Webサイトやサービスに簡単にアクセスできます。

  • 通信の呼び名が簡単につけられる IPアドレスだけでなく、直感的な名前(ドメイン名)を使うことで、利用者はインターネット上のサービスを簡単に利用できるようになります。例えば、「example.com」といった名前を使うことで、背後にある複雑なネットワーク構成を意識せずに通信が可能です。

  • セキュリティ対策にも貢献 DNSは、特定の通信を名前でブロックすることも可能です。たとえば、不正な通信先や悪意のあるドメインをDNSの設定で名前からブロックすることで、セキュリティ対策にも有効です。これにより、フィッシングサイトやマルウェアの感染を防ぐことができます。

DNSのデメリット

  • DNSキャッシュポイズニングなどの攻撃リスク DNSはインターネットの重要な部分を担っているため、悪意のある攻撃の標的になることがあります。代表的な攻撃手法としてDNSキャッシュポイズニングがあり、これにより、ユーザーが誤ったサイトに誘導されるリスクがあります。

  • 名前解決にかかる時間 ネットワークが遅い場合や、DNSサーバに問題が発生している場合、ドメイン名からIPアドレスに変換する「名前解決」に時間がかかることがあります。これにより、Webページの読み込みが遅くなることがあります。

  • 設定ミスの影響 DNSの設定が誤っていると、アクセスができなくなったり、誤った場所に接続されることがあります。大規模なサービスの場合、DNSの設定ミスが大量の利用者に影響を及ぼす可能性があります。

どういうシーンで使うの?

基本的に、DNSは裏で機能しているため、一般ユーザーはその存在を意識することはほとんどありません。ほとんどのケースでDNSは自動で設定され、特別な操作をしなくてもネットワークが動作します。しかし、以下のようなシーンではDNSの手動設定が必要となることがあります。

  • 法人の事務所での利用 事務所などでは、各端末にIPアドレスやドメイン名を固定で割り当てるため、DNSの手動設定が必要になることがあります。多くの企業では、管理室にルーターとは別にDNSサーバが設置されているケースがよく見られます。これにより、社内ネットワーク内の通信を効率的に管理できます。

  • セキュリティ対策としての利用 特に、セキュリティに敏感な法人では、DNSサーバを独自に管理することが一般的です。たとえば、ランサムウェアやマルウェアの被害を受けた会社では、再発防止のためにDNSサーバを設置し、手動で通信を監視・管理することがあります。これにより、不正なアクセスや通信をブロックし、ネットワークの安全性を確保します。

ガチ勢向け知識

ここからはITインフラエンジニアに向けたガチプロ向けの人が理解できる内容まとめになります。 DNSの種類: DNSにはいくつかの種類があり、それぞれ役割が異なります。以下の種類について簡単に説明することができます。

リゾルバ:クライアント側でDNSクエリを処理し、最終的なIPアドレスを返す役割。 キャッシュDNSサーバ:クエリの結果をキャッシュして、一度解決されたドメイン名をすぐに返すサーバ。これにより、名前解決のスピードが向上します。 権威DNSサーバ:ドメイン名とその対応するIPアドレスの正式な情報を保持し、正しいIPアドレスを返す役割を持つサーバ。 DNSの階層構造: DNSは階層的に構成されており、クエリがどのように処理されるかを説明することで、仕組みをより深く理解できます。

ルートDNSサーバ:最上位のサーバで、TLD(トップレベルドメイン)を管理。 TLDサーバ:特定のドメイン(.com、.jpなど)を管理するサーバ。 権威DNSサーバ:最終的なドメインの名前解決を行うサーバ。 DNS over HTTPS (DoH)やDNS over TLS (DoT): 最近のインターネットセキュリティの進展により、DNSクエリを暗号化する技術が普及しつつあります。これらの技術についても言及すると、最新のトレンドやセキュリティ面の重要性を強調できます。

DNS over HTTPS (DoH):DNSクエリをHTTPSで暗号化し、プライバシーを守る技術。 DNS over TLS (DoT):TLSを使ってDNSクエリを暗号化する技術。 DNSの役割が拡大しているシーン: DNSは単に名前解決だけでなく、以下のような役割も果たしているため、これらの応用も補足できます。

コンテンツフィルタリング:DNSレベルで特定のサイトやコンテンツをブロックする機能が、家庭や企業のネットワークで利用されています。 ローカルネットワークの管理:社内ネットワークなどで、DNSを活用して内部の通信を効率的に管理するシーンもあります。 DNSのトラブルシューティング: DNSに問題が発生するとインターネット接続に障害が起こることがあるため、一般的なDNSの問題とその対処法についても触れると、読者に役立つ情報となります。

DNSキャッシュのクリア:キャッシュの問題で接続が不安定になる場合、DNSキャッシュをクリアすることが効果的です。 他のDNSサーバの利用:Google Public DNSやCloudflare DNSなどのパブリックDNSを使って、名前解決を安定化させる方法。

DNSを実際に動かして覚える

DNS設定を触ってみる

名前の登録をしてみる

DNSサーバを作ってみる

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。