
Um Túnel que Converte Tráfego UDP em Tráfego UDP Criptografado/FakeTCP/ICMP usando Raw Socket, ajuda você a Contornar Firewalls UDP (ou Ambiente UDP Instável)
Um túnel que transforma tráfego UDP em tráfego FakeTCP/UDP/ICMP criptografado usando Raw Socket, ajudando você a contornar firewalls UDP (ou ambientes UDP instáveis).
Quando usado sozinho, o udp2raw tunela apenas tráfego UDP. No entanto, se você usar udp2raw em conjunto com qualquer VPN baseada em UDP, poderá tunelar qualquer tráfego (incluindo TCP/UDP/ICMP). Atualmente, OpenVPN, L2TP, ShadowVPN e tinyfecVPN são confirmados como suportados.

ou

Host Linux (incluindo desktop Linux, celular/tablet Android, roteador OpenWRT ou Raspberry Pi) com conta root ou capacidade cap_net_raw.
Para usuários Windows e MacOS, use o udp2raw neste repositório.
Cabeçalhos ICMP/FakeTCP ajudam a contornar bloqueio UDP, QoS UDP ou comportamento inadequado de NAT UDP em algumas operadoras. No modo de cabeçalho ICMP, o udp2raw funciona como um túnel ICMP.
Cabeçalhos UDP também são suportados. No modo de cabeçalho UDP, ele se comporta como um túnel UDP normal, e você pode aproveitar outros recursos (como criptografia, anti-replay ou estabilização de conexão).
No modo de cabeçalho FakeTCP, o udp2raw simula o handshake de três vias ao estabelecer uma conexão, simula seq e ack_seq durante a transferência de dados. Também simula algumas opções de TCP como: MSS, sackOk, TS, TS_ack, wscale. Firewalls considerarão o FakeTCP como uma conexão TCP, mas ele é essencialmente UDP: suporta entrega em tempo real/fora de ordem (como o UDP normal), sem controle de congestionamento ou retransmissão. Portanto, não haverá problema de TCP sobre TCP ao usar OpenVPN.
Falhas de conexão são detectadas por heartbeats. Se houver timeout, o cliente alterará automaticamente o número da porta e se reconectará. Se a reconexão for bem-sucedida, a conexão anterior será recuperada e todas as conversas UDP existentes permanecerão válidas.
Por exemplo, se você usar udp2raw + OpenVPN, o OpenVPN não perderá a conexão após qualquer reconexão, mesmo se o cabo de rede for desconectado ou o ponto de acesso WiFi for alterado.
Multiplexação Um cliente pode lidar com múltiplas conexões UDP, todas compartilhando a mesma conexão raw.
Múltiplos Clientes Um servidor pode ter múltiplos clientes.
Suporte a NAT Todos os 3 modos funcionam em ambientes NAT.
Suporte a OpenVZ Testado no VPS BandwagonHost.
Fácil de Compilar Sem dependências. Para compilar o udp2raw de forma cruzada, tudo que você precisa é baixar uma toolchain, modificar o makefile para apontar para a toolchain, executar make cross e pronto. (Nota: binários pré-compilados para Desktop, Raspberry Pi, Android e alguns roteadores OpenWRT já estão incluídos nos 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
Baixe a versão binária em https://github.com/wangyu-/udp2raw-tunnel/releases
Suponha que seu UDP esteja bloqueado, com QoS ou simplesmente mal suportado. Suponha que o IP do seu servidor seja 44.55.66.77 e você tenha um serviço escutando na porta UDP 7777.
# Execute no lado do servidor:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# Execute no lado do cliente
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --raw-mode faketcp -a
(Os comandos acima precisam ser executados como root. Para maior segurança, com alguns passos extras, você pode executar o udp2raw como não root. Verifique este link para mais informações)


Agora, um túnel raw criptografado foi estabelecido entre cliente e servidor através da porta TCP 4096. Conectar-se à porta UDP 3333 no lado do cliente equivale a conectar-se à porta 7777 no lado do servidor. Nenhum tráfego UDP será exposto.
Para executar no Android, consulte o Android_Guide
A opção -a adiciona automaticamente uma regra iptables (ou algumas regras iptables) para você. O udp2raw depende dessa regra iptables para funcionar de forma estável. Lembre-se de não esquecer o -a (é um erro comum). Se você não quiser que o udp2raw adicione a regra iptables automaticamente, pode adicioná-la manualmente (veja a opção -g) e omitir o -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 e -gEste programa envia pacotes via raw socket. No modo FakeTCP, o processamento de pacotes TCP do kernel Linux deve ser bloqueado por uma regra iptables em ambos os lados; caso contrário, o kernel enviará automaticamente RST para um pacote TCP não reconhecido e você sofrerá problemas de estabilidade/desempenho. Você pode usar a opção -a para que o programa adicione/exclua automaticamente a regra iptables ao iniciar/sair. Você também pode usar a opção -g para gerar a regra iptables e adicioná-la manualmente.
--cipher-mode e --auth-modeÉ recomendado usar aes128cbc + hmac_sha1 para obter máxima segurança. Se você quiser executar o programa em um roteador, pode tentar xor + simple, que pode enganar a inspeção de pacotes por firewalls na maioria das vezes, mas não o protegerá contra ataques sérios. O modo none é apenas para depuração. Não é recomendado definir cipher-mode ou auth-mode como none.
--seq-modeO modo FakeTCP não se comporta 100% como uma conexão TCP real. As operadoras podem ser capazes de distinguir o tráfego TCP simulado do tráfego TCP real (embora seja caro). seq-mode pode ajudá-lo a alterar ligeiramente o comportamento de incremento de seq. Se você tiver problemas de conexão, tente alterar o valor.
--lower-level--lower-level permite enviar pacotes no nível 2 do OSI (nível de enlace), para que você possa contornar quaisquer regras iptables locais. Se você tiver regras iptables complicadas que entrem em conflito com o udp2raw e não puder (ou tiver preguiça de) editar as regras iptables, --lower-level pode ser muito útil. Tente --lower-level auto para detectar automaticamente os parâmetros. Você pode especificá-los manualmente se auto falhar.
Formato manual if_name#dest_mac_adress, ex.: eth0#00:23:45:67:89:b9.
--keep-ruleMonitora o iptables e readiciona automaticamente as regras iptables (para bloquear o processamento TCP do kernel) se necessário. Especialmente útil quando as regras iptables podem ser limpas por outros programas (por exemplo, se você estiver usando OpenWRT, toda vez que alterar e confirmar uma configuração, as regras iptables podem ser limpas e reconstruídas).
--conf-fileVocê também pode carregar opções de um arquivo de configuração para manter segredos longe do comando ps.
Por exemplo, reescreva as opções do exemplo de servidor acima (na seção Primeiros Passos) em um arquivo de configuração:
server.conf
-s
# Você pode adicionar comentários como este
# Comentários DEVEM ocupar uma linha inteira
# Caso contrário, não funcionarão como esperado
# Endereço de escuta
-l 0.0.0.0:4096
# Endereço remoto
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
Preste atenção ao parâmetro -k: No modo de linha de comando, as aspas ao redor da senha serão removidas pelo shell. Em arquivos de configuração, não removemos aspas.
Em seguida, inicie o servidor com
./udp2raw_amd64 --conf-file server.conf
--fifoUse um fifo (pipe nomeado) para enviar comandos ao programa em execução. Por exemplo, --fifo fifo.file.
No lado do cliente, você pode usar echo reconnect >fifo.file para forçar o cliente a se reconectar. Atualmente, nenhum comando foi implementado para o servidor.
iperf3 TCP via OpenVPN + udp2raw (O modo UDP do iperf3 não é usado devido a um bug mencionado nesta issue: https://github.com/esnet/iperf/issues/296 . Em vez disso, empacotamos o tráfego TCP em UDP através do OpenVPN para testar o desempenho. Leia Aplicação para detalhes.
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: simple

(a velocidade reversa foi semelhante e não enviada)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(a velocidade reversa foi semelhante e não enviada)
Consulte a wiki para mais informações: