「localhost」が初心者にとって便利な理由
まずは例を挙げて説明しましょう:
サーバーアプリケーションを作成する際、まだリモートサーバーが実行されていない場合、自分自身のサーバーアプリをテストする方法について考えるかもしれません。「サーバーアプリをテストするにはどうすればいいのか?」という疑問が生じる瞬間です。そこで、「
localhost
」が登場します。なぜなら、アプリをテストするためにリモートサーバーは必要なく、自分自身のデバイスへのリクエストを送信できるからです。
「localhost」はどのように機能するのか?
ウェブサイトを呼び出そうとすると、コンピューターはインターネット上のリモートコンピューター(サーバーとも呼ばれる)に接続しようとします。リクエストを送信し、その結果としていくつかのコンテンツを受け取ります。
一方、「localhost
」(または「127.0.0.1」)を呼び出すと、自分自身のデバイスにリクエストを送信します。コンピューターはアドレス(「localhost」または「127.0.0.1」)を認識し、インターネット上に送信する代わりに、ループバック機構を通じてリクエストを返します。先ほどのサーバーアプリの例を念頭に置くと、同じマシン上のサーバーはリクエストを受け取り、いくつかのコンテンツを含むレスポンスを送信できます。
リクエストとレスポンスは、コンピューター内部で完結します。言い換えれば、「localhost
」を呼び出すことで、コンピューターは常に自己と対話しているのです。
127.0.0.1
とlocalhostの違い
IPアドレス表記と特殊IPアドレス
IPアドレスは、ネットワーク番号とホスト番号の2つの部分から構成されています。ネットワーク番号(net-id)は、IPアドレスが所属するネットワーク番号を示し、ホスト番号(host-id)は、IPアドレスが所属するネットワーク内のホスト番号を示します。
IPアドレス ::= { <ネットワーク番号>, <ホスト番号> }
特殊IPアドレスは特定の用途に使用されます。RFC1700で以下の特殊IPアドレスが定義されています。
-
{0,0}:ネットワーク番号とホスト番号がともに0であり、「このネットワークのこのホスト」という意味であり、ソースアドレスとしてのみ使用できます。
-
{127,}:ネットワーク番号が127であるIPアドレスのことです。これらはすべて内部ホストループバックアドレス(ループバック)であり、ホストの外部のネットワークでは決して現れません。
質問への回答
「127.0.0.1」と比較して、「localhost」はより意味を持っています。「localhost」はドメイン名であり、IPアドレスではありません。 大抵の場合、
私たちが使用するコンピューターでは「localhost」がアドレス「127.0.0.1」を指すとされています。Ubuntuシステムでは、/etc/hosts
ファイルに以下の内容が含まれています:
127.0.0.1 localhost
ただし、ホストファイルを設定すると、「localhost」を異なるIPアドレスに関連付けることも容易です。なぜなら、このファイルにはIPアドレスとホスト名の対応関係が含まれているからです。
少しだけBINDについて説明します
ネットワーキング
ネットワーキングとは、複数のコンピューターやデバイスを接続してネットワークを作成することを指します。これにより、これらのデバイス間での通信やデータ交換が可能となり、リソースや情報の共有が行えます。ネットワークは、地理的な範囲に応じて、ローカルエリアネットワーク(LAN)や広域ネットワーク(WAN)などの異なるタイプに分類されます。
コンピューターネットワークでは、IP(インターネットプロトコル)アドレスと呼ばれる固有のアドレスでデバイスが識別されます。IPアドレスは、IPv4(例:192.168.0.1
)またはIPv6(例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
)の形式で表されることがあります。
Bind(Berkeley Internet Name Domain)
BINDは、インターネット上で最も広く使用されているDNS(Domain Name System)ソフトウェアです。DNSは、ドメイン名(例:example.com)をコンピューターが理解できるIPアドレスに変換します。これにより、複雑なIPアドレスではなく、覚えやすいドメイン名を使用してウェブサイトにアクセスしたり、メールを送信したり、さまざまなインターネット関連の活動を行うことができます。
BINDには、DNSサーバー(named)とDNSリゾルバ(named-resolver)の2つの主要なコンポーネントがあります。DNSサーバーはドメイン名のクエリを処理し、権威ある回答を提供します。一方、リゾルバはクライアントからのクエリを処理し、ドメイン名の解決に関してDNSサーバーと対話します。
named.conf
などの設定ファイルは、BINDの動作方法を指定するために使用されます。これらのファイルには、DNSサーバーの動作を制御するさまざまなディレクティブとオプションが含まれています。これには、以前に言及した「listen-on」ディレクティブも含まれます。
「listen-on」ディレクティブ
BINDのnamed.conf
ファイルにおける「listen-on」ディレクティブは、DNSサーバーが受信クエリを待ち受けるためのIPアドレスとポート番号を指定します。デフォルトでは、BINDはループバックアドレス(127.0.0.1)のポート53で待ち受けるように制限されており、つまりローカルマシンからのクエリのみを受け付けます。
「listen-on」ディレクティブで「127.0.0.1」を「localhost」に置き換えると、BINDはそれをループバックアドレスと解釈し、外部からのクエリを許可するようになります。この動作は、ほとんどのシステムで「localhost
」が通常ループバックアドレスに解決されるためです。
BINDの動作は、バージョンや設定、プラットフォーム固有の設定によって異なる場合がありますので、複雑なBINDの設定を扱う際には、常にBINDの公式ドキュメントを参照するか、経験豊富な管理者の支援を求めることをおすすめします。