Come utilizzare il tunnel TUN / TAP dal programma utente?


9

Di recente ho scoperto l'esistenza di interfacce TUN / TAP di Linux e sto ancora cercando di capirle. Penso di avere il concetto di base: vengono creati pseudo dispositivi che emulano un'interfaccia di rete e invece di passare i dati all'hardware, vengono passati a un programma di spazio utente.

Come dirigeresti un programma non correlato per utilizzare questo tunnel?

Ad esempio, prima della creazione del tunnel il mio sistema contiene solo eth0 e lo, la normale interfaccia Ethernet (cablata alla mia rete locale) e l'interfaccia di loopback. Dopo che un programma crea e configura un tunnel, ho una nuova interfaccia gr0 alla quale ho dato un indirizzo IP sulla mia rete locale, ma non in uso (quindi siamo tutti sulla stessa sottorete). Come farei un programma non correlato a utilizzare questo "tunnel"? Supponiamo di avere un semplice messaggio Python che passa l'app client / server che utilizza una connessione TCP, come posso configurarlo per utilizzare il tunnel?

Mi scuso se mi manca qualcosa di essenziale, ma come al solito sono riuscito a confondermi nello schema delle cose. Ancora una volta, tutto ciò che voglio è che un semplice programma TCP utilizzi questo tunnel.

Grazie!

Risposte:


7

Non è sempre "tunnel". TUN / TAP è solo driver NIC specifici. Dal punto di vista dello stack di rete agiscono come qualsiasi altra interfaccia di rete: possono avere indirizzi IP, possono essere interfacce punto-punto o broadcast. Le regole di routing si applicano anche a loro. Ma tutto il traffico che viene scritto su una di quelle interfacce di rete viene indirizzato ad alcuni programmi userspace per l'elaborazione, e tutti i dati scritti dal programma userspace direttamente su /dev/tunXassomigliano ai pacchetti in entrata per lo stack di rete.

Nel solito tunneling, il server e il client dispongono di dispositivi TUN con indirizzi assegnati. Le tabelle di routing configurate su entrambi indirizzano il traffico necessario verso questi dispositivi TUN. Quando il pacchetto viene indirizzato a tun0, il kernel lo invia al programma userspace (client) che invia questo pacchetto ad un altro programma sulla macchina remota (server) tramite, ad esempio, una connessione TCP. Sulla macchina remota un altro programma (server) riceve il pacchetto dal client e lo scrive sul proprio /dev/tunXdispositivo, "iniettando" quel pacchetto nello stack di rete. E il pacchetto con tunnel viene elaborato come un altro.


1
Quindi la risposta (per i miei scopi) è configurare la tabella di routing per indirizzare il traffico verso queste interfacce. Quello era il punto che mi manca, ma ora dovrei essere in grado di trovare una soluzione. Inoltre, apprezzo la spiegazione in quanto chiarisce le cose. Grazie!
Mr. Shickadance,

2
Ho finito per usare "route add <TUN IP ADDR> dev gr0". Questo mi ha permesso di reindirizzare il traffico attraverso la nuova interfaccia. Grazie ancora!
Mr. Shickadance,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.