Una cavalletta salita sulla tastiera di Daniele Nicolodi ha scritto: > Mi sa che é giunta ora che mi compri TCP/IP Illustrated... Guarda, l'idea di fondo non e` fantascienza. Supponiamo per semplicita` di non avere a che fare con la frammentazione (che complica le cose), e che di mezzo ci sia solo ethernet. Linux fa "masquerading" (PAT) delle connessioni TCP basandosi sul numero di porta: ricorda chi dall'interno ha fatto una certa richiesta verso l'esterno (ovvero segnandosi IP e porta sorgente), ripropone la richiesta con un indirizzo e un numero di porta sorgente modificato, e quando arriva indietro la risposta sulla stessa porta la rispara indietro modificando indirizzo di destinazione e porta rimettendoci quelli che erano stati modificati. Se non sbaglio, poi, il normale routing provvede ad instradare il pacchetto di ritorno sull'interfaccia giusta. Ora, supponiamo che il kernel si ricordi, oltre a porta e indirizzo IP originario, anche il MAC address e l'interfaccia di provenienza, e quando arrivano le risposte scavalchi il normale routing e riproponga direttamente sull'interfaccia di provenienza il pacchetto, con destinazione il MAC address, indirizzo IP e numero di porta salvati. Risultato: fai masquerading in base al MAC address, e non ti importa degli IP sorgenti. E se non capisco male (dal discorso sugli switch fatto qualche tempo fa) ci sono apparecchi in grado di "taggare" un frame ethernet proveniente da una certa porta di N porte, e di instradare verso quella stessa porta i frame di ritorno taggati con lo stesso tag. E, supponendo di ricordarsi anche i tag oltre che a tutto il resto, l'ambaradan potrebbe funzionare anche se due schede hanno lo stesso MAC address. In altre parole, con un "masquerading" del genere, il numero di porta invece che codificare solo IP sorgente e porta originaria di provenienza, codificherebbe anche MAC address, interfaccia ed eventuale tag. Oltre a TCP, bisogna inoltre "riaggiustare" pure ICMP, con lo stesso sistema. A occhio bisogna "toccare" abbastanza il kernel (piu` che altro per scavalcare il routing normale che altro). Oppure, probabilmente, si riesce a fare anche completamente in userspace (anche se sara` piu lento), grazie ai packet sockets di Linux (PF_PACKET, man packet(7)) che stanno ancora piu` in basso dei raw socket). Se qualcuno ha voglia... :-) -- | \ \ | ___|_ |_ | matteo.ianeselli AT telecomitalia.it | _ \ | \ | _| / / Visita il LinuxTrent a _|_/ _\_| _|____|___|___| http://www.linuxtrent.it -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx