Protocolo de Descubrimiento de Vecinos IPv6 (NDP): Cómo se Encuentran los Dispositivos
Profundiza en NDP, el protocolo que reemplaza a ARP en IPv6. Aprende sobre Router Solicitation, Neighbor Solicitation y cómo funciona la resolución de direcciones.
NDP Reemplaza Más Que Solo ARP#
En IPv4, la resolución de direcciones usa ARP, un protocolo separado de capa 2. El descubrimiento de enrutadores usa ICMP Router Discovery o DHCP. Los mensajes de redirección usan ICMP. La detección de direcciones duplicadas no existe en absoluto.
IPv6 consolida todas estas funciones en el Protocolo de Descubrimiento de Vecinos. NDP maneja:
- Resolución de direcciones (trabajo de ARP)
- Descubrimiento de enrutadores (encontrar gateways predeterminados)
- Descubrimiento de prefijos (aprender prefijos de red para autoconfiguración)
- Descubrimiento de parámetros (MTU, límite de saltos)
- Autoconfiguración de direcciones (SLAAC)
- Detección de Direcciones Duplicadas (prevenir conflictos)
- Alcanzabilidad de vecinos (¿mi vecino sigue ahí?)
- Determinación del siguiente salto (¿qué enrutador debería usar?)
- Mensajes de redirección (existen mejores rutas)
NDP se ejecuta completamente sobre ICMPv6, usando cinco tipos de mensajes (133-137). No es opcional. Bloquea NDP e IPv6 deja de funcionar.
TL;DR - Resumen rápido
Puntos clave:
- NDP usa cinco tipos de mensajes ICMPv6: Router Solicitation/Advertisement, Neighbor Solicitation/Advertisement, Redirect
- Direcciones de nodo solicitado (ff02::1:ffxx:xxxx) hacen que la resolución de direcciones sea eficiente sin broadcast
- SLAAC usa Router Advertisements para autoconfiguración sin servidor
- Detección de Direcciones Duplicadas previene conflictos de direcciones IP
- Neighbor Unreachability Detection rastrea si vecinos todavía están alcanzables
Ir a: Tipos de mensajes | Resolución de direcciones | SLAAC | DAD
Los Cinco Tipos de Mensajes NDP#
Todos los mensajes NDP son paquetes ICMPv6 con números de tipo específicos. Entender estos cinco mensajes significa entender cómo operan las redes IPv6 a nivel fundamental.
| Tipo | Nombre | Enviado Por | Propósito | Destino |
|---|---|---|---|---|
| 133 | Router Solicitation (RS) | Hosts | Solicitar información del enrutador | ff02::2 (all-routers) |
| 134 | Router Advertisement (RA) | Enrutadores | Anunciar presencia y configuración | ff02::1 (all-nodes) o unicast |
| 135 | Neighbor Solicitation (NS) | Cualquier nodo | Resolución de direcciones, alcanzabilidad | Multicast solicited-node o unicast |
| 136 | Neighbor Advertisement (NA) | Cualquier nodo | Respuesta a NS | Unicast o ff02::1 |
| 137 | Redirect | Enrutadores | Existe mejor siguiente salto | Unicast (remitente original) |
Cada mensaje NDP tiene un requisito de seguridad común: Hop Limit debe ser 255. Esto previene ataques fuera del enlace porque los enrutadores decrementan el límite de saltos. Los paquetes de atacantes remotos llegan con límite de saltos < 255 y son descartados.
Router Solicitation (Tipo 133)#
Los hosts envían Router Solicitations cuando quieren que los enrutadores se anuncien inmediatamente en lugar de esperar el siguiente Router Advertisement programado.
Estructura ICMPv6:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
| (133) | (0) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-Cuándo se envía:
- La interfaz se activa
- El host arranca
- La pila IPv6 se inicializa
- El host necesita configuración rápidamente
Dirección de origen:
- Dirección link-local (si está configurada)
- :: (no especificada, si aún no hay dirección)
Destino: ff02::2 (dirección multicast all-routers)
Hop Limit: 255 (requerido)
Sin RS, los hosts esperarían Router Advertisements periódicos (enviados cada pocos minutos). RS permite a los hosts obtener configuración en segundos en lugar de minutos, acelerando la inicialización de red.
Router Advertisement (Tipo 134)#
Los enrutadores envían Router Advertisements para anunciar su presencia, publicitar prefijos de red y proporcionar parámetros de configuración. Esta es la base de Stateless Address Autoconfiguration (SLAAC).
Estructura ICMPv6:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
| (134) | (0) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Prf|Resvd| Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-Campos:
Cur Hop Limit (8 bits): Valor recomendado para el campo Hop Limit en paquetes salientes. Típicamente 64. Los hosts copian esto en su campo Hop Limit de cabecera IPv6.
Banderas (8 bits):
- M (Managed Address Configuration): Usar DHCPv6 para direcciones
- O (Other Configuration): Usar DHCPv6 para otra configuración (DNS, NTP, etc.)
- H (Home Agent): El enrutador es un agente de hogar IPv6 móvil (raramente usado)
- Prf (Router Preference): Preferencia de 2 bits (00=medio, 01=alto, 11=bajo)
- Reserved: 3 bits
Router Lifetime (16 bits): Cuánto tiempo (en segundos) usar este enrutador como gateway predeterminado. 0 significa «no soy un enrutador predeterminado». Máximo 9000 segundos (2.5 horas).
Combinaciones de banderas:
| M | O | Comportamiento |
|---|---|---|
| 0 | 0 | Solo SLAAC, sin DHCPv6 (más común) |
| 0 | 1 | SLAAC para direcciones, DHCPv6 para DNS/NTP/etc. |
| 1 | 0 | DHCPv6 para direcciones (inusual, raramente usado) |
| 1 | 1 | DHCPv6 para todo (redes empresariales) |
Los Router Advertisements Son Críticos
Bloquea ICMPv6 tipo 134 y SLAAC deja de funcionar. Los hosts solo tendrán direcciones link-local (fe80::/10) sin conectividad global. Esta es una de las configuraciones erróneas de IPv6 más comunes: firewalls que bloquean todo ICMPv6 sin entender qué tipos son esenciales.
Neighbor Solicitation (Tipo 135)#
Neighbor Solicitation es el reemplazo de IPv6 para ARP. Resuelve direcciones IPv6 a direcciones de capa de enlace (MAC) y verifica que los vecinos sigan siendo alcanzables.
Estructura ICMPv6:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
| (135) | (0) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-Tres casos de uso:
1. Resolución de Direcciones (Reemplazo de ARP)#
El host A necesita enviar un paquete al host B en el mismo enlace pero no conoce la dirección MAC de B.
Proceso:
- A verifica su caché de vecinos: sin entrada para B
- A envía NS a la dirección multicast solicited-node de B
- B recibe NS y responde con NA conteniendo su MAC
- A almacena en caché el mapeo y envía el paquete original
Cálculo de dirección multicast solicited-node:
IPv6 usa direcciones multicast solicited-node en lugar de broadcast para eficiencia. Solo los hosts con direcciones similares escuchan cada grupo solicited-node.
Fórmula: ff02::1:ff + últimos 24 bits de la dirección objetivo
Ejemplos:
2001:db8::10 -> ff02::1:ff00:10
2001:db8::a4b2:c3d4:e5f6:7890 -> ff02::1:ff:f6:7890
fe80::1 -> ff02::1:ff00:1Esto reduce el procesamiento innecesario. En IPv4, las difusiones ARP llegan a cada host en la red. En IPv6, solo los hosts cuyas direcciones terminan con los mismos 24 bits se unen al grupo multicast y reciben el NS.
2. Detección de Inalcanzabilidad de Vecinos (NUD)#
Verificar que un vecino previamente alcanzable sigue siendo alcanzable.
Proceso:
- El host no ha recibido tráfico del vecino recientemente
- El host envía NS (unicast) al vecino
- Si se recibe NA, el vecino es alcanzable
- Si no hay respuesta después de reintentos, el vecino se considera inalcanzable
3. Detección de Direcciones Duplicadas (DAD)#
Antes de usar una dirección IPv6, los hosts realizan DAD para asegurar que ningún otro nodo la está usando. Esto previene conflictos de direcciones en SLAAC.
Proceso:
- El host genera dirección tentativa (vía SLAAC, DHCPv6 o configuración manual)
- El host envía NS con origen :: y objetivo = dirección tentativa
- Si alguien responde con NA, la dirección ya está en uso (conflicto)
- Si no hay respuesta después del tiempo de espera, la dirección es única y puede usarse
Tiempo de espera DAD: Típicamente 1 segundo. El host espera este tiempo para una respuesta. Si no hay respuesta, se asume que la dirección es única.
Neighbor Advertisement (Tipo 136)#
Enviado en respuesta a Neighbor Solicitation o no solicitado para anunciar cambios de dirección/enlace.
Estructura ICMPv6:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
| (136) | (0) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Target Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-Banderas:
- R (Router): El remitente es un enrutador
- S (Solicited): El anuncio es una respuesta a NS
- O (Override): Anular entrada de caché existente
Cuándo se envía:
- Respuesta a Neighbor Solicitation (S=1)
- Anuncio no solicitado de cambio de dirección (S=0)
- NA gratuito para actualizar vecinos después de cambio de dirección de capa de enlace
Redirect (Tipo 137)#
Los enrutadores envían mensajes Redirect para informar a los hosts que existe un mejor enrutador de primer salto para un destino específico.
Cuándo se envía:
El enrutador R1 recibe un paquete del Host A destinado al Host B. R1 sabe que el Enrutador R2 (en el mismo enlace que A) es un mejor siguiente salto para B. R1 reenvía el paquete a R2 Y envía un Redirect a A diciéndole que use R2 directamente en el futuro.
Consideraciones de seguridad:
Los mensajes Redirect pueden ser abusados. Un atacante en el enlace local podría enviar Redirects maliciosos para:
- Enrutar tráfico a través de la máquina del atacante (hombre en el medio)
- Blackhole del tráfico redirigiendo a enrutador inexistente
- Crear bucles de enrutamiento
Protecciones:
- SEND (Secure Neighbor Discovery) autentica mensajes Redirect
- Muchos hosts ignoran Redirects de enrutadores que no son gateway predeterminado
- Algunas redes conscientes de seguridad deshabilitan completamente el procesamiento de Redirect
- Los Redirects deben venir del enrutador de primer salto actual (verificado por hosts)
SLAAC: Autoconfiguración de Direcciones#
Combinar Router Advertisements con Detección de Direcciones Duplicadas crea Stateless Address Autoconfiguration. Los hosts se configuran a sí mismos sin servidores DHCP.
Proceso SLAAC completo:
Paso 1: La interfaz se activa
El host habilita IPv6 en la interfaz eth0.
Paso 2: Generar dirección link-local
fe80:: + identificador de interfaz
fe80::a4b2:c3d4:e5f6:7890 (si usa IID derivado de MAC)
fe80::1234:5678:9abc:def0 (si usa IID aleatorio)Paso 3: Realizar DAD en link-local
Enviar NS con origen :: para verificar que la dirección fe80:: es única.
Paso 4: Enviar Router Solicitation
Cabecera IPv6:
Origen: fe80::a4b2:c3d4:e5f6:7890
Destino: ff02::2
Hop Limit: 255
ICMPv6:
Tipo: 133 (Router Solicitation)Paso 5: Recibir Router Advertisement
ICMPv6:
Tipo: 134 (Router Advertisement)
Banderas: M=0, O=0 (SLAAC)
Información de Prefijo:
Prefijo: 2001:db8:1234:5678::/64
Banderas: A=1 (autónomo)
Tiempo de Vida Válido: 86400
Tiempo de Vida Preferido: 14400Paso 6: Generar dirección global
Prefijo: 2001:db8:1234:5678::/64
IID: a4b2:c3d4:e5f6:7890
Resultado: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890Paso 7: Realizar DAD en dirección global
Enviar NS para verificar que 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890 es única.
Tiempo total: Unos pocos segundos.
Extensiones de Privacidad (RFC 4941):
Los IID derivados de MAC son rastreables a través de redes. Las Extensiones de Privacidad generan IID aleatorios que cambian periódicamente.
Original: 2001:db8:1234:5678:a4b2:c3d4:e5f6:7890 (estático)
Privacidad: 2001:db8:1234:5678:1a2b:3c4d:5e6f:7a8b (cambia diariamente)La mayoría de los sistemas operativos modernos habilitan extensiones de privacidad por defecto para conexiones salientes mientras mantienen la dirección estable para conexiones entrantes.
Consideraciones de Seguridad#
NDP tiene vulnerabilidades porque fue diseñado asumiendo redes locales confiables. Los atacantes en el mismo enlace pueden:
Router Advertisements Falsos#
El atacante envía RAs falsos con:
- Prefijo incorrecto (blackhole de tráfico o enrutar a través del atacante)
- Tiempos de vida cortos (forzar reconfiguración constante)
- Servidores DNS maliciosos
Impacto: Control completo sobre la configuración del host.
Mitigación:
- RA Guard: Característica del switch que bloquea RAs desde puertos no-enrutador
- SEND (Secure Neighbor Discovery): Autenticación criptográfica (complejo, raramente desplegado)
- Preferencia de enrutador: Usar valores de alta preferencia en enrutadores legítimos
Envenenamiento de Neighbor Advertisement#
El atacante envía NAs falsificados reclamando propiedad de la dirección IPv6 de otro dispositivo.
Impacto: Ataques de hombre en el medio, intercepción de tráfico.
Mitigación:
- SEND: Autentica NAs
- Seguridad de puerto: Los switches aplican enlaces de direcciones MAC
- Monitoreo: Detectar direcciones MAC duplicadas
Ataques DAD#
El atacante responde a cada solicitud DAD, previniendo la configuración de direcciones.
Impacto: Los hosts no pueden obtener direcciones, sin conectividad.
Mitigación:
- SEND: Autentica mensajes DAD
- Limitación de velocidad: Limitar NAs desde origen único
- Direcciones estáticas: Evitar SLAAC completamente (no escalable)
Realidad: La mayoría de las redes no usan SEND debido a la complejidad. RA Guard en switches es la defensa práctica para redes empresariales.
Resolución de Problemas de NDP#
El host no tiene dirección global#
Síntomas:
- Solo direcciones fe80::
- Puede hacer ping a link-local, no global
- Sin ruta predeterminada
Diagnóstico:
# Verificar Router Advertisements
sudo tcpdump -i eth0 -vv 'icmp6 && ip6[40] == 134'
# Verificar aceptación de RA
sysctl net.ipv6.conf.eth0.accept_ra
# Debe ser 1 o 2 para hosts
# Enviar RS manualmente
rdisc6 eth0Causas comunes:
- Sin enrutador en el enlace
- Firewall bloqueando tipo 134
- accept_ra deshabilitado
- Reenvío IPv6 habilitado (deshabilita procesamiento de RA)
Solución: Habilitar enrutador, permitir ICMPv6 tipo 134, establecer accept_ra=1.
Artículos Relacionados#
- ICMPv6 Explicado - NDP se ejecuta sobre ICMPv6. Entiende el protocolo subyacente.
- Tipos de Direcciones IPv6 - Aprende sobre link-local, multicast solicited-node y otros tipos de direcciones usados por NDP.
- Seguridad IPv6 - Asegura NDP contra ataques mientras permites funcionalidad esencial.
Prueba NDP en Acción
Usa nuestra herramienta Ping para activar la resolución de direcciones y Traceroute para ver cómo los hosts descubren enrutadores de siguiente salto.
Preguntas Frecuentes#
¿Por qué NDP usa multicast en lugar de broadcast como ARP?
El multicast es más eficiente. Las difusiones ARP golpean a cada host en la red: todos deben procesar la trama incluso si no son el objetivo. NDP usa direcciones multicast solicited-node calculadas a partir de la dirección IPv6 del objetivo. Solo los hosts con direcciones coincidentes se unen a ese grupo multicast y reciben el paquete. Los hosts filtran multicasts no coincidentes en hardware (NIC), reduciendo la carga de CPU. En redes grandes con miles de hosts, esto hace una diferencia de rendimiento significativa.
¿Puedo deshabilitar NDP como puedo deshabilitar ARP?
No. NDP es obligatorio para la operación de IPv6. Maneja la resolución de direcciones, descubrimiento de enrutadores y autoconfiguración. Deshabilita NDP e IPv6 deja de funcionar completamente. A diferencia de IPv4 donde puedes usar entradas ARP estáticas, IPv6 requiere NDP para Router Advertisements (que proporcionan gateways predeterminados y prefijos). Incluso con vecinos estáticos, no tendrías forma de aprender enrutadores o autoconfigurar direcciones.
¿Cómo previene la Detección de Direcciones Duplicadas los conflictos?
Antes de usar cualquier dirección, los hosts envían un Neighbor Solicitation con dirección de origen :: (no especificada) y objetivo establecido en la dirección que quieren usar. Si otro host ya está usando esa dirección, responde con un Neighbor Advertisement. El host solicitante ve la respuesta, detecta el conflicto y debe elegir una dirección diferente. Si no llega respuesta en ~1 segundo, se asume que la dirección es única. DAD se ejecuta tanto para direcciones link-local como globales.
¿Qué son las direcciones multicast solicited-node?
Las direcciones multicast solicited-node se derivan de los últimos 24 bits de una dirección IPv6 usando la fórmula ff02::1:ff:XX:XXXX. Cada dirección IPv6 automáticamente se une a su grupo multicast solicited-node correspondiente. Al realizar resolución de direcciones, el remitente envía NS a la dirección solicited-node en lugar de broadcast. Solo los hosts con direcciones que terminan en los mismos 24 bits lo reciben. Esto reduce el procesamiento innecesario comparado con ARP basado en broadcast.
¿Por qué los paquetes NDP deben tener Hop Limit 255?
Seguridad. El NDP legítimo siempre se origina en el enlace local y establece Hop Limit a 255. Los enrutadores decrementan Hop Limit al reenviar, por lo que los paquetes de atacantes remotos llegan con Hop Limit < 255. Al rechazar paquetes NDP con Hop Limit != 255, los hosts se protegen contra atacantes fuera del enlace que envían Router Advertisements, Neighbor Advertisements o Redirects falsificados. Esta simple verificación previene muchos ataques remotos sin requerir autenticación compleja.
¿Debería desplegar SEND (Secure Neighbor Discovery)?
Probablemente no. SEND proporciona autenticación criptográfica para NDP usando criptografía de clave pública, previniendo ataques de falsificación. En teoría es genial. En la práctica es complejo, requiere infraestructura PKI, tiene pobre soporte de sistema operativo y añade latencia a operaciones sensibles al tiempo como la resolución de direcciones. La mayoría de las redes usan mitigaciones más simples: RA Guard en switches (bloquea RAs desde puertos no-enrutador), monitoreo de RAs falsos y seguridad física/de capa de enlace. SEND es adecuado para entornos de alta seguridad dispuestos a invertir en la infraestructura y complejidad.