Domanda

Vedo che molti programmi come openvpn e Teamviewer per la loro connessione VPN creano una connessione di rete virtuale su Windows. Voglio crearne uno per me stesso a scopo di test.

È possibile crearne uno a livello di programmazione?

È stato utile?

Soluzione

Sembra che tu stia cercando il driver Tap-Win32. È il driver che OpenVPN su Windows utilizza per creare l'interfaccia virtuale che stai vedendo, e in effetti fa parte di il pacchetto OpenVPN . Questo sottosistema è disponibile anche su molti * nix.

L'interfaccia per questo driver TAP è all'incirca la stessa su tutti i sistemi operativi. Si apre un file speciale e si scrivono frame Ethernet grezzi in questo file. Il driver inserisce quindi questi frame nell'interfaccia virtuale. Al contrario, tutti i pacchetti che vengono trasmessi sull'interfaccia virtuale, possono essere letti dal file speciale come frame Ethernet grezzi.

La maggior parte delle implementazioni ha anche una modalità TUN, che opera al livello 3 anziché al livello 2. Quindi leggerai pacchetti IP, IPv6, ecc. grezzi anziché frame Ethernet.

Non ho esperienza con questo su Windows, quindi vado a scorrere rapidamente il codice sorgente qui. OpenVPN esegue la maggior parte di questi passaggi nella funzione tun.c open_tun. Troverai più definizioni di questa funzione, ma sono # ifdef'd per diversi sistemi operativi (quindi cerca CreateFile). Il modo in cui questo sembra funzionare su Windows è:

  1. Prima di avviare un'applicazione che utilizza un'interfaccia TAP, una o più interfacce virtuali sono pre-create (dall'installer?). Queste interfacce iniziano disconnesse.
  2. La tua applicazione si avvia ed esegue una chiamata CreateFile speciale su " \\. \ Global \ GUID.tap " ;. Dove GUID viene sostituito dal GUID che descrive l'interfaccia virtuale specifica. Le interfacce virtuali possono essere ripetute nella chiave di registro che è definita come ADAPTER_KEY in " tap-win32 \ common.h " nel codice sorgente OpenVPN.
  3. L'applicazione potrebbe eseguire alcune chiamate DeviceIoControl. OpenVPN lo usa un sacco di volte per ottenere la versione del driver, ottenere MTU, impostare la modalità TUN e altre cose varie.
  4. A questo punto, probabilmente l'interfaccia viene visualizzata come connessa in Windows e potresti persino leggere le richieste DHCP che stai già ricevendo da Windows stesso. OpenVPN passa attraverso una grande quantità di hoopla per configurare l'interfaccia usando altre parti delle API di rete di Windows, ma questo non è specifico del driver TAP.

Quindi, sebbene l'API sia davvero solo un file speciale e quindi abbastanza semplice, c'è davvero molto da gestire nell'interfaccia. Ma se ci sei dentro solo per i test, questo potrebbe benissimo essere sufficiente. È quindi possibile configurare manualmente l'interfaccia di test in Windows.

Altri suggerimenti

Funzione MSDN Ras Dial

Questo potrebbe essere un passo nella giusta direzione?

Dalla pagina:

  

Il servizio di accesso remoto (RAS) supporta connessioni VPN (Virtual Private Network) oltre alle connessioni di accesso remoto convenzionali che utilizzano il protocollo Point-to-Point (PPP). In una connessione VPN, i pacchetti VPN sono incapsulati in pacchetti IP e inviati attraverso una rete IP come Internet. Pertanto, l'accesso a una rete IP è un requisito per stabilire una connessione VPN. Se il computer client ha una connessione sempre attiva a una rete IP, ad esempio una connessione a una LAN IP, il client può stabilire la connessione VPN utilizzando una singola chiamata alla funzione RasDial.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top