Newsgroup: it.comp.macintosh
Titolo: (hacking) AV di iChat AV in nat [lunghissimo e pure un po' ot]

Ehilà,
sto facendo delle prove di chat vocale con iChat AV. Ci sono dei casi in 
cui non funziona. Mi appropinquo pertanto ad enumerarvi le conclusioni.
Caso 1: i due utenti sono affacciati direttamente su internet senza 
gateway di mezzo
Risultato: "va una cocca", senza problemi.
Caso 2: uno dei due utenti ha un gateway tra lui e internet, e l'altro no
Risultato: funziona uguale in entrambe le direzioni (anche se il 
destinatario è quello dietro nat)
Caso 3: tutti e due sono dietro gateway
Risultato: non va una ceppa.
Approfondimento: proprio non va, nemmeno se le due sottoreti private 
sono diverse.
Ho giustappunto fatto varie prove con And(y), che ha un router adsl le 
cui porte sono TUTTE mappate verso il suo mac (quindi è *quasi* come se 
fosse direttamente su internet; quasi perché c'è sempre il nat di mezzo).
Credo che sia equivalente al nat/masquerading, o almeno spero.
Io invece ho un gateway linux tra me e il mondo.
Sul mio linux *ho* il modulo ip_masq_h323, tantevvero che ohphoneX 
funziona (almeno in uscita) e netmeeting, quando usavo il pc, pure.
Peccato che iChat AV *non* sia pienamente h323, anche se sembra averne 
alcune caratteristiche (per esempio due porte a casaccio aperte molto in 
alto). Il modulo infatti non viene inizializzato se viene attivata una 
conversazione vocale (che funzioni o meno).
La situazione è questa:
ip del mio mac -> 192.168.0.6
ip esterno mio -> 151.38.3.230
ip del mac di And(y) -> 192.168.1.10
ip esterno di And(y) -> 217.133.216.6
Come si vede, le due sottoreti *sono* diverse.
Mi sono quindi armato di tcpdump ed ecco cosa ho visto...
Questo è un dump dei dati sulla ppp0 del gateway linux:
...
15:22:25.254745 151.38.3.230.61724 > 217.133.216.6.12121: udp 686
15:22:25.755803 151.38.3.230.61725 > 192.168.1.10.5060: udp 671
15:22:26.255961 151.38.3.230.61725 > 192.168.1.10.5060: udp 671
...
Curioso no?
Dal mac invece ho questo:
...
15:25:42.918581 innocence.sogno.net.5060 > 
ppp-217-133-216-6.cust-adsl.tiscali.it.12157: udp 686
15:25:43.419708 innocence.sogno.net.5060 > 192.168.1.10.5060: udp 670
15:25:43.919928 innocence.sogno.net.5060 > 192.168.1.10.5060: udp 670
15:25:44.920139 innocence.sogno.net.5060 > 192.168.1.10.5060: udp 670
15:25:45.923545 innocence.sogno.net.5060 > snatmap.mac.com.5678: udp 16
15:25:46.126610 snatmap.mac.com.5678 > innocence.sogno.net.5060: udp 16 
[tos 0x38]
15:25:46.127323 innocence.sogno.net.5060 > 
adsl-230-3.38-151.net24.it.61719: udp 16
...
Ancora più curioso. (nota: il tiscali è And(y) e innocence è l'host 
*interno* del mio mac, ovvero 192.168.0.6).
"
snatmap.mac.com
 sembra" proprio una mappa per il nat che viene usata 
per stabilire la connessione tra due macchine quando c'è il nat di mezzo.
Però non funziona se sono nattate tutte e due.
E allora mi armo di tcpdump -X e vedo cosa c'è dentro.
...
15:32:38.607134 innocence.sogno.net.5060 > snatmap.mac.com.5678: udp 16
0x0000   4500 002c 8e2b 0000 4011 2158 c0a8 0006        E..,.+..@.!X....
0x0010   11fa f895 13c4 162e 0018 9e4a 0000 0001        ...........J....
0x0020   3a4b 31f7 0000 0000 0000 0000                  :K1.........
15:32:38.810389 snatmap.mac.com.5678 > innocence.sogno.net.5060: udp 16 
[tos 0x38] 
0x0000   4538 002c 6950 0000 2811 5dfb 11fa f895        E8.,iP..(.].....
0x0010   c0a8 0006 162e 13c4 0018 2a78 0000 0002        ..........*x....
0x0020   3a4b 31f7 68d9 fc19 0ede 0000 746d 4db0        :K1.h.......tmM.
0x0030   55a4                                           U.
15:32:44.496194 innocence.sogno.net.16384 > snatmap.mac.com.5678: udp 16
0x0000   4500 002c 8e37 0000 4011 214c c0a8 0006        E..,.7..@.!L....
0x0010   11fa f895 4000 162e 0018 2bfc 0000 0001        ....@.....+.....
0x0020   06ff c958 0000 0000 0000 e1fc                  ...X........
15:32:44.698909 snatmap.mac.com.5678 > innocence.sogno.net.16384: udp 16 
[tos 0x38] 
0x0000   4538 002c 9f7d 0000 2811 27ce 11fa f895        E8.,.}..(.'.....
0x0010   c0a8 0006 162e 4000 0018 b82a 0000 0002        ......@....*....
0x0020   06ff c958 68d9 fc19 0edd e1fc 001d 7e22        ...Xh.........~"
0x0030   86a3                                           ..
15:32:44.699639 innocence.sogno.net.16385 > snatmap.mac.com.5678: udp 16
0x0000   4500 002c 8e39 0000 4011 214a c0a8 0006        E..,.9..@.!J....
0x0010   11fa f895 4001 162e 0018 3131 0000 0001        ....@.....11....
0x0020   0914 c20d 0000 0000 0000 e1fc                  ............
15:32:45.050690 snatmap.mac.com.5678 > innocence.sogno.net.16385: udp 16 
[tos 0x38] 
0x0000   4538 002c 695b 0000 2811 5df0 11fa f895        E8.,i[..(.].....
0x0010   c0a8 0006 162e 4001 0018 bd60 0000 0002        ......@....`....
0x0020   0914 c20d 68d9 fc19 0edc e1fc aa31 bda9        ....h........1..
0x0030   33bb                                           3.
15:32:45.052088 innocence.sogno.net.16386 > snatmap.mac.com.5678: udp 16
0x0000   4500 002c 8e3a 0000 4011 2149 c0a8 0006        E..,.:..@.!I....
0x0010   11fa f895 4002 162e 0018 2f19 0000 0001        ....@...../.....
0x0020   4920 8418 0000 0000 0000 e1fc                  I...........
15:32:45.256437 snatmap.mac.com.5678 > innocence.sogno.net.16386: udp 16 
[tos 0x38] 
0x0000   4538 002c 9f81 0000 2811 27ca 11fa f895        E8.,....(.'.....
0x0010   c0a8 0006 162e 4002 0018 bb49 0000 0002        ......@....I....
0x0020   4920 8418 68d9 fc19 0edb e1fc 004f b7ab        I...h........O..
0x0030   9d94                                           ..
15:32:45.257195 innocence.sogno.net.16387 > snatmap.mac.com.5678: udp 16
0x0000   4500 002c 8e3b 0000 4011 2148 c0a8 0006        E..,.;..@.!H....
0x0010   11fa f895 4003 162e 0018 1ffa 0000 0001        ....@...........
0x0020   6882 73d4 0000 0000 0000 e1fc                  h.s.........
15:32:45.462686 snatmap.mac.com.5678 > innocence.sogno.net.16387: udp 16 
[tos 0x38] 
0x0000   4538 002c 695f 0000 2811 5dec 11fa f895        E8.,i_..(.].....
0x0010   c0a8 0006 162e 4003 0018 ac2b 0000 0002        ......@....+....
0x0020   6882 73d4 68d9 fc19 0eda e1fc 010b 13dd        h.s.h...........
0x0030   de15                                           ..
15:32:49.971925 innocence.sogno.net.5060 > snatmap.mac.com.5678: udp 16
0x0000   4500 002c 8e4a 0000 4011 2139 c0a8 0006        E..,.J..@.!9....
0x0010   11fa f895 13c4 162e 0018 3de7 0000 0001        ..........=.....
0x0020   268e 6617 0000 0000 0000 4000                  &.f.......@.
15:32:50.175435 snatmap.mac.com.5678 > innocence.sogno.net.5060: udp 16 
[tos 0x38] 
0x0000   4538 002c 6973 0000 2811 5dd8 11fa f895        E8.,is..(.].....
0x0010   c0a8 0006 162e 13c4 0018 ca14 0000 0002        ................
0x0020   268e 6617 68d9 fc19 0ede 4000 002d afe4        &.f.h.....@..-..
0x0030   abac                                           ..
...
Interessante, direi. In pratica il mio mac (192.168.0.6, in esadecimale 
è c0a80006) gli dice "guarda che io ho questo indirizzo interno", e 
snatmap risponde dicendo "ok ho capito il tuo indirizzo è questo" e poi 
presumibilmente lo passa all'altra persona.
Perché? Perché il problema del nat nell'h323 e protocolli simili sta - 
CREDO - nell'intestazione dei pacchetti, che devono avere come 
destinazione l'indirizzo privato e non quello pubblico (a meno che il 
software non se ne renda conto). Questo punto comunque non mi convince 
molto.
Nella comunicazione tra me e il signor snatmap non c'è però traccia 
dell'indirizzo di And(y), né di quello pubblico (d985d806) né di quello 
privato (c0a8010a). Perché?
Altra considerazione: il protocollo credo che funzioni 'a tentativi', 
unendo le due modalità di trasmissione usate dall'ftp.
In pratica credo che prima provi una connessione "attiva", ovvero: io 
apro una porta e ti mando una notifica che voglio comunicare con te e ti 
dico la porta (come le dcc dei client irc in pratica). Se per qualche 
motivo questo non funziona, passo in modalità passiva: ti dico che non 
posso (o ti faccio dire che non posso dal signor snatmap) e tu apri una 
porta, me la comunichi e io mi attacco a te. Ovviamente se nessuno dei 
due può, la situazione è tragica.
Come fa il signor snatmap a verificare se posso o meno? Semplice: io gli 
mando un udp col mio indirizzo 'locale', lui il pacchetto lo riceve dal 
mio indirizzo 'esterno': se coincidono vuol dire che non ho gateway di 
mezzo e quindi posso mettermi senza problemi in ascolto su una porta; se 
non coincidono vuol dire che ho impedimenti di qualche genere e quindi 
devo connettermi io su una porta remota. Questo spiegherebbe anche il 
motivo per il quale non ho ricevuto nessun indirizzo di And(y) dal 
signor snatmap.
Si potrebbe comunque risolvere il problema usando un protocollo più 
stabile, per esempio per l'audio uso SEMPRE la porta N e per il video 
uso SEMPRE la porta N+1. In questo modo si potrebbe impostare una 
opportuna regola di forwarding sui gateway/router, e risolvere almeno 
parzialmente il problema (per chi non può, leggasi fastweb, amen). Si 
dovrebbe poi eventualmente fare in modo che sta roba funzioni con il nat 
standard, magari usando pacchetti volutamente malformati, cioè inviati 
all'ip esterno ma con il campo di destinazione nell'intestazione che 
contiene l'ip nattato del destinatario. In questo modo dovrebbe passare 
attraverso il router senza problemi. Dovrebbe. Non sono molto pratico di 
routing...
Chiedo scusa per il post lungo, noioso e pure un po' offtopic.
E chiedo scusa pure per le innumerevoli cavolate che di sicuro ho detto.
Se però qualcuno vuole confermare, confutare, inventare, leggerò 
avidamente.
D.
-- 
Jollino [it,en,es,ia,eo (fr,pt,ca)]
Network admin on 
irc.discussioni.org
Per rispondere togli il freno a mano
http://www.petitiononline.com/yahoomac/

 avidamente.
... invento, perché come si sa sul lato puramente tecnico sono un po'
carente :o)
Ho audiochattato con Capitan Fracassa che si affaccia su internet
tramite non so quale dsl, mentre io sono nattato due volte (da fastweb e
dalla mia base airport).
A te l'ardua sentenza :-)
-- 
"...ho vissuto eternità, dove gli altri vedevano attimi...pensavo 
  dentro pieghe del tempo che per loro erano già ricordo."

 A te l'ardua sentenza :-)
La sentenza mia č che non ci capisco piů una ceppa. :(
Ne sto discutendo con Marco F. e sembra che comunque dovrebbe 
funzionare. Eppure con And(y) non va, con il fracassone devo ancora 
provare.. :)


 avidamente.
Non me ne intendo. Mi limito solo a riportarti la mia esperienza. Magari
ho azzeccato l'argomento e ti posso essere utile...
Ho fastweb, e sto a Roma. Intendo fastweb in fibra ottica.
Mio fratello idem, e sta a Milano, tra l'altro dietro a un firewall hw.
Riusciamo a vederci/parlarci con ichat AV senza problemi.
Simone

 sono diverse.
Confermo. Perň c'č una cosa che non capisco. Ieri, dopo aver tentato di 
collegarmi con un amico che esce da un NAT (senza porte mappate, cosě 
come lo sono io), ci siamo riusciti. Senza problemi siamo riusciti a 
chiudere e riaprire la connessione in entrambi i sensi. Poi dopo una 
mezz'ora non funzionava piů niente.
A questo punto davvero non capisco. Tra l'altro, quali porte dovrei 
mappare sul mio Mac?
Se vuoi fare una prova sono a disposizione (AIM: Sound000av).
--Alessandro Ranellucci.

 Riusciamo a vederci/parlarci con ichat AV senza problemi.
Per forza siete parenti stretti :-))
-- 
Angelo
http://www.setter.3000.it