[Linuxtrent] Re: Idea per nuovo progetto: IP-Multiplexer

  • From: Matteo Ianeselli <matteo.ianeselli@xxxxxxxxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Tue, 15 Apr 2003 15:41:10 +0200

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


Other related posts: