Ein Tunnel, der UDP-Verkehr mithilfe von Raw Socket in verschlüsselten FakeTCP/UDP/ICMP-Verkehr umwandelt, hilft Ihnen, UDP-FireWalls (oder instabile UDP-Umgebungen) zu umgehen.
Bei alleiniger Verwendung tunnelt udp2raw nur UDP-Verkehr. Wenn Sie jedoch udp2raw + ein beliebiges UDP-basiertes VPN zusammen verwenden, können Sie jeden Datenverkehr tunneln (einschließlich TCP/UDP/ICMP). Derzeit wird bestätigt, dass OpenVPN/L2TP/ShadowVPN und tinyfecVPN unterstützt werden.
oder
udp2raw-Wiki
简体中文
Linux-Host (einschließlich Desktop-Linux, Android-Telefon/Tablet, OpenWRT-Router oder Raspberry PI) mit Root-Konto oder cap_net_raw-Funktion.
Für Windows- und MacOS-Benutzer verwenden Sie udp2raw in diesem Repo.
ICMP/FakeTCP-Header helfen Ihnen, UDP-Blockierung, UDP-QOS oder unzulässiges 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 er 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 einen 3-Wege-Handshake während des Verbindungsaufbaus und simuliert seq und ack_seq während der Datenübertragung. Es simuliert auch einige TCP-Optionen wie: MSS
, sackOk
, TS
, TS_ack
, wscale
. Firewalls betrachten FakeTCP als TCP-Verbindung, aber im Wesentlichen handelt es sich um UDP: Es unterstützt Echtzeit-/Out-of-Order-Zustellung (genau wie normales UDP), keine Überlastungskontrolle oder erneute Übertragung. Daher wird es bei Verwendung von OpenVPN kein TCP-über-TCP-Problem geben.
Hinweise zur Verschlüsselung
Verbindungsfehler werden durch Heartbeats erkannt. Bei Zeitüberschreitung ändert der Client automatisch die Portnummer und stellt die Verbindung wieder her. Wenn die erneute Verbindung erfolgreich ist, wird die vorherige Verbindung wiederhergestellt und alle bestehenden UDP-Konversationen bleiben gültig.
Wenn Sie beispielsweise udp2raw + OpenVPN verwenden, verliert OpenVPN die Verbindung nach einer erneuten Verbindung nicht, selbst wenn das Netzwerkkabel neu angeschlossen oder der WLAN-Zugangspunkt geändert wird .
Multiplexing Ein Client kann mehrere UDP-Verbindungen verarbeiten, die alle dieselbe Rohverbindung verwenden.
Mehrere Clients Ein Server kann mehrere Clients haben.
NAT-Unterstützung Alle drei Modi funktionieren in NAT-Umgebungen.
OpenVZ-Unterstützung auf BandwagonHost VPS getestet.
Einfach zu erstellen , keine Abhängigkeiten. Um udp2raw kreuzkompilieren zu können, müssen Sie lediglich eine Toolchain herunterladen, das Makefile so ändern, dass es auf die Toolchain zeigt, make cross
ausführen und dann ist alles erledigt. (Hinweis: Vorkompilierte Binärdateien für Desktop, RaspberryPi, Android, einige Openwrt-Router sind bereits in Releases enthalten)
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
Laden Sie die Binärversion von https://github.com/wangyu-/udp2raw-tunnel/releases herunter
Gehen Sie davon aus, dass Ihr UDP blockiert ist oder ein QOS-Problem aufweist oder einfach nur unzureichend unterstützt wird. Angenommen, Ihre Server-IP ist 44.55.66.77, Sie haben einen Dienst, der den UDP-Port 7777 überwacht.
# 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 oben genannten Befehle müssen als Root ausgeführt werden. Für mehr Sicherheit können Sie udp2raw mit einigen zusätzlichen Schritten auch als Nicht-Root ausführen. Weitere Informationen finden Sie unter diesem Link.)
Jetzt wurde über den TCP-Port 4096 ein verschlüsselter Rohtunnel zwischen Client und Server eingerichtet. Die Verbindung zum UDP-Port 3333 auf der Clientseite entspricht der Verbindung zu Port 7777 auf der Serverseite. Es wird kein UDP-Verkehr offengelegt.
Um auf Android zu laufen, schauen Sie sich Android_Guide an
Die Option -a
fügt automatisch eine iptables-Regel (oder mehrere iptables-Regeln) für Sie hinzu. udp2raw ist darauf angewiesen, dass diese iptables-Regel stabil funktioniert. Denken Sie daran, -a
nicht zu vergessen (das ist ein häufiger Fehler). Wenn Sie nicht möchten, dass udp2raw die iptables-Regel automatisch hinzufügt, können Sie sie manuell hinzufügen (sehen Sie sich die Option -g
an) und -a
weglassen.
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
und -g
Dieses Programm sendet Pakete über Raw-Socket. Im FakeTCP-Modus muss die TCP-Paketverarbeitung des Linux-Kernels durch eine iptables-Regel auf beiden Seiten blockiert werden, andernfalls sendet der Kernel automatisch RST für ein nicht erkanntes TCP-Paket und Sie leiden unter Stabilitäts-/Leistungsproblemen. Sie können die Option -a
verwenden, damit das Programm beim Start/Beenden automatisch eine Iptables-Regel hinzufügt/löscht. Sie können auch die Option -g
verwenden, um eine iptables-Regel zu generieren und diese manuell hinzuzufügen.
--cipher-mode
und --auth-mode
Für maximale Sicherheit wird die Verwendung aes128cbc
+ hmac_sha1
empfohlen. Wenn Sie das Programm auf einem Router ausführen möchten, können Sie xor
+ simple
ausprobieren, was die Paketprüfung durch Firewalls in den meisten Fällen austricksen kann, Sie jedoch nicht vor schwerwiegenden Angriffen schützen kann. Der Modus „Keine“ dient nur Debugging-Zwecken. Es wird nicht empfohlen, den Cipher-Mode oder Auth-Mode auf „None“ zu setzen.
--seq-mode
Der FakeTCP-Modus verhält sich nicht zu 100 % wie eine echte TCP-Verbindung. ISPs können möglicherweise den simulierten TCP-Verkehr vom echten TCP-Verkehr unterscheiden (obwohl dies kostspielig ist). Der Seq-Modus kann Ihnen dabei helfen, das Seq-Erhöhungsverhalten leicht zu ändern. Wenn Verbindungsprobleme auftreten, versuchen Sie, den Wert zu ändern.
--lower-level
--lower-level
ermöglicht Ihnen das Senden von Paketen auf OSI-Ebene 2 (Link-Ebene), sodass Sie alle lokalen 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 dazu sind), kann --lower-level
sehr nützlich sein. Versuchen Sie es --lower-level auto
, um die Parameter automatisch zu erkennen. Sie können es manuell angeben, wenn auto
fehlschlägt.
Manuelles Format if_name#dest_mac_adress
, also: eth0#00:23:45:67:89:b9
.
--keep-rule
Überwachen Sie iptables und fügen Sie bei Bedarf automatisch iptables-Regeln hinzu (um die Kernel-TCP-Verarbeitung zu blockieren). Dies ist besonders nützlich, wenn iptables-Regeln möglicherweise von anderen Programmen gelöscht werden (z. B. wenn Sie openwrt verwenden, jedes Mal, wenn Sie eine Einstellung geändert und übernommen haben). kann geräumt und neu aufgebaut werden).
--conf-file
Sie können Optionen auch aus einer Konfigurationsdatei laden, um Geheimnisse vor ps
-Befehl zu bewahren.
Schreiben Sie beispielsweise die Optionen für das obige server
(im Abschnitt „Erste Schritte“) in die Konfigurationsdatei um:
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.
Anschließend starten Sie den Server mit
./udp2raw_amd64 --conf-file server.conf
--fifo
Verwenden Sie ein FIFO (Named Pipe), um Befehle an das laufende Programm zu senden. Zum Beispiel --fifo fifo.file
.
Auf der Clientseite können Sie echo reconnect >fifo.file
verwenden, um den Client zu zwingen, die Verbindung wiederherzustellen. Derzeit wurde kein Befehl für den Server implementiert.
iperf3 TCP über OpenVPN + udp2raw (iperf3 UDP-Modus wird aufgrund eines in dieser Ausgabe erwähnten Fehlers nicht verwendet: esnet/iperf#296. Stattdessen packen wir den TCP-Verkehr in UDP von OpenVPN, um die Leistung zu testen. Weitere Informationen finden Sie unter Anwendung.
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: einfach
(Rückwärtsgeschwindigkeit war ähnlich und wurde nicht hochgeladen)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5
(Rückwärtsgeschwindigkeit war ähnlich und wurde nicht hochgeladen)
Weitere Informationen finden Sie im Wiki:
https://github.com/wangyu-/udp2raw-tunnel/wiki