Ir al contenido principal

STCP ha tenido detección de direcciones IP duplicadas durante bastante tiempo, pero un cambio en el comportamiento de Microsoft Windows 2008 y 7 ha añadido una interesante arruga.

Primero repasemos cómo funciona.

La detección de direcciones IP duplicadas se basa en el protocolo de resolución de direcciones (ARP).

La herramienta packet_monitor muestra un paquete ARP en dos líneas como

11:13:43.123 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 00:13:d4:59:7a:da Tipo 0806 (ARP)
Objetivo del ARP Req. 164.152.77.217 Src 164.152.77.34 [00:13:d4:59:7a:da]

Donde

Rcvd Indica que se recibieron bytes. La otra opción es Xmit que indica que los bytes fueron transmitidos
Éter Indica que sigue una cabecera de marco Ethernet
Dst ff:ff:ff:ff:ff:ff:ff El destino Ethernet; en este caso la dirección de emisión
Src 00:13:d4:59:7a:da La dirección de la fuente de Ethernet
Tipo 0806 (ARP) Indica que se trata de un marco ARP, tipo 0806
ARP Indica que sigue un encabezado de marco ARP
Req. Indica que es un marco de solicitud (buscando la dirección MAC). La otra opción es Rep indicando una respuesta.
Objetivo 164.152.77.217 La dirección IP del objetivo
Src 164.152.77.34 La dirección IP del host de envío
[00:13:d4:59:7a:da] La dirección Ethernet del host de envío

STCP mira el Src y si coincide con la dirección IP de la interfaz en la que se recibió, entonces STCP informa de una dirección IP duplicada en el syserr_log con un mensaje formateado como

<time> WARNING (<index>): MAC address <MAC address> is using our IP address <IP address>

Por ejemplo:

11:13:43 ADVERTENCIA(5): La dirección MAC 00:13:d4:59:7a:da está usando nuestra dirección IP 164.152.77.34

El "MAC" significa Control de Acceso a los Medios y conocer la dirección MAC te dará algunas pistas para identificar al anfitrión infractor. Los primeros 3 bytes de la dirección se llaman el Identificador Único de la Organización (OUI) y pueden ser usados para determinar algo sobre la tarjeta Ethernet o el host en el que se encuentra. Por ejemplo, Stratus tiene dos OUI registrados, 00-00-A8 y 00-04-FC. Puede buscar cualquier OUI en http://standards.ieee.org/develop/regauth/oui/public.html.

Muchos hosts, incluyendo STCP, cuando arrancan o cuando se configura una interfaz IP envían lo que se conoce como un ARP gratuito. Este marco básicamente busca su propia dirección IP, si obtiene una respuesta sabe que la dirección IP está en uso. He aquí un ejemplo de un trazado packet_monitor que muestra el ARP gratuito enviado por otro módulo VOS cuando saca a relucir una de sus interfaces. Obsérvese que tanto el Objetivo y Src tienen la misma dirección IP.

10:19:53.045 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 00:00:a8:41:3b:6e Tipo 0806 (ARP)
ARP Req. Objetivo 164.152.77.34 Src 164.152.77.34 [00:00:a8:41:3b:6e]

Bien, entonces, ¿qué es esta arruga que mencioné al principio de este post?

A partir de Windows 2008 y Windows 7, la pila TCP de Microsoft envía el ARP gratuito con el campo Src fijado en 0.0.0.0.

10:45:10.530 Rcvd Ether Dst ff:ff:ff:ff:ff:ff Src 1c:c1:de:b4:76:60 Tipo 0806 (ARP)
Objetivo del ARP Req. 164.152.77.34 Src 0.0.0.0 [1c:c1:de:b4:76:60]

El resultado es que STCP piensa que es una consulta "normal" para su dirección Ethernet y responde con una respuesta normal

10:45:10.530 Xmit Ether Dst 1c:c1:de:b4:76:60 Src 00:00:a8:41:3b:6e Tipo 0806 (ARP)
ARP Rep Objetivo 0.0.0.0 [1c:c1:de:b4:76:60] Src 164.152.77.34 [00:00:a8:41:3b:6e]

No registra ninguna indicación de una dirección IP duplicada. La buena noticia es que la pila de Windows reconoce la duplicación y cambiará a una dirección local de enlace de la forma 169.254.X.Y.

¿Por qué Microsoft hizo este cambio? Parece que muchas pilas TCP (incluyendo STCP) actualizarán su entrada de caché ARP para la dirección IP de origen con la dirección Ethernet incluida en el marco ARP. Si la dirección IP es un duplicado, se terminan rompiendo las conexiones actuales a la dirección IP duplicada, ya que los paquetes son redirigidos al host duplicado. Al cambiar el campo Src a 0.0.0.0 Microsoft evita que las pilas TCP (incluyendo STCP) actualicen sus entradas de caché ARP.