Un túnel que convierte el tráfico UDP en tráfico TCP/UDP/ICMP falso cifrado mediante el uso de Raw Socket le ayuda a evitar los cortafuegos UDP (o el entorno UDP inestable).
Cuando se usa solo, udp2raw crea un túnel solo para el tráfico UDP. Sin embargo, si usó udp2raw + cualquier VPN basada en UDP juntos, puede canalizar cualquier tráfico (incluido TCP/UDP/ICMP), actualmente se confirma que OpenVPN/L2TP/ShadowVPN y tinyfecVPN son compatibles.
o
udp2raw wiki
简体中文
Host Linux (incluido Linux de escritorio, teléfono/tableta Android, enrutador OpenWRT o Raspberry PI) con cuenta raíz o capacidad cap_net_raw.
Para usuarios de Windows y MacOS, utilice udp2raw en este repositorio.
Los encabezados ICMP/FakeTCP lo ayudan a evitar el bloqueo de UDP, la QOS de UDP o el comportamiento inadecuado de NAT de UDP en algunos ISP. En el modo de encabezado ICMP, udp2raw funciona como un túnel ICMP.
También se admiten encabezados UDP. En el modo de encabezado UDP, se comporta como un túnel UDP normal y puede utilizar otras funciones (como cifrado, antirreproducción o estabilización de conexión).
En el modo de encabezado FakeTCP, udp2raw simula un protocolo de enlace de 3 vías mientras establece una conexión, simula seq y ack_seq mientras se transfieren datos. También simula algunas opciones de 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 (tal como lo hace 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.
Notas sobre el cifrado
Los fallos de conexión se detectan mediante latidos del corazón. Si se agota el tiempo de espera, el cliente cambiará automáticamente el número de puerto y se volverá a conectar. Si la reconexión se realiza correctamente, se recuperará la conexión anterior y todas las conversaciones UDP existentes seguirán siendo válidas.
Por ejemplo, si usa udp2raw + OpenVPN, OpenVPN no perderá la conexión después de volver a conectarse, 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 las cuales comparten la misma conexión sin formato.
Múltiples clientes Un servidor puede tener múltiples clientes.
Compatibilidad con NAT Los 3 modos funcionan en entornos NAT.
Soporte OpenVZ probado en BandwagonHost VPS.
Fácil de construir Sin dependencias. Para realizar una compilación cruzada de udp2raw, todo lo que necesita hacer es descargar una cadena de herramientas, modificar el archivo MAKE para que apunte a la cadena de herramientas, ejecutar make cross
y luego todo estará listo. (Nota: binarios precompilados para escritorio, RaspberryPi, Android y algunos enrutadores Openwrt ya están incluidos en las versiones)
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
Descargue la versión binaria desde https://github.com/wangyu-/udp2raw-tunnel/releases
Supongamos que su UDP está bloqueado, tiene QOS o simplemente no es compatible. Supongamos que la IP de su servidor es 44.55.66.77, tiene un servicio escuchando en el puerto 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
(Los comandos anteriores deben ejecutarse como root. Para mayor seguridad, con algunos pasos adicionales, puede ejecutar udp2raw como no root. Consulte este enlace para obtener más información).
Ahora, se ha establecido un túnel sin formato cifrado entre el cliente y el servidor a través del puerto TCP 4096. Conectarse al puerto UDP 3333 en el lado del cliente equivale a conectarse al puerto 7777 en el lado del servidor. No se expondrá ningún tráfico UDP.
Para ejecutar en Android, consulte Android_Guide
-a
opción agrega automáticamente una regla de iptables (o algunas reglas de iptables), udp2raw depende de esta regla de iptables para funcionar de manera estable. Tenga en cuenta que no olvide -a
(es un error común). Si no desea que udp2raw agregue la regla iptables automáticamente, puede agregarla manualmente (eche un vistazo a la opción -g
) y omita -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
y -g
Este programa envía paquetes a través de un socket sin formato. En el modo FakeTCP, el procesamiento de paquetes TCP del kernel de Linux debe bloquearse mediante una regla de iptables en ambos lados; de lo contrario, el kernel enviará automáticamente RST para un paquete TCP no reconocido y usted sufrirá problemas de estabilidad/rendimiento. Puede usar la opción -a
para permitir que el programa agregue/elimine automáticamente la regla iptables al iniciar/salir. También puede usar la opción -g
para generar la regla iptables y agregarla manualmente.
--cipher-mode
y --auth-mode
Se sugiere utilizar aes128cbc
+ hmac_sha1
para obtener la máxima seguridad. Si desea ejecutar el programa en un enrutador, puede probar xor
+ simple
, que puede engañar la inspección de paquetes mediante firewalls la mayor parte del tiempo, pero no puede protegerlo de ataques graves. El modo ninguno es solo para fines de depuración. No se recomienda configurar el modo de cifrado o el modo de autenticación en ninguno.
--seq-mode
El 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). El modo secuencial puede ayudarlo a cambiar ligeramente el comportamiento de aumento de secuencia. Si tiene problemas de conexión, intente cambiar el valor.
--lower-level
--lower-level
le permite enviar paquetes en el nivel 2 de OSI (nivel de enlace), para que pueda omitir cualquier regla local de iptables. Si tiene reglas de iptables complicadas que entran en conflicto con udp2raw y no puede (o es demasiado vago para) editar las reglas de iptables, --lower-level
puede ser muy útil. Pruebe --lower-level auto
para detectar automáticamente los parámetros; puede especificarlos manualmente si falla auto
.
Formato manual if_name#dest_mac_adress
, es decir: eth0#00:23:45:67:89:b9
.
--keep-rule
Supervise iptables y vuelva a agregar automáticamente las reglas de iptables (para bloquear el procesamiento TCP del kernel) si es necesario. Especialmente útil cuando otros programas pueden borrar las reglas de iptables (por ejemplo, si está utilizando openwrt, cada vez que cambie y confirme una configuración, regla de iptables puede ser limpiado y reconstruido).
--conf-file
También puede cargar opciones desde un archivo de configuración para mantener los secretos alejados del comando ps
.
Por ejemplo, reescriba las opciones para el ejemplo server
anterior (en la sección Primeros pasos) en el archivo de configuración:
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
Preste atención al parámetro -k
: en el modo de línea de comando, el shell eliminará las comillas alrededor de la contraseña. En los archivos de configuración no eliminamos las comillas.
Luego inicie el servidor con
./udp2raw_amd64 --conf-file server.conf
--fifo
Utilice un fifo (canalización con nombre) para enviar comandos al programa en ejecución. Por ejemplo --fifo fifo.file
.
En el lado del cliente, puede usar echo reconnect >fifo.file
para forzar al cliente a volver a conectarse. Actualmente no se ha implementado ningún comando para el servidor.
iperf3 TCP a través de OpenVPN + udp2raw (el modo UDP de iperf3 no se usa debido a un error mencionado en este número: esnet/iperf#296. En su lugar, empaquetamos el tráfico TCP en UDP mediante OpenVPN para probar el rendimiento. Lea la aplicación para obtener 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 de reversa era similar y no estaba cargada)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5
(la velocidad de reversa era similar y no estaba cargada)
Consulte la wiki para obtener más información:
https://github.com/wangyu-/udp2raw-tunnel/wiki