
Strumento di tunneling ICMP, DNS e NTP per bypassare la censura, con protezione dell'integrità HMAC e clamping MSS per sessioni web efficienti su reti restrittive.
fraud-bridge aiuta a bypassare ambienti censori restrittivi che bloccano connessioni TCP o UDP dirette, configurando tunnel ICMP, NTP o DNS (su IPv4 o IPv6).
Corregge automaticamente l'opzione MSS del TCP per ottenere un flusso di pacchetti non frammentati (noto come MSS-clamping) per guadagnare prestazioni che consentono di usare sessioni web attraverso il bridge.
Usa MD5 per proteggere l'integrità (HMAC) del tunnel da pacchetti TCP dannosi iniettati. Se hai bisogno di privacy, devi usare tu stesso la crittografia. Si presume che tu usi SSH sul tunnel comunque. Direttamente o con l'opzione proxy SSH se hai bisogno di HTTP tunnelizzato.
Quando si usa il tunneling DNS, fraud-bridge utilizza le intestazioni di estensione EDNS0 per mettere quanti più byte possibile nella risposta TXT.
fraud-bridge include anche altre tecniche per gestire certe limitazioni di bind, ad esempio quote/limitazioni.
Puoi anche usarlo per ottenere il supporto completo al roaming/mobilità nelle tue sessioni SSH senza alcuna patch.
Una volta configurato il tunnel, potresti voler leggere come far funzionare il tuo messenger attraverso il tunnel.
Nota anche che c->skills fornisce l'intera catena di attrezzature per fregare la censura che potrebbe interessarti: crash e psc
Basta eseguire make su Linux.
L'uso è il seguente:
fraud-bridge -- https://github.com/stealth/fraud-bridge
Usage: fraud-bridge <-k key> [-R IP] [-L IP] [-pP port] [-iIuUnN] [-s sz]
[-E sz] [-d dev] [-D domain] [-S usec] [-X user] [-r dir] [-t type] [-v]
-k -- HMAC key to protect tunnel packets
-R -- IP or IPv6 addr of (outside) peer when started inside
-L -- local IP addr to bind to if started outside (can be omitted)
-p -- remote port when in DNS/NTP mode (default: 53/123)
-P -- local port when in DNS/NTP mode (outside default: 53/123)
-i -- use ICMP tunnel
-I -- use ICMPv6 tunnel
-u -- use DNS tunnel over IP
-U -- use DNS tunnel over IPv6
-n -- use NTP4 tunnel over IP
-N -- use NTP4 tunnel over IPv6
-E -- set EDNS0 size (default: 1024)
-s -- set MSS size (default: 1024)
-d -- tunnel device to use (default: tun1)
-D -- DNS domain to use when DNS tunneling
-S -- usec slowdown for DNS ping (default: 5000)
-X -- user to run as (default: nobody)
-r -- chroot directory (default: /var/empty)
-t -- override ICMP/ICMP6 type (usually no need to change)
-v -- enable verbose mode
Alcune definizioni: inside si riferisce alla macchina all'interno della rete censurata, molto probabilmente il tuo laptop/PC. outside si riferisce a un VPS o una macchina al di fuori della rete censurata, cioè ciò che le persone chiamano "internet libero".
Dopo l'avvio, fraud-bridge apre un tunnel punto-punto: 1.2.3.4 <-> 1.2.3.5
Quindi devi avviare inside.sh sul lato inside e outside.sh sul lato outside.
Si presenta così:
Sul lato outside del tunnel (es. un server su internet):
# ./fraud-bridge -u -L 192.168.2.222 -D f.sub.dnstunnel.com -k key
(e avviando outside.sh)
E sul lato inside:
# ./fraud-bridge -u -R 127.0.0.1 -D f.sub.dnstunnel.com -k key
(e avviando inside.sh)
come esempio per un tunnel DNS con un named locale su 127.0.0.1 in esecuzione e
il peer outside su 192.168.2.222. Come detto, la parte outside del
tunnel può (e in realtà deve) essere avviata prima e si metterà in ascolto
che il peer apra il tunnel. Sono inclusi file di zona di esempio se
vuoi sperimentare con le tue configurazioni bind. Per far funzionare tunnel ITW non sono necessari.
Il dispositivo tunnel predefinito è tun1. Assicurati di non eseguire più istanze di
fraud-bridge contemporaneamente né altro software tunnel che stia usando questo
dispositivo tunnel. Dopo ogni kill/riavvio del demone fraud-bridge devi eseguire
di nuovo gli script inside/outside sull'estremità specifica dove lo hai riavviato.
Il parametro -L sul lato outside può (dovrebbe) essere omesso. In configurazioni reali, il parametro -R
sulle configurazioni inside contiene l'IP o l'indirizzo IP6 del server outside, oppure se
viene usata la ricorsione DNS, l'indirizzo IP del server DNS del tuo provider o
di un resolver DNS pubblico ricorsivo. Se non hai un tuo server DNS,
puoi comunque usare il tunneling DNS usando l'IP del tuo VPS come parametro -R
sul lato inside e usando un qualsiasi dominio (ma lo stesso) parametro -D su entrambi i lati
che sembri legittimo per un regime di censura, ad es. -D blah.gov.
Prima di provare il tunneling DNS, molto probabilmente vorrai provare con il tunneling ICMP o NTP.
Se vedi avvisi chroot nel syslog, puoi ignorarli o fornire
argomenti validi a -r.
Puoi quindi usare ssh -D 1234 1.2.3.5 per ottenere una connessione SSH a 192.168.2.222
nell'esempio sopra e usare il proxy SOCKS5 sulla porta :1234 per la sessione del tuo browser web
che quindi viaggia attraverso il tunnel.
Puoi farlo anche con ICMP: -i e ICMP su IPv6: -I o DNS su UDP tramite
IPv6: -U o NTP su UDP: -n o NTP su UDP/IPv6: -N.
È anche possibile cambiare il tipo di tunnel (DNS in ICMP o ICMP in NTP) al di là della tua connessione SSH, oppure passare a un altro IP locale (es. passando da wifi a 5G) poiché lo stato TCP viene mantenuto nel kernel locale e remoto e non nel bridge. Ciò consente il pieno supporto al roaming/mobilità SSH senza alcuna patch a SSH.
In modalità verbose, fraud-bridge lascerà stdout aperto per segnalare errori o messaggi,
quindi devi eseguirlo su uno screen o reindirizzare l'output su /dev/null se ti serve
che rimanga in esecuzione in background (verbose). Tienilo a mente poiché devi avviare gli script
inside/outside dopo aver invocato fraud-bridge. Se non usi -v, va in background e registra
gli errori su syslog.
Prima di usare qualsiasi tunnel ICMP, assicurati di rilassare le regole del firewall del tuo modem via cavo
per ricevere i pacchetti di risposta dal peer remoto. fraud-bridge funziona dietro
NAT, ma deve ricevere i pacchetti di risposta alla fine. Quando si usa il tunneling ICMP e gli echo ICMP
sono bloccati, puoi impostare il parametro type tramite -t. Ad esempio usando -t 13 inside e -t 14
outside per ottenere coppie timestamp request/reply.
Quando si usa il tunneling DNS, fraud-bridge utilizza intestazioni di estensione EDNS0 per mettere quanti più byte possibile
nella risposta TXT. Nei miei test, poiché cerca di rispondere a qualsiasi pacchetto di temporizzazione,
non produce log nel file di log di sistema di bind9. Se cambi
il EDNS0 (-E), devi farlo su entrambi i lati con lo stesso valore.
(Perché inside annuncia la dimensione massima del payload UDP al nameserver e l'endpoint
outside calcola l'MSS da ciò che è stato fornito con -E.)
Quando si usa il tunneling NTP, alcuni provider con CGN bloccano pacchetti NTP grandi (solo su IPv4). In un comune ISP
tedesco, qualsiasi pacchetto NTP > 256 byte veniva bloccato. Quindi devi impostare l'MSS di conseguenza per ottenere pacchetti più piccoli
come -s 100 in modo che lo stack TCP invii i segmenti in dimensioni più piccole.
Poiché fraud-bridge apre un tunnel PtP, può rimuovere l'intestazione IP dai pacchetti che trasmette e sintetizzarla su ciascuna estremità. Quindi per il tunneling ICMP hai solo un overhead di 8 (ICMP) + 16 (HMAC) byte, che è accettabile. Il tunneling DNS ha ancora buona latenza e larghezza di banda quando eseguito direttamente, grazie al MSS clamping. Quando si tunnelizza indirettamente tramite resolver DNS pubblici, i valori predefiniti sono sufficienti per avere una sessione ragionevole, ma ovviamente il tunneling ICMP è da preferire quando possibile.
Usando ssh -D [0.0.0.0]:1234 1.2.3.5 puoi configurare un proxy SOCKS locale sulla tua macchina
porta 1234 (inside) e distribuirlo tramite WLAN al tuo quartiere per sessioni web senza censura.
Puoi anche configurare un tor locale sulla macchina outside, offrendo una porta SOCKS su 127.0.0.1:9150
come fai normalmente, e poi usando ssh -L 9150:127.0.0.1:9150 1.2.3.5 per inoltrare questa porta outside
alla tua macchina inside, in modo da rispecchiare esattamente la configurazione tor esterna localmente e distribuirla
come porta SOCKS tor tramite WLAN ai tuoi utenti. In questo modo non abbiamo bisogno di implementare pluggable transports
e puoi comunque usare tor come prima. Lo stesso funziona anche con sessioni crash o psc o qualsiasi altro
meccanismo di tunneling.
Il parametro -S ha un valore predefinito ragionevole per i pacchetti timer DNS che devono essere inviati
al server a intervallo costante. Valori più bassi danno una migliore latenza del tunnel ma possono sovraccaricare
il server DNS ricorsivo e produrre più rumore.
orgogliosamente sponsorizzato da: