127.0.0.0.2のIPアドレスは何のためのものですか?

ip-address

hiredisで例を実行していますが、redisサーバーのIPに「127.0.0.2」を使用しており、正常に動作しています。実は、redisサーバーは同じマシン上で動いています。127.0.0.0.1」が「lo」のIPアドレスであることは知っていますが、「127.0.0.2」はどうでしょうか?127.0.0.1」と同じなのでしょうか?

  44  None  2012-02-24


ベストアンサー

Yes:

IPv4ネットワーク標準は、ループバック目的で127.0.0.0.0/8アドレスブロック全体を予約しています。つまり、これらの16,777,214アドレス(127.0.0.0.1から127.255.255.254まで)のいずれかに送信されたパケットがループバックされることになります。IPv6のアドレスはたった1つのアドレス、 ::1だけです

様々なインターネット技術タスクフォース(IETF)の標準は、CIDR表記のIPv4アドレスブロック127.0.0.0.0/8と、この目的のためにIPv6アドレス ::1を予約しています。最も一般的に使用されるIPv4アドレスは127.0.0.1です。一般的にこれらのループバックアドレスは、ホスト名、localhostまたはloopbackにマップされています

またはRFC自体から

127.0.0.0.0/8 – このブロックは、インターネットホストのループバックアドレスとして使用するために割り当てられています。上位プロトコルからこのブロック内のアドレスに送られたデータグラムは、ホスト内でループバックされます。これは通常、ループバックに 127.0.0.0.1/32 だけを使用して実装されていますが、このブロック内のアドレスはネットワーク上のどこにも存在してはいけません [RFC1700, page 5]

楽しむためには、pingで試してみてください

$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms

40  icyrock.com  2012-02-24


  • “すべての127.x.x.xアドレスはローカルマシンに制限されていますか?”はい、そうです
  • “すべての127.x.x.xアドレスはloインタフェースにバインドされていますか?” はい
  • 127.x.x.xアドレスはネットワーク経由でルーティングされていますか?”いいえ、そうではありません
  • “127.x.x.xのアドレスはすべて同じですか?”いいえ(OSによって異なります)

127.0.0.0.0/8 – このブロックは、インターネットホストのループバックアドレスとして使用するために割り当てられています。上位プロトコルからこのブロック内のアドレスに送られたデータグラムは、ホスト内でループバックします。これは通常、ループバックのために127.0.0.0.1/32だけを使用して実装されている。RFC1122]のセクション3.2.1.3で述べられているように、127.0.0.0.0/8ブロック全体のアドレスは、どこのネットワーク上にも正当には存在しません。- RFC5735 強調します

  • 127.0.0.2127.0.0.1は同じですか?”NO rfc5735によるとそうかもしれませんが、そうである必要はありません。これは実装で定義された動作です。オペレーティングシステムのマニュアルを参照してください。どのような場合でも、全範囲が予約されており、ネットワーク経由でルーティングされてはいけません

127.0.0.1 から 127.255.255.254 はすべてインターフェイス lo にバインドされたローカルアドレスであるのに対し、 127.0.0.1 から 127.255.255.254 はインターフェイス lo にバインドされたローカルアドレスです。これらは同じではありません。それぞれのアドレスを使って、同じポートに異なるサービスをバインドすることができます。例えば、ポート80に1,600万のウェブサーバがあり、ローカルマシンからしかアクセスできません (メモリや他のリソースが不足していなければ)

私は、127.0.0.2:80にバインドするためのdockerサービスを設定しました。そして、/etc/hostsにエイリアスを追加しました。これで、http://myserver経由では接続できますが、http://127.0.0.1http://localhost経由では接続できません。しかし、このマシンでしか利用できません。このままでは、lo インターフェースでしか利用できません

その後、別のdockerサービスを127.0.0.3:80にバインドし、localhost:80にはpythonサービスを、127.0.0.4:80には別のdockerサービスを設定しました


これはすべてのオペレーティングシステムでは動作しないかもしれません。私は Debian(9) Gnu/Linux、Linux カーネル 4.9.0-3-amd64 を使用しています。OSによっては、127.0.0.1127.255.255.254 のすべてのアドレスを同じように扱う場合があります。127.0.0.1 のみで動作するものもあります

ping のようなサービスは 0.0.0.0.0 (ipv4) を listen しているので、ping 127.127.127.127 はリスナーに受信されることに注意してください。しかし、サービスが特定のアドレスを listen している場合は、その特定のアドレスを使って接続する必要があります (使用するオペレーティングシステムによって異なります)

see also

9  ctrl-alt-delor  2017-10-01


包括的な一般的な回答ではありません(すでに1つあります)。私のこの回答では、127.0.0.2を使って問題を解決した例を示しています

Extract:

ここでのOPは、サーバへの接続が拒否された場合に、あるソフトウェアをテストしようとしました。これは、クライアントの IP からのすべてのトラフィックを拒否する一時的な iptables ルールによってサーバ上で行われました。クライアントはすぐに接続が拒否されたことを「見る」ことができました

この人がサーバソフトをクライアントと同じマシンに移動してループバックインタフェースを使おうとしたときに問題が発生した。ルールは127.0.0.1からの通信を遮断するように設定されていましたが、接続が拒否されたという情報は同じルールを経て、ハングアップしたクライアントソフトには届きませんでした(おそらくタイムアウトするまで)

解決策は、127.0.0.2をサーバアドレスとして使用し、そこへの接続を拒否するルールを設定することでした。拒否に関する情報は127.0.0.1に行き、クライアントソフトウェアに渡すことができました

1  Kamil Maciorowski  2017-10-02


タイトルとURLをコピーしました