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 ac1001e2TCP 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 ac100122TCP 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 ac100122TCP 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 ac100122TCP 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 ac1001e2TCP 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 ac100122TCP 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 ac1001e2TCP 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 ac100122TCP 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:48ping 172.16.1.34Pinging host 172.16.1.34 : 172.16.1.34ICMP Echo Reply:TTL 60 time = 0 msICMP Echo Reply:TTL 60 time = 0 msICMP Echo Reply:TTL 60 time = 0 msICMP Echo Reply:TTL 60 time = 0 msHost 172.16.1.34 replied to all 4 of the 4 pingsready 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 -numericActive connectionsProto 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.226Figura 7: cómo añadir un alias a una interfaz
