¿Por qué no puedo hacer ping a una dirección en el dispositivo loopback en FreeBSD?


10

De Wikipedia :

La dirección IP más utilizada en el dispositivo de bucle invertido es 127.0.0.1 para IPv4, aunque cualquier dirección en el rango de 127.0.0.0 a 127.255.255.255 está asignada a ella.

Esto no es cierto, al menos en 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

¿Es este el comportamiento correcto?

Respuestas:


9

FreeBSD (también OS X, y creo que NetBSD y OpenBSD) responderán a las solicitudes enviadas a las direcciones configuradas en la interfaz de bucle invertido, tal como lo harían para las direcciones en cualquier otra interfaz. Si desea una respuesta, primero debe asignar la dirección :

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

Sobre la lógica detrás de esta implementación, vea RFC 3330 :

127.0.0.0/8: este bloque se asigna para su uso como
dirección de bucle invertido de host de Internet . Un datagrama enviado por un protocolo de nivel superior a una
dirección en cualquier lugar dentro de este bloque debe regresar dentro del host.
Esto normalmente se implementa utilizando solo 127.0.0.1/32 para loopback ,
pero ninguna dirección dentro de este bloque debe aparecer en ninguna red en ningún
lugar [ RFC1700 , página 5].

(énfasis mío)
Linux y Windows están siendo "útiles" aquí, sin embargo, desde mi silla, responder una solicitud que se envió a una dirección no asignada a este host no es un comportamiento correcto ...


7

Veo el mismo comportamiento que usted describe en FreeBSD 8.1. Mac OS X, que comparte algo de ADN con FreeBSD, también parece mapear 127.0.0.1.

Windows 7 y Linux (debian con el kernel 2.6.26) parecen mapear el rango completo de direcciones como se describe en la cita de Wikipedia (y según lo prescrito en el RFC).

Para citar del RFC 3330:

127.0.0.0/8: este bloque se asigna para su uso como dirección de bucle invertido de host de Internet. Un datagrama enviado por un protocolo de nivel superior a una dirección en cualquier lugar dentro de este bloque debe regresar dentro del host. Esto normalmente se implementa utilizando solo 127.0.0.1/32 para loopback, pero ninguna dirección dentro de este bloque debe aparecer en ninguna red en ningún lugar [RFC1700, página 5].

Dependiendo de cuán estrictamente interprete la palabra "debería", algunos podrían argumentar que el comportamiento de FreeBSD / MacOS es incorrecto. Pero dado el uso ubicuo de 127.0.0.1 como la dirección de bucle invertido, dudo que sea importante.


3
+1 Por defecto, solo 127.0.0.1 se asigna a lo0. Aunque ciertamente puedes agregar el resto; No puedo imaginar muchas situaciones en las que importaría.
Chris S

También depende de cómo interprete "bucle de vuelta dentro del host". ¿Significa eso que el datagrama se entregará en algún lugar significativo? o simplemente lo que sigue en el RFC, que el datagrama no se entregará a otro host en la red. (Estoy de acuerdo con FreeBSD y Darwin, este último)
Chris S

También depende de cómo veas la "exactitud" de responder solicitudes en una dirección que no te ha sido asignada explícitamente. Siempre he sentido que si la dirección no te está asignada, no tienes que enviar respuestas como si fueran tuyas, con la posible excepción de las solicitudes de difusión.
voretaq7

También 1 por citar el mismo RFC lo hice :)
voretaq7

2
@ voretaq7 Lo cité totalmente primero. :)
eaj

0

Es contrarrestar la tendencia. No tenga a mano un cuadro de FreeBSD para confirmar si es FreeBSD o su configuración.

El RFC dice 127.0.0.1/24, por lo que debería responder.


1
En realidad, el RFC dice 127.0.0.0/8, pero no especifica qué direcciones específicas en ese rango usar: por convención, la primera dirección utilizable en ese rango (127.0.0.1) se asigna como localhost, pero podría usar 127.32 .194.75 en su propia implementación del sistema operativo si lo desea. (Si lo hace, puede sin embargo conseguir que linchados por los administradores de sistemas de ira ...)
voretaq7

0

La pregunta está completamente respondida sobre tres veces por ahora, así que solo quería agregar algunos centavos.

Tenga en cuenta que durante bastante tiempo la configuración predeterminada de ipfw descarta este tipo de paquetes:

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

así que con el firewall habilitado en lugar de

ping: sendto: Can't assign requested address

podrías obtener

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

PD. De hecho, puede haber un servidor construido sin INET(soporte de IPv4) y no tendrá incluso 127.0.0.1=)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.