web-dev-qa-db-ja.com

FreeBSDでループバックデバイスのアドレスにpingできないのはなぜですか?

Wikipedia から:

ループバックデバイスで最も一般的に使用されるIPアドレスはIPv4の場合は127.0.0.1ですが、127.0.0.0〜127.255.255.255の範囲のアドレスがマップされます。

これは、少なくともFreeBSDでは正しくありません。

$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
ping: sendto: Can't assign requested address

これは正しい動作ですか?

10
Eugene Yarmash

FreeBSD(OS Xでもあり、NetBSDとOpenBSD)は、他のインターフェースのアドレスの場合と同じように、ループバックインターフェースのconfiguredアドレスに送信された要求に応答します-回答が必要な場合は、最初にアドレスを割り当てる必要があります。

mgraziano@monitor ~]$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
    nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

[mgraziano@monitor ~]$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
ping: sendto: Can't assign requested address
^C

[mgraziano@monitor ~]$ Sudo ifconfig lo0 alias 127.1.1.1 netmask 0xFFFFFFFF

[mgraziano@monitor ~]$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
    inet 127.1.1.1 netmask 0xffffffff 
    nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

[mgraziano@monitor ~]$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
64 bytes from 127.1.1.1: icmp_seq=0 ttl=64 time=0.020 ms
^C

この実装の背後にあるロジックについては、 RFC 33 を参照してください。

127.0.0.0/8-このブロックはインターネットホストとして使用するために割り当てられています
ループバックアドレス。より高いレベルのプロトコルによってに送信されるデータグラム
このブロック内の任意のアドレスは、ホスト内でループバックする必要があります。
これは通常、ループバックに127.0.0.1/32のみを使用して実装されます。
ただし、このブロック内のアドレスはどのネットワークにも表示されません。
どこでも[ RFC17 、5ページ]。

(私の強調)
ここではLinuxとWindowsが「役に立っています」が、私のホストから、このホストに割り当てられていないアドレスに送信されたリクエストに応答すると正しく動作しません。 ..

9
voretaq7

FreeBSD8.1で説明したのと同じ動作が見られます。 FreeBSDと一部のDNAを共有するMac OS Xも、127.0.0.1のみをマップしているようです。

Windows 7とLinux(2.6.26カーネルのdebian)はどちらも、Wikipediaの引用に記載されているように(RFCで規定されているとおり)、アドレス範囲全体をマップしているように見えます。

RFC 3330から引用するには:

127.0.0.0/8-このブロックは、インターネットホストのループバックアドレスとして使用するために割り当てられています。上位レベルのプロトコルによってこのブロック内の任意のアドレスに送信されたデータグラムは、ホスト内でループバックする必要があります。これは通常、ループバックに127.0.0.1/32のみを使用して実装されますが、このブロック内のアドレスはネットワーク上のどこにも表示されません[RFC1700、5ページ]。

Wordをどの程度厳密に解釈するかによっては、FreeBSD/MacOSの動作が間違っていると主張する人もいます。しかし、ループバックアドレスとして127.0.0.1が広く使用されていることを考えると、それが問題になる可能性は低いと思います。

7
eaj

質問は今までに約3回完全に答えられているので、私はほんの数セントを追加したかったのです。

かなり長い間、デフォルトのipfwconfigがこの種類のパケットをドロップすることに注意してください。

./rc.firewall:  ${fwcmd} add 100 allow ip from any to any via lo0
./rc.firewall:  ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any

そのため、代わりにファイアウォールを有効にします

ping: sendto: Can't assign requested address

あなたが得るかもしれない

[savetherbtz@PH34R ~]$ ping 127.0.0.2
PING 127.0.0.2 (127.0.0.2): 56 data bytes
ping: sendto: Permission denied

PS。当然のことながら、INET(IPv4サポート)なしでサーバーを構築することができ、127.0.0.1 =)すらありません。

0
SaveTheRbtz

その傾向に逆らう。 FreeBSDかあなたの設定かを確認するのに便利なFreeBSDボックスを持っていません。

RFCには127.0.0.1/24と記載されているため、応答する必要があります。

0
SuperBOB