Il mio software tun2socks (Linux, Windows) crea un'interfaccia di rete virtuale che inoltra tutte le connessioni TCP in entrata attraverso un server proxy specificato. Può utilizzare solo un proxy SOCKS e, per impostazione predefinita, può inoltrare solo TCP, anche se UDP può essere inoltrato anche se è possibile eseguire il mio udpgw
forwarder da qualche parte dietro SOCKS. Supponendo di soddisfare tali requisiti, ecco come è possibile configurarlo:
Innanzitutto creare l'interfaccia virtuale e configurarla. Su Linux:
openvpn --mktun --dev tun0 --user <your_user>
ifconfig tun0 10.0.0.1/24
Oppure, su Windows, basta installare OpenVPN per ottenere l'interfaccia virtuale TAP-Win32 e assegnarle IP 10.0.0.1, maschera di rete 255.255.255.0.
Quindi avvia tun2socks, che esegue l'inoltro effettivo:
badvpn-tun2socks --tundev tun0
--netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0
--socks-server-addr <socks_server_address>:<socks_port>
Qui 10.0.0.2
è l'IP del router virtuale all'interno dell'interfaccia virtuale. Deve trovarsi nella stessa sottorete e diversa da quella assegnata all'interfaccia virtuale stessa ( 10.0.0.1/24
). Su Windows, invece di tun0
, utilizzare:
--tundev "tap0901:<display_name_of_TAP-Win32_device>:10.0.0.1:10.0.0.0:255.255.255.0"
A questo punto dovresti essere in grado di eseguire il ping del router virtuale 10.0.0.2
(nel qual caso il tun2socks
programma in esecuzione sarà quello di rispondere). Per inoltrare le connessioni tramite il proxy, è sufficiente instradarle attraverso il dispositivo virtuale. Su Linux:
route add default gw 10.0.0.2 metric 0
O su Windows:
route add 0.0.0.0 mask 0.0.0.0 10.0.0.2 metric 0
La parte fondamentale qui è che la rotta sovrascrive qualsiasi rotta predefinita esistente. Inoltre, se il server SOCKS non si trova sulla rete locale, è necessario aggiungere una route di eccezione con una metrica più elevata per impedire che le connessioni vengano reindirizzate all'interfaccia virtuale. Vedi il link in alto per maggiori informazioni.