Avere due interfacce in un modulo sulla stessa sottorete non dà due interfacce in entrata e in uscita dal modulo. Mentre si ottengono due interfacce nel modulo, STCP userà una sola interfaccia quando si inviano pacchetti fuori dal modulo. Lo fa indipendentemente dall'interfaccia a cui un client si è connesso.
Ad esempio, date queste due interfacce sulla sottorete 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.11-2 IP: 172.16.1.226 MAC: 00:00:a8:43:52:22
Si noti in figura 1 che il pacchetto inviato a 172.16.1.226 utilizza l'indirizzo MAC di destinazione 00:00:a8:43:52:52:22 ma la risposta proviene da 00:00:a8:42:52:52:22, l'indirizzo MAC per 172.16.1.116 anche se nel pacchetto la risposta viene mostrata come proveniente da 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 - richiesta di collegamento al modulo (traccia presa sul cliente)
Se il modulo avvia una connessione invece di riceverne una, utilizzerà sempre la prima interfaccia (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 - richiesta di connessione dal modulo ad un altro server (traccia presa sul server)
Anche se ci si lega al secondo (226) indirizzo IP quando si invia il pacchetto che lascia attraverso la prima (116) interfaccia
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 - richiesta di connessione dal modulo ad un altro server (traccia presa su un altro server)
applicazione client vincolata all'interfaccia IP 172.16.1.226
Solo se la prima interfaccia (116) scende, il modulo passa a utilizzare la seconda (226). Mentre le connessioni alla seconda (226) interfaccia saranno mantenute, le connessioni alla prima (116) non funzioneranno.
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
. . .
L'interfaccia 172.16.1.116 non funziona - si noti la modifica dell'indirizzo MAC di origine
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 - Cambiamenti nel MAC quando la prima interfaccia fallisce (traccia presa sul client)
Come si fa a capire quale interfaccia verrà utilizzata per inviare il traffico?
Ci sono diversi modi. Il primo è quello di utilizzare packet_monitor o qualche altro analizzatore di protocollo sull'host remoto o sulla rete per valutare gli indirizzi Mac di origine, vedi figure da 1 a 4.
Il secondo è usare netstat per guardare l'interfaccia, generare un po' di traffico, eseguire nuovamente netstat e confrontare. Solo un'interfaccia dovrebbe aver incrementato il suo contatore di "frame trasmessi".
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 di netstat per confrontare il contatore di frame trasmessi
Il terzo modo è quello di connettersi ad un servizio su un altro sistema e vedere quale indirizzo sorgente locale viene utilizzato. A meno che non ci si leghi esplicitamente ad un altro indirizzo, l'indirizzo IP di origine corrisponderà all'interfaccia attiva.
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 - quale interfaccia viene utilizzata per le connessioni in uscita
A mio parere, avere più interfacce sulla stessa sottorete confonde le cose e di solito non vale la pena di confonderle. Se per qualche motivo si ha bisogno di indirizzi IP sulla stessa sottorete aggiungere un alias alla prima interfaccia.
ifconfig #sdlmux.m16.10.11-2 172.16.1.226 -add -alias
Aggiunta dell'indirizzo IP 172.16.1.226 all'interfaccia %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 - aggiunta di un alias ad un'interfaccia