Un tunnel qui transforme le trafic UDP en trafic FakeTCP/UDP/ICMP crypté à l'aide de Raw Socket, vous aide à contourner les pare-feu UDP (ou l'environnement UDP instable).
Lorsqu'il est utilisé seul, udp2raw tunnelise uniquement le trafic UDP. Néanmoins, si vous avez utilisé udp2raw + n'importe quel VPN basé sur UDP ensemble, vous pouvez tunneliser n'importe quel trafic (y compris TCP/UDP/ICMP), il est actuellement confirmé qu'OpenVPN/L2TP/ShadowVPN et tinyfecVPN sont pris en charge.
ou
wiki udp2raw
简体中文
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 Windows et MacOS, utilisez udp2raw dans ce dépôt.
Les en-têtes ICMP/FakeTCP vous aident à contourner le blocage UDP, la qualité de service UDP ou le comportement UDP NAT 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 utiliser les autres fonctionnalités (telles que le cryptage, l'anti-relecture ou la stabilisation de la connexion).
En mode en-tête FakeTCP, udp2raw simule une négociation à 3 voies 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/dans le désordre (tout comme le fait l'UDP normal), aucun contrôle de congestion ni retransmission. Il n’y aura donc aucun problème TCP sur TCP lors de l’utilisation d’OpenVPN.
Notes sur le cryptage
Les échecs de connexion sont détectés par des battements de cœur. En cas d'expiration du délai, le client modifiera automatiquement le numéro de port et se reconnectera. Si la reconnexion réussit, 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 toute reconnexion, même si le câble réseau est rebranché ou si le point d'accès WiFi est modifié .
Multiplexage Un client peut gérer plusieurs connexions UDP, qui partagent toutes la même connexion brute.
Clients multiples Un serveur peut avoir plusieurs clients.
Prise en charge NAT Les 3 modes fonctionnent dans les environnements NAT.
Prise en charge d'OpenVZ testée sur le VPS BandwagonHost.
Facile à construire Aucune dépendance. Pour compiler udp2raw de manière croisée, tout ce que vous avez à faire est simplement de télécharger une chaîne d'outils, de modifier le makefile pour qu'il pointe vers la chaîne d'outils, d'exécuter make cross
et tout est fait. (Remarque : binaires précompilés pour le bureau, RaspberryPi, Android, certains routeurs Openwrt sont déjà inclus dans les versions)
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é, soit soumis à une QOS ou tout simplement mal pris en charge. Supposons que l'adresse IP de votre serveur soit 44.55.66.77, vous disposez d'un service qui écoute 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)
Désormais, un tunnel brut crypté a été établi entre le client et le serveur via le port TCP 4096. La connexion au port UDP 3333 côté client équivaut à la connexion au port 7777 côté serveur. Aucun trafic UDP ne sera exposé.
Pour exécuter sur Android, consultez Android_Guide
-a
option ajoute automatiquement une règle iptables (ou quelques règles iptables) pour vous, udp2raw s'appuie sur cette règle iptables pour fonctionner de manière stable. Sachez que vous n'oubliez pas -a
(c'est une erreur courante). Si vous ne souhaitez pas que 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:6e1df4b39f build date:Oct 24 2017 09:21:15
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> avaliable values:faketcp(default),udp,icmp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> avaliable values:aes128cbc(default),xor,none
--auth-mode <string> avaliable 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
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
--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
--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
--clear clear any iptables rules added by this program.overrides everything
-h,--help print this help message
-a
et -g
Ce programme envoie des paquets via un socket brut. En mode FakeTCP, le traitement des paquets TCP du noyau Linux doit être bloqué par une règle iptables des deux côtés, sinon le noyau enverra automatiquement RST pour un paquet TCP non reconnu et vous subirez des problèmes de stabilité/performance. Vous pouvez utiliser l'option -a
pour laisser le programme ajouter/supprimer automatiquement la règle iptables au démarrage/à la sortie. Vous pouvez également utiliser l'option -g
pour générer une règle iptables et l'ajouter manuellement.
--cipher-mode
et --auth-mode
Il est suggéré d'utiliser aes128cbc
+ hmac_sha1
pour obtenir 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 il ne peut pas vous protéger contre des attaques graves. Le mode aucun est uniquement destiné au débogage. Il n'est pas recommandé de définir le mode de chiffrement ou le mode d'authentification sur aucun.
--seq-mode
Le 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 (même si cela coûte cher). le mode seq peut vous aider à modifier légèrement le comportement d'augmentation de la séquence. 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 lien), afin 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 êtes trop paresseux pour) 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 le spécifier manuellement en cas d'échec auto
.
Format manuel if_name#dest_mac_adress
,c'est-à-dire : eth0#00:23:45:67:89:b9
.
--keep-rule
Surveillez iptables et rajoutez 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, la règle iptables peut être dégagé et reconstruit).
--conf-file
Vous pouvez également charger des 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 Mise en route) dans le 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.
Puis démarrez le serveur avec
./udp2raw_amd64 --conf-file server.conf
--fifo
Utilisez 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 iperf3 UDP n'est pas utilisé en raison d'un bug mentionné dans ce numéro : esnet/iperf#296 . Au lieu de cela, nous emballons le trafic TCP dans UDP par OpenVPN pour tester les performances. Lisez l'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 :
https://github.com/wangyu-/udp2raw-tunnel/wiki