Por que não consigo pingar um endereço no dispositivo de loopback no FreeBSD?

9

De Wikipedia :

The most commonly used IP address on the loopback device is 127.0.0.1 for IPv4, although any address in the range 127.0.0.0 to 127.255.255.255 is mapped to it.

Isso não é verdade, pelo menos no 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

Esse comportamento é correto?

    
por Eugene Yarmash 25.07.2011 / 17:15

4 respostas

9

O FreeBSD (também o OS X, e acredito que o NetBSD e o OpenBSD) responderão aos pedidos enviados para os endereços configurados na interface de loopback, assim como fariam para endereços em qualquer outra interface. você quer uma resposta que você precisa para atribuir o endereço primeiro:

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

Na lógica por trás dessa implementação, consulte RFC 3330 :

127.0.0.0/8 - This block is assigned for use as the Internet host
loopback address. A datagram sent by a higher level protocol to an
address anywhere within this block should loop back inside the host.
This is ordinarily implemented using only 127.0.0.1/32 for loopback,
but no addresses within this block should ever appear on any network
anywhere [RFC1700, page 5].

(ênfase minha)
Linux e Windows estão sendo "úteis" aqui, no entanto, do meu presidente responder a um pedido que foi enviado para um endereço não atribuído a este host não é o comportamento correto ...

    
por 25.07.2011 / 17:44
7

Eu vejo o mesmo comportamento que você descreve no FreeBSD 8.1. O Mac OS X, que compartilha um pouco de DNA com o FreeBSD, também parece mapear apenas 127.0.0.1.

O Windows 7 e o Linux (debian com o kernel 2.6.26) parecem mapear a faixa completa de endereços como você descreve na citação da Wikipedia (e conforme prescrito na RFC).

Para citar o RFC 3330:

127.0.0.0/8 - This block is assigned for use as the Internet host loopback address. A datagram sent by a higher level protocol to an address anywhere within this block should loop back inside the host. This is ordinarily implemented using only 127.0.0.1/32 for loopback, but no addresses within this block should ever appear on any network anywhere [RFC1700, page 5].

Dependendo de como você interpreta a palavra "should", alguns podem argumentar que o comportamento do FreeBSD / MacOS está errado. Mas, dado o uso onipresente de 127.0.0.1 como o endereço de loopback, duvido que seja importante.

    
por 25.07.2011 / 17:26
0

É contrariando a tendência. Não tem uma caixa do FreeBSD à mão para confirmar se o FreeBSD ou a sua configuração.

O RFC diz 127.0.0.1/24 - então ele deve estar respondendo.

    
por 25.07.2011 / 17:25
0

A pergunta está totalmente respondida há três anos, então queria adicionar alguns centavos.

Observe que, por um bom tempo, o padrão ipfw config descarta esses pacotes:

./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

então com o firewall habilitado em vez de

ping: sendto: Can't assign requested address

você pode receber

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

PS. De causa pode haver servidor construído sem INET (suporte a IPv4) e você não terá nem mesmo 127.0.0.1 =)

    
por 28.07.2011 / 10:42