はじめまして!BFTの新卒エンジニアの山下です。
私は文系大学生から新卒一年目でインフラエンジニアとして働いています。
私は未経験で入社したので、現在進行形でITに関する知識がまったくありませんでしたが、わが社では4月からの6月までの三ヶ月間、技術力や思考力を高めることができる新卒研修があります。研修ではLinuxやWindows、AWSなどさまざまな技術に触れることができ、そこでたくさんの知見を得ることができました。
そんな中、研修中にすこぶるわかりづらい壁にぶち当たりました。それが「Windowsの名前解決」です。名前解決というもの自体は、それまでの研修でなんとなく自分なりに整理することができていましたが、少し深い話になっていくにつれて私自身も深い沼にはまっていくように、頭がこんがらがってしまいました。
そういう時に頼りになるのは、インターネットでの検索や今話題の自動生成AIなどですが、そこで調べても私の調べ方の問題なのか、知識や情報不足なのかあまり理解を深めることができませんでした。(いろいろな人に聞いてみて自分なりに理解ができました)
回に限った話ではないのですが、分からないことがあってそれについて調べても、記事自体が何を言っているのかわからないことや、記事に知らない言葉が使われすぎていて(それによって記事自体の意味が読み取れなくなっているのかも?) それを調べるのに時間がかかることがすごくあります。それを調べるのも楽しいことですが。
Windowsの名前解決について私自身が調査するのに苦労したので、一つにまとまった記事があったらいいなという自分の願いを自分でかなえてしまうことにしました。
私と同じく新卒未経験で知識がまだまだ少ないという方や、これからITインフラを学びたい方という同志たちのためになることがあれば幸いです。
この記事では
名前解決とはいったい何をするものなのか
Windowsの名前解決はどんなものがあるのか
を前後編の2回で順を追って解説していきたいと思います。前編となる今回はメジャーな手法である、hostsファイルによる名前解決とDNSによる名前解決をご紹介します。
目次
名前解決とは
早速ですが、そもそも「名前解決」とは一体何者なのでしょうか。
コンピューターたちにはIPアドレスという番号が割り振られています。IPアドレスは「そのコンピューターがどのネットワークの誰なのかを表すもの」です。インターネット上の住所といわれたりします。例えば、大手検索エンジンである「google.com」(このよく見る英語の羅列はドメイン名といいます)のIPアドレスは「172.217.175.110」になります。この数字を検索窓に打ち込むとGoogleのホームページに飛ぶはずです。この数字がGoogleのインターネット上の住所となるわけですね。
さて、皆様はこの数字を覚えることができるでしょうか。一つだけなら覚えることはそう難しくないのかもしれませんが、インターネット上に存在するすべてのページが数字だけで管理されていたとしたらどうでしょう。暗記パンでもない限り覚えられませんよね。だからと言って名前解決がなされていないのに「google.com」と入力されても、コンピューター側はIPアドレスによって住所を探しているわけですから、この文字列はどういう意味となるわけです。
そんな相互の架け橋になるために作られたのがこの「名前解決」という方法になります。
ドメイン名と数字を対応させ、必要に応じて変換することで人間とコンピューターとの間でやり取りをしやすくしているのです。
そして、一口に名前解決といってもいろいろな種類があります。次の章ではみなさんがなじみ深いであろう「windows」の名前解決についてひもといていきたいと思います。
Windowsの名前解決
Windowsの名前解決は、主にホスト名をIPアドレスに変換するためのプロセスを指します。
これには、複数の名前解決メカニズムが存在し、それぞれ異なる順番で実行されます。代表的な方法は hostsファイル やDNS (Domain Name System)といった手法がありますが、他にはどんなものがあるのでしょうか?
以下に、その順番と各メカニズムの概要を説明します。Windowsの名前解決はいくつかあり、それぞれが違う特徴を持っています。
- hostsファイル: 最初に参照されるのはローカルのhostsファイルです。これは、ホスト名とIPアドレスの対応関係を記述したテキストファイルで、一般的にはC:\Windows\System32\drivers\etc\hostsに位置しています。hostsファイルは手動で編集でき、ネットワーク接続がなくても名前解決が可能です。
- DNS(Domain Name System): hostsファイルに該当するエントリーがない場合、次にDNSが参照されます。DNSは、インターネット上のホスト名とIPアドレスの対応関係を管理するシステムです。DNSサーバーに問い合わせを行い、ホスト名をIPアドレスに変換します。
- mDNS(Multicast DNS): DNSに続いて、mDNSが参照されます。mDNSは、ローカルネットワーク内でホスト名とIPアドレスの対応関係を管理するプロトコルです。特定のDNSサーバーへの問い合わせを必要とせず、ネットワーク内の全てのデバイスに対して問い合わせを行います。
- LLMNR(Link-Local Multicast Name Resolution): mDNSに該当するエントリーがない場合、次にLLMNRが使用されます。LLMNRは、DNSと同様に名前解決を行いますが、ローカルネットワーク内でのみ動作します。DNSサーバーが存在しない場合や接続できない場合に有効です。
- NBT(NetBIOS over TCP/IP): 最後に、NBTが参照されます。NBTは、Windowsネットワークの初期の名前解決メカニズムで、主にローカルネットワーク内で使用されます。DNSやLLMNRとは異なり、NetBIOS名という特殊な形式の名前を使用します。
これらの名前解決メカニズムは、指定された順番で動作し、最初に成功したものが使用されます。ただし、これらの順番や使用するメカニズムは、システムの設定やネットワークの状況により変わることがあります。
hostsファイルによる名前解決
hostsファイルとはいったい何者なのでしょうか。読み方は「ホスツファイル」です。簡単に言うと「対応するドメイン名とIPアドレスを記載しておくファイル」です。先ほどの例でいうと「google.com」と「172.217.175.110」と記載しておくことで、数字ではなくgoogle.comと入力すればGoogleのページに飛ぶことができます。
Windowsでhostsファイルはどこにあるのかというと
”C:Windows\System32\drivers\etc\hosts“
こちらに格納されています。
管理者権限で起動して書き込まないといけないので注意が必要です。
では、名前解決をしたいなと思ったら、いちいちhostsファイルに書き込んでいるのかといえばそういうわけではないのです。hostsファイルはそのファイルが存在している機器でしかその力を発揮しません。AのパソコンにGoogleのIPアドレスとドメイン名が記載されているhostsファイルがあっても、Bのパソコンではそのことはわからないのです。インターネットが生まれたばかりの頃は、hostsファイルに記入してはそのファイルを共有して名前解決をしていたみたいですが、ネットがどんどん大きくなり人口も増えていくにつれて、hostsファイルを共有していく名前解決のやり方では対応が追い付かなくなってしまいました。
そこで、偉大な先人たちがもっと簡単に名前解決を管理したいということで開発されたのが、次に解説する「DNS」というシステムです。
DNSによる名前解決
DNSはDomain Name Systemの頭文字をそれぞれとったものになります。少し大層な名前に変化しましたが、やっていることは「ドメイン名とIPアドレスを対応させる」ということです。このままじゃhostsファイルと何も変わらないじゃないかと思うかもしれませんが、DNSがすごいのはここからなのです。
まず、どうやってDNSを使って名前解決をしているかというと、「DNSサーバー」というものを利用しています。このDNSサーバーがドメイン名とIPアドレスの紐づけを管理しています。簡単に言うとhostsファイルの膨大版です。
そして、DNSサーバーには2種類あります。「DNSキャッシュサーバー」と「権威DNSサーバー」です。
DNSキャッシュサーバー
DNSキャッシュサーバーはクライアントPCが最初に問い合わせにいくDNSサーバーです。そして、DNSキャッシュサーバーはクライアントから問い合わせがきたら、自分が答えを持っている場合そのままクライアントに応答します。自分が答えを持っていない場合、権威DNSサーバーに問い合わせに行きます。
この際、権威DNSサーバーから答えをもらったら、クライアントに返答をすると同時に、自分の知識の中にその情報を記憶しておきます。こうすることで次に同じ問い合わせが来た場合、権威DNSサーバーに問い合わせをすることなく名前解決ができるようになります。この情報を記憶しておくことを「キャッシュ」といいます。このおかげで、権威DNSサーバーにアクセスが集中することを避けることができているのです。賢いですね。
権威DNSサーバ
権威DNSサーバーは、問い合わせに対して自分が持っている情報を渡し、情報をもっていなかったらほかの権威DNSサーバーが持っているよという応答をするサーバーです。
権威DNSサーバーは「ゾーンファイル」というものを持っています。こやつに情報が入っており、問い合わせを受けたらこのファイルを参照します。ゾーンファイルには、ドメイン名とIPアドレスの対応が行で書かれており、この行のことを「DNSレコード」といいます。
つまり、問い合わせをうけた権威DNSサーバーは、ゾーンファイルのDNSレコードを参照して、情報を持っていたら対応する応答をし、ない場合やほかの権威DNSサーバーに委託している場合はそれに対応して応答をします。
ここまでの話を聞いて、権威DNSサーバーって何個あるの?と思った方もいるかもしれません。実は、権威DNSサーバーはドメインに合わせて階層構造になっているのです。
例えば、www.example.comというドメイン名があったとします。
このドメインは[www][example][com]という風に分かれており、並び順は末尾(右)が最上位で先頭(左)が最下位であり、最上位のことをトップレベルドメイン(com)、その次を第2レベルドメイン(example)、その次が第3レベルドメイン(www)、、、、と続いていきます。これと同様に権威DNSサーバーも階層になっています。情報を持っていないDNSキャッシュサーバーは最初に「DNSルートサーバー」という権威DNSサーバーにお伺いを立てます。このDNSルートサーバーはすべての管理情報の委託元です。世界に13台しかありません(余談ですが、ほとんどのDNSルートサーバーはアメリカにありますが、実は日本にも一つあります!)
このDNSルートサーバーが問い合わせを受けると、トップレベルドメイン単位(.jpなど)でほかの権威DNSサーバーに管理を委託しているため、そのトップレベルドメインのことならこの権威DNSサーバーに聞いてくださいねという返事をDNSキャッシュサーバーに送るわけです。その返事を受け取ったDNSキャッシュサーバーは、次の権威DNSサーバーに聞きに行くという流れになっています。こうやって、IPアドレスとドメイン名の対応付けが完了するまで、階層をどんどん潜っていくのです。権威DNSサーバーはレベルドメインの階層の数だけあるということです。
DNSサーバーで名前解決を行うには?
このようにして、DNSサーバーは名前解決を行っています。
では、どうしたらDNSサーバーを使用することができるのでしょうか。
DNSサーバーを使用する方法としては、大きく分けて「自身でDNSサーバーを構築すること」と「すでにあるDNSサーバーを使用すること」の二つになります。
「自身でDNSサーバーを構築する」というのは、構築したサーバーにDNSの機能をインストールし、DNSサーバーとして取り扱う方法です。この方法は、すでに存在しているDNSサーバーを使用するよりも、パフォーマンスやセキュリティの向上、カスタマイズ性などさまざまな利点がある一方で、セキュリティのリスクやコストや冗長性の確保、また逐一DNSレコードを更新する必要があるなど、メンテナンス面でも管理する必要があります。要するに管理が少々煩雑なのです。
なので、基本的にほとんどの人はすでに存在しているDNSサーバーを使用しています。このDNSサーバーはインターネットプロバイダーから提供されており、デフォルトでは自動でそのDNSサーバーを使用するような設定がなされています。もちろん、自身が構築したDNSサーバーなどほかのDNSサーバーに変更することも可能です。プロバイダーから提供されているDNSサーバーはキャッシュサーバーであり、たくさんのIPアドレスとドメイン名の対応を記憶して、通信を高速化しています。
もう一つすでに存在しているDNSサーバーとして、「パブリックDNSサーバー」というものがあります。このパブリックDNSサーバーは、インターネットに接続していればどこからでも利用できるものであり、Google社の「Google Public DNS」やCiscoの「Open DNS」などがあります。覚えやすいIPアドレス(Google Public DNSは8.8.8.8)が振られていることが多いです。
パブリックDNSは、プロパイダ-のDNSの速度が遅い場合や何らかのトラブルで使用できない場合などに役立ちます。また、フリーWi-Fiに接続している際の安全性向上にも使用することができます。
DNSサーバーの設定方法
次にWindowsでDNSサーバーを設定する方法をお伝えしようと思います。OSは「windows10」になります。「Windows Server」などを使ってサーバー自体をDNSサーバーにすることも可能ですが、今回は単純にWindows10が使用するDNSサーバーを設定する順序を解説していこうと思います。
手順としてはそこまで難しいものではなく、すぐに設定できるものとなっています。
1,左下のスタートをクリックして、左にある歯車マークの設定をクリックする。
2.右側にある「ネットワークとインターネットを」クリック
3「状態」の真ん中下にある「アダプターのオプションを変更する」をクリック
4.「wi-fi」をクリック
5.「プロパティ」をクリック
6.「インターネット プロトコル バージョン4 (TCP/IPv4)」をクリック
7.「次のDNSサーバーのアドレスを使う」にチェックを入れる(デフォルトの状態だとプロパイダ-のDNSサーバーが設定されている)
8.優先DNSサーバーを設定する(8.8.8.8など)、また必要に応じて代替DNSサーバーを設定する
9.OKを押して終了
以上がWindowsでDNSサーバーを設定する手順になります。
とても簡単に設定することができちゃいます。
hostファイルやDNSサーバーは名前解決の手段としてものすごくポピュラーなものですから、利用する機会がたくさんあると思います。(まだそこまで経験がないので確証はありませんが…)インターネットがつながる環境であれば、プロパイダ-が提供しているDNSサーバーやパブリックDNSサーバーを使用できますし、ローカルな環境であっても、自身でDNSサーバーを構築してレコードを追加したり、hostsファイルを編集すれば問題なく名前解決を行うことができます。
ただ、Windowsにはほかにも名前解決をできる機能が搭載されています。先ほど「2.Windowsの名前解決」にてご紹介した3~5方法です。この三つの方法はDNSサーバーがなくても名前解決ができる代物になっています。こいつらのことを知ることでDNSに対する理解をもっと深めることができると思います。
まとめ
今回は、名前解決の方法としてメジャーな「hostsファイル」と「DNS」について紹介しました。この2つの方法は基礎的な知識として身に着けておくものであり、エンジニアとして必須なものだと思います。次回は、発展的な「MDNS」「LLMNR」「NBT」について説明していきます。これらは「hostsファイル」「DNS」よりも複雑ですが、今回説明した名前解決の知識を見つけていただき、次回でより理解を深めていただきたいと思います。