
Un tunnel che trasforma il traffico UDP in traffico UDP/FakeTCP/ICMP crittografato utilizzando Raw Socket,ti aiuta a bypassare i firewall UDP (o ambienti UDP instabili)
Un tunnel che trasforma il traffico UDP in traffico FakeTCP/UDP/ICMP crittografato utilizzando Raw Socket, aiutandoti a bypassare i firewall UDP (o ambienti UDP instabili).
Se usato da solo, udp2raw tunnella solo traffico UDP. Tuttavia, se usi udp2raw insieme a qualsiasi VPN basata su UDP, puoi tunnellare qualsiasi traffico (inclusi TCP/UDP/ICMP); attualmente sono confermati supportati OpenVPN/L2TP/ShadowVPN e tinyfecVPN.

oppure

Host Linux (inclusi desktop Linux, telefono/tablet Android, router OpenWRT o Raspberry PI) con account root o capacità cap_net_raw.
Per utenti Windows e MacOS, usa udp2raw in questo repository.
Le intestazioni ICMP/FakeTCP aiutano a bypassare il blocco UDP, il QoS UDP o comportamenti NAT UDP impropri su alcuni ISP. In modalità intestazione ICMP, udp2raw funziona come un tunnel ICMP.
Sono supportate anche le intestazioni UDP. In modalità intestazione UDP, si comporta proprio come un normale tunnel UDP e puoi sfruttare le altre caratteristiche (come crittografia, anti-replay o stabilizzazione della connessione).
In modalità intestazione FakeTCP, udp2raw simula l'handshake a 3 vie durante l'inizializzazione della connessione, simula seq e ack_seq durante il trasferimento dei dati. Simula anche alcune opzioni TCP come: MSS, sackOk, TS, TS_ack, wscale. I firewall considereranno FakeTCP come una connessione TCP, ma è essenzialmente UDP: supporta la consegna in tempo reale/fuori ordine (proprio come il normale UDP), nessun controllo di congestione o ritrasmissione. Quindi non ci sarà alcun problema TCP over TCP quando si utilizza OpenVPN.
I fallimenti di connessione vengono rilevati tramite heartbeat. Se si verifica un timeout, il client cambierà automaticamente il numero di porta e si riconnetterà. Se la riconnessione ha successo, la connessione precedente verrà ripristinata e tutte le conversazioni UDP esistenti rimarranno valide.
Ad esempio, se usi udp2raw + OpenVPN, OpenVPN non perderà la connessione dopo qualsiasi riconnessione, anche se il cavo di rete viene scollegato o il punto di accesso WiFi viene cambiato.
Multiplexing Un client può gestire più connessioni UDP, tutte condividono la stessa connessione raw.
Client multipli Un server può avere più client.
Supporto NAT Tutte e 3 le modalità funzionano in ambienti NAT.
Supporto OpenVZ Testato su VPS BandwagonHost.
Facile da compilare Nessuna dipendenza. Per cross-compilare udp2raw, tutto ciò che devi fare è scaricare un toolchain, modificare il makefile per puntare al toolchain, eseguire make cross e il gioco è fatto. (Nota: binari precompilati per Desktop, RaspberryPi, Android, alcuni router Openwrt sono già inclusi in Releases)
Bypass UDP QoS Bypass UDP Blocking Bypass OpenVPN TCP over TCP problem OpenVPN over ICMP UDP to ICMP tunnel UDP to TCP tunnel UDP over ICMP UDP over TCP
Scarica la release binaria da https://github.com/wangyu-/udp2raw-tunnel/releases
Supponiamo che il tuo UDP sia bloccato o soggetto a QoS o semplicemente poco supportato. Supponiamo che il tuo server IP sia 44.55.66.77, che tu abbia un servizio in ascolto sulla porta UDP 7777.
# Esegui sul lato server:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# Esegui sul lato client:
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --raw-mode faketcp -a
(I comandi sopra devono essere eseguiti come root. Per una maggiore sicurezza, con alcuni passaggi extra, puoi eseguire udp2raw come non-root. Controlla questo link per maggiori informazioni)


Ora è stato stabilito un tunnel raw crittografato tra client e server attraverso la porta TCP 4096. Connettersi alla porta UDP 3333 sul lato client equivale a connettersi alla porta 7777 sul lato server. Nessun traffico UDP sarà esposto.
Per eseguire su Android, consulta Android_Guide
L'opzione -a aggiunge automaticamente una regola iptables (o poche regole iptables) per te; udp2raw si basa su questa regola iptables per funzionare in modo stabile. Assicurati di non dimenticare -a (è un errore comune). Se non vuoi che udp2raw aggiunga automaticamente la regola iptables, puoi aggiungerla manualmente (guarda l'opzione -g) e omettere -a.
udp2raw-tunnel
git version:4623f878e0 build date:Nov 3 2024 23:15:46
repository: https://github.com/wangyu-/udp2raw-tunnel
usage:
run as client : ./this_program -c -l local_listen_ip:local_port -r server_address:server_port [options]
run as server : ./this_program -s -l server_listen_ip:server_port -r remote_address:remote_port [options]
common options,these options must be same on both side:
--raw-mode <string> available values:faketcp(default),udp,icmp and easy-faketcp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> available values:aes128cfb,aes128cbc(default),xor,none
--auth-mode <string> available values:hmac_sha1,md5(default),crc32,simple,none
-a,--auto-rule auto add (and delete) iptables rule
-g,--gen-rule generate iptables rule then exit,so that you can copy and
add it manually.overrides -a
--disable-anti-replay disable anti-replay,not suggested
--fix-gro try to fix huge packet caused by GRO. this option is at an early stage.
make sure client and server are at same version.
client options:
--source-ip <ip> force source-ip for raw socket
--source-port <port> force source-port for raw socket,tcp/udp only
this option disables port changing while re-connecting
other options:
--conf-file <string> read options from a configuration file instead of command line.
check example.conf in repo for format
--fifo <string> use a fifo(named pipe) for sending commands to the running program,
check readme.md in repository for supported commands.
--log-level <number> 0:never 1:fatal 2:error 3:warn
4:info (default) 5:debug 6:trace
--log-position enable file name,function name,line number in log
--disable-color disable log color
--disable-bpf disable the kernel space filter,most time its not necessary
unless you suspect there is a bug
--dev <string> bind raw socket to a device, not necessary but improves performance
--sock-buf <number> buf size for socket,>=10 and <=10240,unit:kbyte,default:1024
--force-sock-buf bypass system limitation while setting sock-buf
--seq-mode <number> seq increase mode for faketcp:
0:static header,do not increase seq and ack_seq
1:increase seq for every packet,simply ack last seq
2:increase seq randomly, about every 3 packets,simply ack last seq
3:simulate an almost real seq/ack procedure(default)
4:similiar to 3,but do not consider TCP Option Window_Scale,
maybe useful when firewall doesnt support TCP Option
--lower-level <string> send packets at OSI level 2, format:'if_name#dest_mac_adress'
ie:'eth0#00:23:45:67:89:b9'.or try '--lower-level auto' to obtain
the parameter automatically,specify it manually if 'auto' failed
--wait-lock wait for xtables lock while invoking iptables, need iptables v1.4.20+
--gen-add generate iptables rule and add it permanently,then exit.overrides -g
--keep-rule monitor iptables and auto re-add if necessary.implys -a
--hb-len <number> length of heart-beat packet, >=0 and <=1500
--mtu-warn <number> mtu warning threshold, unit:byte, default:1375
--clear clear any iptables rules added by this program.overrides everything
--retry-on-error retry on error, allow to start udp2raw before network is initialized
-h,--help print this help message
-a e -gQuesto programma invia pacchetti tramite raw socket. In modalità FakeTCP, l'elaborazione dei pacchetti TCP del kernel Linux deve essere bloccata da una regola iptables su entrambi i lati, altrimenti il kernel invierà automaticamente RST per un pacchetto TCP non riconosciuto e subirai problemi di stabilità/prestazioni. Puoi usare l'opzione -a per far sì che il programma aggiunga/elimini automaticamente la regola iptables all'avvio/uscita. Puoi anche usare l'opzione -g per generare la regola iptables e aggiungerla manualmente.
--cipher-mode e --auth-modeSi consiglia di usare aes128cbc + hmac_sha1 per ottenere la massima sicurezza. Se desideri eseguire il programma su un router, puoi provare xor + simple, che possono ingannare l'ispezione dei pacchetti da parte dei firewall il più delle volte, ma non ti proteggono da attacchi seri. La modalità none è solo per scopi di debug. Non è consigliato impostare cipher-mode o auth-mode a none.
--seq-modeLa modalità FakeTCP non si comporta al 100% come una vera connessione TCP. Gli ISP potrebbero essere in grado di distinguere il traffico TCP simulato dal vero traffico TCP (anche se è costoso). seq-mode può aiutarti a modificare leggermente il comportamento di incremento del seq. Se riscontri problemi di connessione, prova a cambiare il valore.
--lower-level--lower-level ti permette di inviare pacchetti a livello 2 OSI (livello di collegamento), in modo da bypassare eventuali regole iptables locali. Se hai regole iptables complicate che entrano in conflitto con udp2raw e non puoi (o sei troppo pigro per) modificarle, --lower-level può essere molto utile. Prova --lower-level auto per rilevare automaticamente i parametri; puoi specificarli manualmente se auto fallisce.
Formato manuale if_name#dest_mac_adress, es.: eth0#00:23:45:67:89:b9.
--keep-ruleMonitora iptables e riaggiungi automaticamente le regole iptables (per bloccare l'elaborazione TCP del kernel) se necessario. Particolarmente utile quando le regole iptables potrebbero essere cancellate da altri programmi (ad esempio, se stai usando openwrt, ogni volta che modifichi e confermi un'impostazione, le regole iptables potrebbero essere cancellate e ricostruite).
--conf-filePuoi anche caricare le opzioni da un file di configurazione per tenere i segreti lontani dal comando ps.
Ad esempio, riscrivi le opzioni per l'esempio server sopra (nella sezione Per iniziare) in un file di configurazione:
server.conf
-s
# Puoi aggiungere commenti come questo
# I commenti DEVONO occupare un'intera riga
# Altrimenti non funzioneranno come previsto
# Indirizzo di ascolto
-l 0.0.0.0:4096
# Indirizzo remoto
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
Fai attenzione al parametro -k: In modalità riga di comando, le virgolette intorno alla password verranno rimosse dalla shell. Nei file di configurazione non rimuoviamo le virgolette.
Quindi avvia il server con:
./udp2raw_amd64 --conf-file server.conf
--fifoUsa un fifo (named pipe) per inviare comandi al programma in esecuzione. Ad esempio --fifo fifo.file.
Sul lato client, puoi usare echo reconnect >fifo.file per forzare la riconnessione del client. Al momento nessun comando è stato implementato per il server.
iperf3 TCP tramite OpenVPN + udp2raw (La modalità UDP di iperf3 non è stata utilizzata a causa di un bug menzionato in questo issue: https://github.com/esnet/iperf/issues/296 . Invece, impacchettiamo il traffico TCP in UDP tramite OpenVPN per testare le prestazioni. Leggi Applicazione per i dettagli.
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: simple

(La velocità inversa era simile e non caricata)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(La velocità inversa era simile e non caricata)
Consulta la wiki per maggiori informazioni: