
Ein Tunnel, der UDP-Verkehr in verschlüsselten UDP-/FakeTCP-/ICMP-Verkehr umwandelt, indem er Raw Socket verwendet, hilft Ihnen, UDP FireWalls (oder instabile UDP-Umgebungen) zu umgehen.
Ein Tunnel, der UDP-Datenverkehr mithilfe von Raw Sockets in verschlüsselten FakeTCP/UDP/ICMP-Datenverkehr umwandelt und Ihnen hilft, UDP-Firewalls (oder instabile UDP-Umgebungen) zu umgehen.
Wenn es allein verwendet wird, tunnelt udp2raw nur UDP-Datenverkehr. Wenn Sie jedoch udp2raw zusammen mit einem beliebigen UDP-basierten VPN verwenden, können Sie jeden Datenverkehr (einschließlich TCP/UDP/ICMP) tunneln. Derzeit werden OpenVPN/L2TP/ShadowVPN und tinyfecVPN als unterstützt bestätigt.

oder

Linux-Host (einschließlich Desktop-Linux, Android-Handy/Tablet, OpenWRT-Router oder Raspberry Pi) mit Root-Konto oder cap_net_raw-Fähigkeit.
Für Windows- und macOS-Benutzer verwenden Sie das udp2raw in diesem Repository.
ICMP/FakeTCP-Header helfen Ihnen, UDP-Blockaden, UDP-QoS oder fehlerhaftes UDP-NAT-Verhalten bei einigen ISPs zu umgehen. Im ICMP-Header-Modus funktioniert udp2raw wie ein ICMP-Tunnel.
UDP-Header werden ebenfalls unterstützt. Im UDP-Header-Modus verhält es sich wie ein normaler UDP-Tunnel, und Sie können einfach die anderen Funktionen (wie Verschlüsselung, Anti-Replay oder Verbindungsstabilisierung) nutzen.
Im FakeTCP-Header-Modus simuliert udp2raw beim Aufbau einer Verbindung den 3-Wege-Handshake und simuliert beim Datenübertragen seq und ack_seq. Es simuliert auch einige TCP-Optionen wie: MSS, sackOk, TS, TS_ack, wscale. Firewalls werden FakeTCP als eine TCP-Verbindung betrachten, aber es ist im Wesentlichen UDP: es unterstützt Echtzeit-/Außer-der-Reihe-Zustellung (genau wie normales UDP), keine Überlastungskontrolle oder Neuübertragung. Daher wird es bei Verwendung von OpenVPN kein TCP-over-TCP-Problem geben.
Verbindungsfehler werden durch Heartbeats erkannt. Bei Zeitüberschreitung ändert der Client automatisch die Portnummer und stellt die Verbindung wieder her. Wenn die Wiederverbindung erfolgreich ist, wird die vorherige Verbindung wiederhergestellt, und alle bestehenden UDP-Gespräche bleiben gültig.
Wenn Sie beispielsweise udp2raw + OpenVPN verwenden, verliert OpenVPN nach einer Wiederverbindung keine Verbindung, selbst wenn das Netzwerkkabel wieder eingesteckt oder der WLAN-Zugangspunkt gewechselt wird.
make cross ausführen, dann ist alles erledigt. (Hinweis: Vorkompilierte Binärdateien für Desktop, Raspberry Pi, Android, einige OpenWrt-Router sind bereits in den Releases enthalten.)UDP-QoS umgehen UDP-Blockaden umgehen OpenVPN TCP-over-TCP-Problem umgehen OpenVPN über ICMP UDP-zu-ICMP-Tunnel UDP-zu-TCP-Tunnel UDP über ICMP UDP über TCP
Laden Sie die Binärversion von https://github.com/wangyu-/udp2raw-tunnel/releases herunter.
Nehmen Sie an, Ihr UDP ist blockiert oder wird QoS-behandelt oder wird nur schlecht unterstützt. Nehmen Sie an, Ihre Server-IP ist 44.55.66.77 und Sie haben einen Dienst, der auf UDP-Port 7777 lauscht.
# 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
(Die obigen Befehle müssen als root ausgeführt werden. Für bessere Sicherheit können Sie mit einigen zusätzlichen Schritten udp2raw als Nicht-Root ausführen. Weitere Informationen finden Sie unter diesem Link.)


Nun wurde ein verschlüsselter Raw-Tunnel zwischen Client und Server über TCP-Port 4096 hergestellt. Eine Verbindung zu UDP-Port 3333 auf der Client-Seite entspricht einer Verbindung zu Port 7777 auf der Server-Seite. Es wird kein UDP-Datenverkehr preisgegeben.
Zum Ausführen auf Android siehe Android_Guide
Die Option -a fügt automatisch eine iptables-Regel (oder einige iptables-Regeln) für Sie hinzu. udp2raw ist auf diese iptables-Regel angewiesen, um stabil zu funktionieren. Achten Sie darauf, dass Sie -a nicht vergessen (das ist ein häufiger Fehler). Wenn Sie nicht möchten, dass udp2raw automatisch eine iptables-Regel hinzufügt, können Sie sie manuell hinzufügen (sehen Sie sich die Option -g an) und -a weglassen.
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 und -gDieses Programm sendet Pakete über Raw Socket. Im FakeTCP-Modus muss die TCP-Paketverarbeitung des Linux-Kernels auf beiden Seiten durch eine iptables-Regel blockiert werden, da der Kernel sonst automatisch RST für ein nicht erkanntes TCP-Paket sendet und Sie unter Stabilitäts-/Leistungsproblemen leiden. Sie können die Option -a verwenden, damit das Programm beim Start/Beenden automatisch iptables-Regeln hinzufügt/löscht. Sie können auch die Option -g verwenden, um eine iptables-Regel zu generieren und manuell hinzuzufügen.
--cipher-mode und --auth-modeEs wird empfohlen, aes128cbc + hmac_sha1 zu verwenden, um maximale Sicherheit zu erzielen. Wenn Sie das Programm auf einem Router ausführen möchten, können Sie xor + simple ausprobieren, was die meiste Zeit die Paketinspektion durch Firewalls täuschen kann, aber es kann Sie nicht vor schwerwiegenden Angriffen schützen. Der Modus none ist nur für Debugging-Zwecke gedacht. Es wird nicht empfohlen, cipher-mode oder auth-mode auf none zu setzen.
--seq-modeDer FakeTCP-Modus verhält sich nicht zu 100 % wie eine echte TCP-Verbindung. ISPs können möglicherweise den simulierten TCP-Datenverkehr vom echten TCP-Datenverkehr unterscheiden (obwohl dies kostspielig ist). seq-mode kann Ihnen helfen, das seq-Erhöhungsverhalten geringfügig zu ändern. Wenn Sie Verbindungsprobleme haben, versuchen Sie, den Wert zu ändern.
--lower-level--lower-level ermöglicht es Ihnen, Pakete auf OSI-Ebene 2 (Link-Ebene) zu senden, sodass Sie lokale iptables-Regeln umgehen können. Wenn Sie komplizierte iptables-Regeln haben, die mit udp2raw in Konflikt stehen, und Sie die iptables-Regeln nicht bearbeiten können (oder zu faul sind), kann --lower-level sehr nützlich sein. Versuchen Sie --lower-level auto, um die Parameter automatisch zu erkennen; Sie können sie manuell angeben, wenn auto fehlschlägt.
Manuelles Format if_name#dest_mac_adress, z.B. eth0#00:23:45:67:89:b9.
--keep-ruleÜberwacht iptables und fügt bei Bedarf automatisch iptables-Regeln (zum Blockieren der Kernel-TCP-Verarbeitung) wieder hinzu. Besonders nützlich, wenn iptables-Regeln von anderen Programmen gelöscht werden können (z. B. wenn Sie OpenWrt verwenden, können bei jeder Änderung und Übernahme einer Einstellung iptables-Regeln gelöscht und neu erstellt werden).
--conf-fileSie können Optionen auch aus einer Konfigurationsdatei laden, um Geheimnisse vor dem ps-Befehl zu schützen.
Zum Beispiel die Optionen für das obige server-Beispiel (im Abschnitt 'Erste Schritte') in eine Konfigurationsdatei umschreiben:
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
Achten Sie auf den Parameter -k: Im Befehlszeilenmodus werden die Anführungszeichen um das Passwort von der Shell entfernt. In Konfigurationsdateien entfernen wir keine Anführungszeichen.
Starten Sie dann den Server mit
./udp2raw_amd64 --conf-file server.conf
--fifoVerwenden Sie eine FIFO (Named Pipe), um Befehle an das laufende Programm zu senden. Zum Beispiel --fifo fifo.file.
Auf der Client-Seite können Sie echo reconnect >fifo.file verwenden, um den Client zur erneuten Verbindung zu zwingen. Derzeit wurde kein Befehl für den Server implementiert.
iperf3 TCP via OpenVPN + udp2raw (Der iperf3 UDP-Modus wird nicht verwendet, da ein Fehler in diesem Issue erwähnt wird: https://github.com/esnet/iperf/issues/296 . Stattdessen verpacken wir den TCP-Datenverkehr über OpenVPN in UDP, um die Leistung zu testen. Lesen Sie Anwendung für Details.
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: simple

(Die Rückwärtsgeschwindigkeit war ähnlich und nicht hochgeladen)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(Die Rückwärtsgeschwindigkeit war ähnlich und nicht hochgeladen)
Siehe Wiki für weitere Informationen: