
Un tunnel qui transforme le trafic UDP en trafic UDP/FakeTCP/ICMP chiffré en utilisant Raw Socket, vous aide à contourner les pare-feu UDP (ou environnement UDP instable)
Un tunnel qui transforme le trafic UDP en trafic FakeTCP/UDP/ICMP chiffré en utilisant Raw Socket, vous aide à contourner les pare-feu UDP (ou les environnements UDP instables).
Utilisé seul, udp2raw ne tunnelise que le trafic UDP. Néanmoins, si vous utilisez udp2raw + un VPN basé sur UDP ensemble, vous pouvez tunneliser n'importe quel trafic (y compris TCP/UDP/ICMP). Actuellement, OpenVPN/L2TP/ShadowVPN et tinyfecVPN sont confirmés comme étant pris en charge.

ou

Hôte Linux (y compris Linux de bureau, téléphone/tablette Android, routeur OpenWRT ou Raspberry PI) avec compte root ou capacité cap_net_raw.
Pour les utilisateurs de Windows et MacOS, utilisez udp2raw dans ce dépôt.
Les en-têtes ICMP/FakeTCP vous aident à contourner le blocage UDP, la QoS UDP ou un comportement NAT UDP inapproprié sur certains FAI. En mode en-tête ICMP, udp2raw fonctionne comme un tunnel ICMP.
Les en-têtes UDP sont également pris en charge. En mode en-tête UDP, il se comporte comme un tunnel UDP normal, et vous pouvez simplement profiter des autres fonctionnalités (comme le chiffrement, l'anti-rejeu ou la stabilisation de connexion).
En mode en-tête FakeTCP, udp2raw simule la poignée de main en trois étapes lors de l'établissement d'une connexion, simule seq et ack_seq lors du transfert de données. Il simule également quelques options TCP telles que : MSS, sackOk, TS, TS_ack, wscale. Les pare-feu considéreront FakeTCP comme une connexion TCP, mais il s'agit essentiellement d'UDP : il prend en charge la livraison en temps réel/hors ordre (comme le fait l'UDP normal), sans contrôle de congestion ni retransmission. Il n'y aura donc aucun problème TCP over TCP lors de l'utilisation d'OpenVPN.
Les échecs de connexion sont détectés par des heartbeats. Si un délai d'attente est dépassé, le client changera automatiquement de numéro de port et se reconnectera. Si la reconnexion est réussie, la connexion précédente sera récupérée et toutes les conversations UDP existantes resteront valides.
Par exemple, si vous utilisez udp2raw + OpenVPN, OpenVPN ne perdra pas la connexion après une reconnexion, même si le câble réseau est rebranché ou si le point d'accès WiFi est changé.
make cross puis tout est fait. (Remarque : les binaires pré-compilés pour Desktop, RaspberryPi, Android, certains routeurs OpenWrt sont déjà inclus dans 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
Téléchargez la version binaire depuis https://github.com/wangyu-/udp2raw-tunnel/releases
Supposons que votre UDP soit bloqué ou soumis à une QoS, ou simplement mal pris en charge. Supposons que l'IP de votre serveur soit 44.55.66.77, que vous ayez un service écoutant sur le port UDP 7777.
# Run at server side:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# Run at client side
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --raw-mode faketcp -a
(Les commandes ci-dessus doivent être exécutées en tant que root. Pour une meilleure sécurité, avec quelques étapes supplémentaires, vous pouvez exécuter udp2raw en tant que non-root. Consultez ce lien pour plus d'informations)


Maintenant, un tunnel brut chiffré a été établi entre le client et le serveur via le port TCP 4096. Se connecter au port UDP 3333 côté client équivaut à se connecter au port 7777 côté serveur. Aucun trafic UDP ne sera exposé.
Pour exécuter sur Android, consultez le Guide Android
L'option -a ajoute automatiquement une règle iptables (ou quelques règles iptables) pour vous, udp2raw dépend de cette règle iptables pour fonctionner de manière stable. Assurez-vous de ne pas oublier -a (c'est une erreur courante). Si vous ne souhaitez pas qu'udp2raw ajoute automatiquement la règle iptables, vous pouvez l'ajouter manuellement (jetez un œil à l'option -g) et omettre -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 et -gCe programme envoie des paquets via un socket brut. En mode FakeTCP, le traitement des paquets TCP par le noyau Linux doit être bloqué par une règle iptables des deux côtés, sinon le noyau enverra automatiquement un RST pour un paquet TCP non reconnu et vous subirez des problèmes de stabilité/perfomances. Vous pouvez utiliser l'option -a pour laisser le programme ajouter/supprimer automatiquement la règle iptables au démarrage/arrêt. Vous pouvez également utiliser l'option -g pour générer la règle iptables et l'ajouter manuellement.
--cipher-mode et --auth-modeIl est suggéré d'utiliser aes128cbc + hmac_sha1 pour une sécurité maximale. Si vous souhaitez exécuter le programme sur un routeur, vous pouvez essayer xor + simple, qui peut tromper l'inspection des paquets par les pare-feu la plupart du temps, mais cela ne vous protège pas contre les attaques sérieuses. Le mode none est uniquement à des fins de débogage. Il n'est pas recommandé de définir cipher-mode ou auth-mode sur none.
--seq-modeLe mode FakeTCP ne se comporte pas à 100% comme une vraie connexion TCP. Les FAI peuvent être capables de distinguer le trafic TCP simulé du trafic TCP réel (bien que cela soit coûteux). seq-mode peut vous aider à modifier légèrement le comportement d'incrémentation de seq. Si vous rencontrez des problèmes de connexion, essayez de modifier la valeur.
--lower-level--lower-level vous permet d'envoyer des paquets au niveau OSI 2 (niveau liaison), de sorte que vous puissiez contourner toutes les règles iptables locales. Si vous avez des règles iptables compliquées qui entrent en conflit avec udp2raw et que vous ne pouvez pas (ou avez la flemme de) modifier les règles iptables, --lower-level peut être très utile. Essayez --lower-level auto pour détecter automatiquement les paramètres, vous pouvez les spécifier manuellement si auto échoue.
Format manuel if_name#dest_mac_adress, par exemple : eth0#00:23:45:67:89:b9.
--keep-ruleSurveiller iptables et ré-ajouter automatiquement les règles iptables (pour bloquer le traitement TCP du noyau) si nécessaire. Particulièrement utile lorsque les règles iptables peuvent être effacées par d'autres programmes (par exemple, si vous utilisez OpenWrt, chaque fois que vous modifiez et validez un paramètre, les règles iptables peuvent être effacées et reconstruites).
--conf-fileVous pouvez également charger les options à partir d'un fichier de configuration afin de garder les secrets à l'écart de la commande ps.
Par exemple, réécrivez les options de l'exemple server ci-dessus (dans la section Pour commencer) dans un fichier de configuration :
server.conf
-s
# You can add comments like this
# Comments MUST occupy an entire line
# Or they will not work as expected
# Listen address
-l 0.0.0.0:4096
# Remote address
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
Faites attention au paramètre -k : En mode ligne de commande, les guillemets autour du mot de passe seront supprimés par le shell. Dans les fichiers de configuration, nous ne supprimons pas les guillemets.
Démarrez ensuite le serveur avec
./udp2raw_amd64 --conf-file server.conf
--fifoUtilisez un fifo (tube nommé) pour envoyer des commandes au programme en cours d'exécution. Par exemple --fifo fifo.file.
Côté client, vous pouvez utiliser echo reconnect >fifo.file pour forcer le client à se reconnecter. Actuellement, aucune commande n'a été implémentée pour le serveur.
iperf3 TCP via OpenVPN + udp2raw (Le mode UDP d'iperf3 n'est pas utilisé en raison d'un bug mentionné dans ce problème : https://github.com/esnet/iperf/issues/296 . À la place, nous empaquetons le trafic TCP en UDP via OpenVPN pour tester les performances. Lisez Application pour plus de détails.
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 vitesse inverse était similaire et non téléchargée)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(la vitesse inverse était similaire et non téléchargée)
Consultez le wiki pour plus d'informations :