「127.0.0.1」「::1」はローカルループバックアドレスと呼ばれ、自分自身を指す特別なIPアドレスである。「localhost」という名前でも参照できる。自分自身の上で動作しているサービスへ接続する場合は、これらのIPアドレスを利用できる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
※会員登録(無料)をすると、🔒の付いているセクションを読むことができます。
TCP/IPネットワークでは、自ホストを表すための「ローカルループバックアドレス」(もしくは単に「ループバックアドレス」)という特別なIPアドレスが利用されることがある。本Tech TIPSでは、これについてWindows OSおよびWindowsネットワークを前提として簡単に解説する。
Windowsネットワークに登場する他のIPアドレスについては、連載「基礎から学ぶWindowsネットワーク」の「3.さまざまなIPアドレス」が参考になるだろう。
ローカルループバックアドレスとは、自分自身を表す特別なIPアドレスの1つであり、TCP/IPが有効なコンピュータでは常に利用可能なIPアドレスである。一般的には以下のIPアドレスが利用される。
IPv4の場合、IPアドレスの最上位のバイト(最上位の8bit)の内容が「127」でありさえすればよいので、「127.0.0.1〜127.255.255.254」の範囲内ならばどのIPアドレスでも利用できる(「127.0.0.0」と「127.255.255.255」の2つはブロードキャストアドレスのため除外される)。例えば「127.0.0.2」でもよいし、「127.1.2.3」でもよい。ただし、一般的な用途では「127.0.0.1」だけが利用される。
TCP/IPネットワークが有効になっていると、「127.0.0.1」「::1」は必ず定義されているはずである。Windows OSではTCP/IPは必ず組み込まれており、またIPv4はもとよりIPv6も有効である。そのため、デフォルトでは「127.0.0.1」「::1」ともに必ず利用できるはずだ。
例えば、pingコマンドをこれらのIPアドレス宛てに実行すると、以下のように応答が返ってくる(pingコマンドの使い方はTech TIPS「「pingでネットワークトラブルの原因を調査する」参照)。
ping 127.0.0.1 ……IPv4のローカルループバックアドレス宛てのping
ping ::1 ……IPv6のローカルループバックアドレス宛てのping
ネットワークインタフェースに割り当てられているIPアドレスと違い、「127.0.0.1」「::1」は、ipconfigコマンドや、[設定]アプリの[ネットワークとインターネット]、コントロールパネルの[ネットワークとインターネット]−[ネットワーク接続]などで確認できない。
そこで「netstat」コマンドを以下のように実行すると、このIPアドレスでリッスンしているいくつかのポートが(デフォルトでは)存在するので、それで確認できる。
netstat -an ……リッスンしているポートの表示
「127.0.0.1」「::1」は、自分自身を指すIPアドレスである。そのため、自分自身のサービスが動作しているかどうかを確認したり、自分自身のコンピュータ上で動作しているサービスへ接続したりする場合に利用できる。先の例のように、pingで接続したり、ファイル共有へ接続したり、Webサーバが動作しているならWebブラウザで接続したり、といった使い方をする。
外部のコンピュータから接続する場合と違って、自分自身に割り当てられているIPアドレスを知っている必要はなく、常に「127.0.0.1」や「::1」というIPアドレスに接続すればよい。これにより、常に自分自身へ接続することが保証されている。
ただし、このような使い方が可能になるためには、対象のアプリケーションが「127.0.0.1」「::1」(もしくは任意のアドレスを表す「0.0.0.0」「::」)に対してリッスンしている必要がある。
前述の「netstat -an」コマンドの実行例でいえば、「ローカルアドレス」列がTCPの「0.0.0.0:445」や「127.0.0.1:843」であるポートには、「127.0.0.1」を宛先に指定して接続できる。同様に「[::]:49671」「[::1]:49670」には「::1」宛てで接続可能だ。一方、「172.16.80.146:139」のポートに対しては、「127.0.0.1」宛てでは接続できない。
一般的には、どのポートがローカルループバックアドレス経由で接続できるかは気にする必要はない。ただし、Windows OS上で稼働するWebサーバやファイアウォールなどを設定する場合には、意識しておく必要があるだろう。
例えば以下のように設定されたWebサーバ(Windows OSのIIS)では、ローカルコンピュータ上のWebブラウザから、「http://127.0.0.1/」を指定しても、接続できずにエラーとなる。IISが「127.0.0.1」でリッスンしていないからだ。
ローカルループバックアドレスを使って接続したければ、ネットワークインタフェースのIPアドレス(上記の例では「172.16.80.146」)だけでなく、「127.0.0.1」「::1」に対しても明示的にリッスンするように設定する。
「*」あるいは「未使用のIPアドレスすべて」を指定することでも、「127.0.0.1」「::1」をリッスンできる(この場合、全てのネットワークインタフェースに割り当てられたIPアドレスもリッスン対象となる)。
「127.0.0.1」「::1」というIPアドレスには、「localhost」という単純なホスト名が割り当てられている(ドメイン名は付かない。localhostという単一ラベルの名前としてのみ有効)。
例えば、localhostに対してpingコマンドを実行すると、デフォルトでは「::1」に対してpingが送信される。Windows OSのネットワーク関連の設定により、IPv6よりIPv4が優先されている環境では、「127.0.0.1」に名前解決されることもある。
ping localhost
また、「http://[::1]/」は「http://localhost/」としてアクセスできるし、ローカルコンピュータ上のSSHサーバに接続するには、「ssh localhost」とすればよい。
ただし、サーバアプリケーション側で「127.0.0.1」でのリッスンのみ設定している場合、「localhost」宛てではデフォルトで「::1」に名前解決されるため、アクセスに失敗することがある。その場合は、「::1」でリッスンする設定も追加するとよいだろう。
「localhost」は通常、外部のDNSサーバが参照できない状況でも、「127.0.0.1」または「::1」に名前解決される。例えば、ネットワークインタフェースが全くLANなどに接続できない状況で「ping localhost」と実行すると、通常は「::1」あるいは「127.0.0.1」に名前解決され、応答が来る。そのため、外部のDNSサーバへの参照を確認する際には、「localhost」ではなく、外部のホスト名を指定すべきだろう。
■この記事と関連性の高い別の記事
■更新履歴
【2022/10/26】Windows 10/11やIPv6に対応しました。
【2006/10/14】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.