
Un túnel que convierte el tráfico UDP en tráfico UDP/FakeTCP/ICMP cifrado utilizando Raw Socket, te ayuda a evadir firewalls UDP (o entornos UDP inestables)
Un túnel que convierte tráfico UDP en tráfico FakeTCP/UDP/ICMP cifrado mediante Raw Socket, ayudándote a evadir Firewalls UDP (o entornos UDP inestables).
Cuando se usa solo, udp2raw solo tuneliza tráfico UDP. Sin embargo, si usas udp2raw junto con cualquier VPN basada en UDP, puedes tunelizar cualquier tráfico (incluyendo TCP/UDP/ICMP). Actualmente se confirma que OpenVPN/L2TP/ShadowVPN y tinyfecVPN son compatibles.

o

Host Linux (incluyendo escritorio Linux, teléfono/tableta Android, router OpenWRT o Raspberry Pi) con cuenta root o capacidad cap_net_raw.
Para usuarios de Windows y MacOS, usa udp2raw de este repo.
Las cabeceras ICMP/FakeTCP te ayudan a evadir el bloqueo UDP, QOS UDP o comportamiento NAT UDP inadecuado en algunos ISP. En modo cabecera ICMP, udp2raw funciona como un túnel ICMP.
También se admiten cabeceras UDP. En modo cabecera UDP, se comporta como un túnel UDP normal, y puedes aprovechar las otras características (como cifrado, antirreproducción o estabilización de conexión).
En modo cabecera FakeTCP, udp2raw simula el handshake de 3 vías al establecer una conexión, simula seq y ack_seq durante la transferencia de datos. También simula algunas opciones TCP como: MSS, sackOk, TS, TS_ack, wscale. Los firewalls considerarán FakeTCP como una conexión TCP, pero es esencialmente UDP: admite entrega en tiempo real/fuera de orden (como el UDP normal), sin control de congestión ni retransmisión. Por lo tanto, no habrá ningún problema de TCP sobre TCP al usar OpenVPN.
Los fallos de conexión se detectan mediante heartbeats. Si se agota el tiempo de espera, el cliente cambiará automáticamente el número de puerto y se reconectará. Si la reconexión es exitosa, la conexión anterior se recuperará y todas las conversaciones UDP existentes seguirán siendo válidas.
Por ejemplo, si usas udp2raw + OpenVPN, OpenVPN no perderá la conexión después de cualquier reconexión, incluso si se vuelve a enchufar el cable de red o se cambia el punto de acceso WiFi.
Multiplexación Un cliente puede manejar múltiples conexiones UDP, todas compartiendo la misma conexión raw.
Múltiples Clientes Un servidor puede tener múltiples clientes.
Soporte NAT Los 3 modos funcionan en entornos NAT.
Soporte OpenVZ Probado en VPS de BandwagonHost.
Fácil de Compilar Sin dependencias. Para compilar de forma cruzada udp2raw, solo necesitas descargar un toolchain, modificar el makefile para apuntar al toolchain, ejecutar make cross y todo está listo. (Nota: Los binarios precompilados para escritorio, Raspberry Pi, Android y algunos routers OpenWrt ya están incluidos en 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
Descarga el binario de la versión desde https://github.com/wangyu-/udp2raw-tunnel/releases
Supón que tu UDP está bloqueado o con QOS o simplemente mal soportado. Supón que la IP de tu servidor es 44.55.66.77 y tienes un servicio escuchando en el puerto UDP 7777.
# Ejecutar en el lado del servidor:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# Ejecutar en el lado del cliente
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --raw-mode faketcp -a
(Los comandos anteriores deben ejecutarse como root. Para mayor seguridad, con algunos pasos adicionales, puedes ejecutar udp2raw como no root. Consulta este enlace para más información)


Ahora, se ha establecido un túnel raw cifrado entre cliente y servidor a través del puerto TCP 4096. Conectarse al puerto UDP 3333 en el lado del cliente es equivalente a conectarse al puerto 7777 en el lado del servidor. No se expondrá tráfico UDP.
Para ejecutar en Android, consulta Android_Guide
La opción -a agrega automáticamente una regla iptables (o algunas reglas iptables) para ti. udp2raw depende de esta regla iptables para funcionar de manera estable. Ten cuidado de no olvidar -a (es un error común). Si no quieres que udp2raw agregue la regla iptables automáticamente, puedes agregarla manualmente (echa un vistazo a la opción -g) y omitir -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 y -gEste programa envía paquetes a través de raw socket. En modo FakeTCP, el procesamiento de paquetes TCP del kernel de Linux debe bloquearse mediante una regla iptables en ambos lados, de lo contrario el kernel enviará automáticamente RST para un paquete TCP no reconocido y sufrirás problemas de estabilidad/rendimiento. Puedes usar la opción -a para que el programa agregue/elimine automáticamente la regla iptables al iniciar/salir. También puedes usar la opción -g para generar la regla iptables y agregarla manualmente.
--cipher-mode y --auth-modeSe sugiere usar aes128cbc + hmac_sha1 para obtener la máxima seguridad. Si deseas ejecutar el programa en un router, puedes probar xor + simple, que puede engañar a la inspección de paquetes de los firewalls la mayoría de las veces, pero no te protegerá de ataques serios. El modo none es solo para fines de depuración. No se recomienda establecer cipher-mode o auth-mode en none.
--seq-modeEl modo FakeTCP no se comporta al 100% como una conexión TCP real. Los ISP pueden distinguir el tráfico TCP simulado del tráfico TCP real (aunque es costoso). seq-mode puede ayudarte a cambiar ligeramente el comportamiento de incremento de seq. Si experimentas problemas de conexión, intenta cambiar el valor.
--lower-level--lower-level te permite enviar paquetes a nivel OSI 2 (nivel de enlace), para que puedas evitar cualquier regla iptables local. Si tienes reglas iptables complicadas que entran en conflicto con udp2raw y no puedes (o te da pereza) editar las reglas iptables, --lower-level puede ser muy útil. Prueba --lower-level auto para detectar automáticamente los parámetros; puedes especificarlos manualmente si auto falla.
Formato manual if_name#dest_mac_adress, ej: eth0#00:23:45:67:89:b9.
--keep-ruleMonitorea iptables y vuelve a agregar automáticamente las reglas iptables (para bloquear el procesamiento TCP del kernel) si es necesario. Especialmente útil cuando las reglas iptables pueden ser borradas por otros programas (por ejemplo, si usas openwrt, cada vez que cambias y confirmas una configuración, las reglas iptables pueden borrarse y reconstruirse).
--conf-fileTambién puedes cargar opciones desde un archivo de configuración para mantener las contraseñas fuera del comando ps.
Por ejemplo, reescribe las opciones del ejemplo de servidor anterior (en la sección Primeros pasos) en un archivo de configuración:
server.conf
-s
# Puedes agregar comentarios como este
# Los comentarios DEBEN ocupar una línea completa
# De lo contrario no funcionarán como se espera
# Dirección de escucha
-l 0.0.0.0:4096
# Dirección remota
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
Presta atención al parámetro -k: En modo línea de comandos, las comillas alrededor de la contraseña serán eliminadas por el shell. En los archivos de configuración no eliminamos las comillas.
Luego inicia el servidor con
./udp2raw_amd64 --conf-file server.conf
--fifoUsa un fifo (tubería con nombre) para enviar comandos al programa en ejecución. Por ejemplo --fifo fifo.file.
En el lado del cliente, puedes usar echo reconnect >fifo.file para forzar al cliente a reconectarse. Actualmente no se ha implementado ningún comando para el servidor.
iperf3 TCP a través de OpenVPN + udp2raw (No se usa el modo UDP de iperf3 debido a un error mencionado en este issue: https://github.com/esnet/iperf/issues/296. En su lugar, encapsulamos el tráfico TCP en UDP mediante OpenVPN para probar el rendimiento. Lee Aplicación para más detalles.
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 velocidad inversa fue similar y no se subió)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(la velocidad inversa fue similar y no se subió)
Consulta la wiki para más información: