Ir al contenido principal
El hecho de que un módulo tenga dos interfaces en la misma subred no significa que disponga de dos interfaces de entrada y salida. Aunque el módulo cuente con dos interfaces de entrada, el protocolo STCP utilizará solo una de ellas para enviar paquetes fuera del módulo. Esto ocurre independientemente de la interfaz a la que se haya conectado el cliente.

 

Por ejemplo, supongamos que tenemos estas dos interfaces en la subred 172.16.1.0/24
%phx_vos#sdlmux.m16.10.11-2 IP: 172.16.1.116 MAC: 00:00:a8:42:52:22
%phx_vos#sdlmux.m16.11.11-2 IP: 172.16.1.226 MAC: 00:00:a8:43:52:22

 

Obsérvese en la figura 1 que el paquete enviado a 172.16.1.226 utiliza la dirección MAC de destino 00:00:a8:43:52:22, pero la respuesta procede de 00:00:a8:42:52:22, la dirección MAC de 172.16.1.116, aunque en el paquete se indica que la respuesta procede de 172.16.1.226.

 

11:04:57.117 Xmit Ether Dst 00:00:a8:43:52:22  Src 00:00:a8:42:3b:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   2c, ID 2045, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  0363, Src ac100122, Dst ac1001e2
TCP from 172.16.1.34.49183 to 172.16.1.226.telnet
. . .
11:04:57.130 Rcvd Ether Dst 00:00:a8:42:3b:6e  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   2c, ID  7c8, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  1be0, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.telnet to 172.16.1.34.49183
. . .
Figura 1: solicitud de conexión al módulo (traza capturada en el cliente)
Si el módulo inicia una conexión en lugar de recibirla, siempre utilizará la primera interfaz (116).
13:01:36.479 Rcvd Ether Dst 00:00:a8:42:3b:6e  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   2c, ID 4a33, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  d9e2, Src ac100174, Dst ac100122
TCP from 172.16.1.116.49320 to 172.16.1.34.4680
. . .
Figura 2: solicitud de conexión del módulo a otro servidor (traza capturada en el servidor)
Aunque te conectes a la segunda dirección IP (226), cuando envías el paquete, este sale a través de la primera interfaz (116)
13:02:55.349 Rcvd Ether Dst 00:00:a8:42:3b:6e  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   2c, ID 4b7a, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  d82d, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.49321 to 172.16.1.34.4680
. . .
Figura 3: solicitud de conexión del módulo a otro servidor (traza capturada en el otro servidor)
aplicación de cliente vinculada a la interfaz IP 172.16.1.226
Solo si la primera interfaz (116) deja de funcionar, el módulo pasará a utilizar la segunda interfaz (226). Aunque se mantendrán las conexiones a la segunda interfaz (226), las conexiones a la primera interfaz (116) se interrumpirán.
13:14:43.884 Xmit Ether Dst 00:00:a8:43:52:22  Src 00:00:a8:42:3b:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   28, ID 5072, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  d339, Src ac100122, Dst ac1001e2
TCP from 172.16.1.34.49186 to 172.16.1.226.telnet
. . .
13:14:43.885 Rcvd Ether Dst 00:00:a8:42:3b:6e  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   28, ID 53ef, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  cfbc, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.telnet to 172.16.1.34.49186
. . .
La interfaz 172.16.1.116 falla: fíjate en el cambio en la dirección MAC de origen
13:15:56.718 Xmit Ether Dst 00:00:a8:43:52:22  Src 00:00:a8:42:3b:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   29, ID 50e7, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  d2c3, Src ac100122, Dst ac1001e2
TCP from 172.16.1.34.49186 to 172.16.1.226.telnet
. . .
13:15:56.719 Rcvd Ether Dst 00:00:a8:42:3b:6e  Src 00:00:a8:43:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   29, ID 5552, Flg/Frg    0, TTL 3c,  Prtl  6
Cksum  ce58, Src ac1001e2, Dst ac100122
TCP from 172.16.1.226.telnet to 172.16.1.34.49186
. . .
Figura 4 – Cambios en la MAC cuando falla la primera interfaz (traza tomada en el cliente)
¿Cómo se puede saber qué interfaz se utilizará para enviar el tráfico?
Hay varias formas de hacerlo. La primera consiste en utilizar packet_monitor u otro analizador de protocolos en el host remoto o en la red para evaluar las direcciones MAC de origen; véanse las figuras 1 a 4.
Lo segundo es utilizar netstat para examinar la interfaz, generar algo de tráfico, volver a ejecutar netstat y comparar los resultados. Solo una interfaz debería haber incrementado su contador de «tramas transmitidas».
netstat -interface #sdlmux.m16.10.11-2; netstat -interface #sdlmux.m16.11.11-2
. . .
MAC Statistics:
Received frames                          : 1598960
Received multicast and broadcast frames  : 1564503
Received octets                          : 258513766
Transmitted frames                       : 531
Transmitted octets                       : 50850
. . .
MAC Statistics:
Received frames                          : 1603838
Received multicast and broadcast frames  : 1569292
Received octets                          : 259291185
Transmitted frames                       : 15
Transmitted octets                       : 947
. . .
ready  13:29:48
ping 172.16.1.34
Pinging host 172.16.1.34 : 172.16.1.34
ICMP Echo Reply:TTL 60 time = 0 ms
ICMP Echo Reply:TTL 60 time = 0 ms
ICMP Echo Reply:TTL 60 time = 0 ms
ICMP Echo Reply:TTL 60 time = 0 ms
Host 172.16.1.34 replied to all 4 of the 4 pings
ready  13:29:55
netstat -interface #sdlmux.m16.10.11-2; netstat -interface #sdlmux.m16.11.11-2
. . .
MAC Statistics:
Received frames                          : 1603142
Received multicast and broadcast frames  : 1568591
Received octets                          : 259187870
Transmitted frames                       : 535
Transmitted octets                       : 51274
. . .
MAC Statistics:
Received frames                          : 1607492
Received multicast and broadcast frames  : 1572869
Received octets                          : 259880655
Transmitted frames                       : 15
Transmitted octets                       : 947
. . .
Figura 5: Uso de netstat para comparar el contador de tramas transmitidas
La tercera forma consiste en conectarse a un servicio en otro sistema y comprobar qué dirección de origen local se utiliza. A menos que se asigne explícitamente otra dirección, la dirección IP de origen corresponderá a la interfaz activa.
netstat -numeric
Active connections
Proto Recv-Q Send-Q  Local Address      Foreign Address    (state)
. . .
tcp        0      0  172.16.1.116:49369 172.16.1.34:23     ESTABLISHED
. . .
Figura 6: ¿Qué interfaz se utiliza para las conexiones salientes?
En mi opinión, tener varias interfaces en la misma subred solo sirve para complicar las cosas y, por lo general, no merece la pena. Si por alguna razón necesitas que las direcciones IP estén en la misma subred, añade un alias a la primera interfaz.
ifconfig #sdlmux.m16.10.11-2 172.16.1.226 -add -alias
Añadiendo la dirección IP 172.16.1.226 a la interfaz %phx_vos#sdlmux.m16.10.11-2
%phx_vos#sdlmux.m16.10.11-2: <UP, BROADCAST, RUNNING, NOFORWARDBROADCAST, KEEPAL
+IVE>
172.16.1.116 netmask 0xffffff00 broadcast 172.16.1.255
Number of additional address(es): 1
172.16.1.226
Figura 7: cómo añadir un alias a una interfaz