ネットワークをいじくり回している場合は、LANベースのアプリとサーバーツールの設定、または好奇心が強い人は、ローカルIPアドレスとローカルIPアドレスに違いがあることに気づいたと思います。違いを学ぶために読んでください。
本日の質疑応答セッションは、コミュニティ主導のQ&A WebサイトのグループであるStack Exchangeの下位部門であるSuperUserのご厚意によるものです。
質問
スーパーユーザーリーダーのDiogoは、pingコマンドがローカルホストとローカルIPアドレスを表面上は同じように見える場合に異なる方法で処理する理由を知りたいと考えています。
Windowsでcmdとpingを使用すると、次の結果が得られました。
「localhost」へのPing:
「192.168.0.10」(ローカルIPアドレス)のping:
両方の状況はまったく同じではありませんか?
つまり、同じインターフェイス、同じマシン、同じアドレスに対してpingを実行しています。なぜこのような異なる結果が得られるのですか?
明らかに何らかの違いがありますが、2つを切り替えると正確に何が起こっているのでしょうか?
答え
SuperUserの貢献者であるTom Wijsmanは、この2つの微妙な違いについて次の洞察を提供しています。
同じインターフェースにpingしていません、物理インターフェイスがなくても、「ローカルホスト」が残っています。
きみの localhost
からコンピュータを参照するために使用されますコンピュータの「外部」IPからではなく、「内部」IP。そのため、pingパケットは物理ネットワークインターフェイスを通過しません。物理ホップなしでポートからポートにパケットを直接送信する仮想ループバックインターフェイスを介してのみ。
あなたはまだ疑問に思うかもしれません localhost
に解決しています ::1
、従来はIPv4アドレスに解決されると予想されていました 127.0.0.1
。ご了承ください .localhost
従来はループバックIPアドレスを指すTLD(RFC 2606を参照)です(IPv4については、RFC 3330、特に127.0.0.0/8を参照)。
見上げる localhost
を使用して nslookup
私たちに与えます:
nslookup localhost
...
Name: localhost
Addresses: ::1
127.0.0.1
したがって、WindowsはIPv6ループバックIPアドレスを使用することを好みます ::1
(RFC 2373を参照)、最初にリストされています。
さて、どこから来たのか、hostsファイルを見てみましょう。
type %WINDIR%System32DriversEtcHosts
...
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
...
うーん、WindowsのDNS設定を調べる必要があります。
このKB記事では、Windowsが好むものに影響する設定について、太字で強調して説明しています。
- レジストリエディターで、次のレジストリサブキーを見つけてクリックします。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters
- DisabledComponentsエントリを変更するには、DisabledComponentsをダブルクリックします。注:DisabledComponentsエントリが利用できない場合は、作成する必要があります。これを行うには、次の手順を実行します。
- [編集]メニューの[新規]をポイントし、[DWORD(32ビット)値]をクリックします。
- DisabledComponentsと入力し、Enterキーを押します。
- DisabledComponentsをダブルクリックします。
- [値のデータ]フィールドに次の値のいずれかを入力して、IPv6プロトコルを目的の状態に構成し、[OK]をクリックします。
- タイプ
0
すべてのIPv6コンポーネントを有効にします。 (Windowsのデフォルト設定) - タイプ
0xffffffff
IPv6を除くすべてのIPv6コンポーネントを無効にするループバックインターフェイス。また、この値は、プレフィックスポリシーテーブルのエントリを変更することにより、IPv6よりもインターネットプロトコルバージョン4(IPv4)の使用を優先するようにWindowsを構成します。詳細については、送信元および宛先アドレスの選択を参照してください。 - タイプ
0x20
プレフィックスポリシーテーブルのエントリを変更して、IPv6よりもIPv4を優先する。 - タイプ
0x10
すべての非トンネルインターフェース(LANおよびPoint-to-Pointプロトコル[PPP]インターフェースの両方)でIPv6を無効にします。 - タイプ
0x01
すべてのトンネルインターフェイスでIPv6を無効にします。これには、サイト内自動トンネルアドレッシングプロトコル(ISATAP)、6to4、およびTeredoが含まれます。 - タイプ
0x11
IPv6ループバックインターフェイスを除くすべてのIPv6インターフェイスを無効にします。
- タイプ
- この設定を有効にするには、コンピューターを再起動します。
このプレフィックスポリシーテーブルとは何ですか?
netsh interface ipv6 show prefixpolicies
(または prefixpolicy
以前のバージョン)
Precedence Label Prefix
---------- ----- --------------------------------
50 0 ::1/128
45 13 fc00::/7
40 1 ::/0
10 4 ::ffff:0:0/96
7 14 2002::/16
5 5 2001::/32
1 11 fec0::/10
1 12 3ffe::/16
1 10 ::/96
このテーブルは、DNS解決中に他のプレフィックスより優先されるプレフィックスを決定します。
ああ、そのKBを使用して、IPv4がIPv6よりも優先順位が高いことを示すエントリをここに追加できます。
注意: 互換性のある問題が発生していない限り、この動作をオーバーライドする理由はありません。 Windowsサーバーでこの設定を変更すると、メールサーバーが破損したため、慎重に処理する必要があります…
徹底的かつリンクされたサポート文書を含む有益な回答。明らかに、ローカルホストとローカルIPアドレスは別個のエンティティであり、さまざまな目的に使用されますが、今ではすべてが理由を知っています。
説明に追加するものがありますか?コメントで鳴り響きます。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらでディスカッションスレッド全体をご覧ください。