
Ferramenta de tunelamento ICMP, DNS e NTP para contornar censura, com proteção de integridade HMAC e clamping MSS para sessões web eficientes em redes restritivas.
O fraud-bridge ajuda a contornar ambientes de censura restritivos que bloqueiam conexões TCP ou UDP diretas, configurando túneis ICMP, NTP ou DNS (por IPv4 ou IPv6).
Ele corrige automaticamente a opção TCP MSS para obter um fluxo não fragmentado de pacotes (conhecido como MSS-clamping) para ganhar desempenho que permite usar sessões web através da ponte.
Ele usa MD5 para proteger a integridade (HMAC) do túnel contra pacotes TCP maliciosos injetados. Se você precisar de privacidade, terá que usar criptografia por conta própria. Supõe-se que você use SSH sobre o túnel de qualquer forma, diretamente ou com a opção de proxy SSH se precisar de HTTP tunelado.
Ao usar tunelamento DNS, o fraud-bridge usa cabeçalhos de extensão EDNS0 para colocar o máximo de bytes possível na resposta TXT.
O fraud-bridge também inclui algumas outras técnicas para lidar com certas limitações do bind, por exemplo, cotas/limitações.
Você também pode usá-lo para obter suporte completo de roaming/mobilidade em suas sessões SSH sem nenhum patch.
Depois de configurar o túnel, você pode querer ler como fazer seu messenger funcionar através do túnel.
Observe também que c->skills está fornecendo a cadeia completa de equipamentos de foda de censura que podem lhe interessar: crash e psc
Apenas execute make no Linux.
O uso é o seguinte:
fraud-bridge -- https://github.com/stealth/fraud-bridge
Usage: fraud-bridge <-k key> [-R IP] [-L IP] [-pP port] [-iIuUnN] [-s sz]
[-E sz] [-d dev] [-D domain] [-S usec] [-X user] [-r dir] [-t type] [-v]
-k -- HMAC key to protect tunnel packets
-R -- IP or IPv6 addr of (outside) peer when started inside
-L -- local IP addr to bind to if started outside (can be omitted)
-p -- remote port when in DNS/NTP mode (default: 53/123)
-P -- local port when in DNS/NTP mode (outside default: 53/123)
-i -- use ICMP tunnel
-I -- use ICMPv6 tunnel
-u -- use DNS tunnel over IP
-U -- use DNS tunnel over IPv6
-n -- use NTP4 tunnel over IP
-N -- use NTP4 tunnel over IPv6
-E -- set EDNS0 size (default: 1024)
-s -- set MSS size (default: 1024)
-d -- tunnel device to use (default: tun1)
-D -- DNS domain to use when DNS tunneling
-S -- usec slowdown for DNS ping (default: 5000)
-X -- user to run as (default: nobody)
-r -- chroot directory (default: /var/empty)
-t -- override ICMP/ICMP6 type (usually no need to change)
-v -- enable verbose mode
Algumas definições: inside refere-se à máquina dentro da rede censurada, provavelmente seu laptop/PC. outside refere-se a um VPS ou máquina fora da rede censurada, ou seja, o que as pessoas chamam de 'internet livre'.
Após a inicialização, o fraud-bridge abre um túnel ponto a ponto: 1.2.3.4 <-> 1.2.3.5
Então você precisa iniciar inside.sh no lado inside e outside.sh no lado outside.
Fica assim:
No lado outside do túnel (por exemplo, um servidor na internet):
# ./fraud-bridge -u -L 192.168.2.222 -D f.sub.dnstunnel.com -k key
(e iniciando outside.sh)
E no lado inside:
# ./fraud-bridge -u -R 127.0.0.1 -D f.sub.dnstunnel.com -k key
(e iniciando inside.sh)
como exemplo para um túnel DNS com um named local 127.0.0.1 em execução e o peer outside em 192.168.2.222. Como dito, a parte outside do túnel pode (e na verdade precisa) ser iniciada antecipadamente e apenas aguardará o peer abrir o túnel. Arquivos de zona de exemplo estão incluídos se você quiser experimentar com suas próprias configurações de bind. Para executar túneis ITW eles não são necessários.
O dispositivo de túnel padrão é tun1. Certifique-se de não executar várias instâncias do fraud-bridge ao mesmo tempo ou qualquer outro software de túnel que esteja usando este dispositivo de túnel. Após cada kill/restart do daemon fraud-bridge você tem que executar os scripts inside/outside novamente na extremidade específica onde você o reiniciou.
O parâmetro -L no lado outside pode (deve) ser omitido. Em configurações reais, o parâmetro -R nas configurações inside contém o endereço IP ou IP6 do servidor outside, ou se a recursão DNS for usada, o endereço IP do servidor DNS do seu provedor ou resolvedor DNS recursivo público. Se você não tiver seu próprio servidor DNS, ainda pode usar tunelamento DNS usando o IP do seu VPS como parâmetro -R no lado inside e usando qualquer (mas o mesmo) parâmetro de domínio -D em ambas as extremidades que pareça legítimo para um regime de censura, por exemplo -D blah.gov.
Antes de tentar tunelamento DNS, você provavelmente desejará tentar com tunelamento ICMP ou NTP. Se você vir avisos de chroot no syslog, pode ignorá-los ou fornecer argumentos válidos para -r.
Você pode então usar ssh -D 1234 1.2.3.5 para obter uma conexão SSH para 192.168.2.222 no exemplo acima e usar o proxy SOCKS5 na porta :1234 para sua sessão de navegador web que então roda através do túnel.
Você também pode fazer isso com ICMP: -i e ICMP no IPv6: -I ou DNS no UDP via IPv6: -U ou NTP via UDP: -n ou NTP via UDP/IPv6: -N.
Também é possível mudar o tipo de túnel (DNS para ICMP ou ICMP para NTP) além da sua conexão SSH, ou fazer roaming para outro IP local (por exemplo, mudar de wifi para 5G), pois o estado TCP é mantido no kernel local e remoto e não na ponte. Isso permite suporte completo de roaming/mobilidade SSH sem qualquer patch no SSH.
No modo verboso, o fraud-bridge deixará stdout aberto para relatar erros ou mensagens, então você precisa executá-lo em uma tela ou redirecionar a saída para /dev/null se precisar que ele seja executado em segundo plano (verboso). Tenha isso em mente, pois você precisa iniciar os scripts inside/outside após invocar o fraud-bridge. Se não usar -v, ele vai para segundo plano e registra erros no syslog.
Antes de usar qualquer túnel ICMP, certifique-se de relaxar as regras de firewall do seu modem a cabo para receber os pacotes de resposta do seu peer remoto. O fraud-bridge funciona atrás de NAT, mas precisa receber os pacotes de resposta no final. Ao usar tunelamento ICMP e os ecos ICMP estiverem bloqueados, você pode definir o parâmetro de tipo via -t. Por exemplo, usando -t 13 no lado inside e -t 14 no lado outside para obter pares de solicitação/resposta de timestamp.
Ao usar tunelamento DNS, o fraud-bridge usa cabeçalhos de extensão EDNS0 para colocar o máximo de bytes possível na resposta TXT. Em meus testes, como ele tenta responder a quaisquer pacotes de temporização, não produz logs no arquivo de log do sistema bind9. Se você alterar o EDNS0 (-E), precisa fazer isso em ambas as extremidades com o mesmo valor. (Pois o lado inside anuncia o tamanho máximo de payload UDP ao servidor de nomes e o endpoint outside calcula o MSS a partir do que foi fornecido com -E.)
Ao usar tunelamento NTP, alguns provedores com CGN bloqueiam pacotes NTP grandes (apenas em IPv4). Em um ISP alemão comum, quaisquer pacotes NTP > 256 bytes eram bloqueados. Então você tem que definir o MSS de acordo para obter pacotes menores como -s 100 para que a pilha TCP envie os segmentos em tamanhos menores.
Como o fraud-bridge abre um túnel PtP, ele pode remover o cabeçalho IP dos pacotes que transmite e sintetizá-lo em cada extremidade. Então, para tunelamento ICMP, você tem apenas uma sobrecarga de 8 (ICMP) + 16 (HMAC) bytes, o que é aceitável. O tunelamento DNS ainda tem boa latência e largura de banda quando feito diretamente, graças ao MSS clamping. Ao tunelar indiretamente via resolvedores DNS públicos, os valores padrão são bons o suficiente para ter uma sessão razoável, mas é claro que o tunelamento ICMP é preferível sempre que possível.
Usando ssh -D [0.0.0.0]:1234 1.2.3.5 você pode configurar um proxy SOCKS local na porta 1234 da sua máquina (inside) e distribuí-lo via WLAN para sua vizinhança para sessões web livres de censura.
Você também pode configurar um tor local na máquina outside, oferecendo uma porta SOCKS em 127.0.0.1:9150 como você normalmente faz e depois usando ssh -L 9150:127.0.0.1:9150 1.2.3.5 para encaminhar esta porta outside para sua máquina inside, para espelhar exatamente a configuração tor outside localmente e distribuí-la como porta SOCKS tor via WLAN para seus usuários. Desta forma, não precisamos implementar transportes plugáveis e você ainda pode usar tor como antes. O mesmo também funciona com sessões crash ou psc ou qualquer outro mecanismo de tunelamento.
O parâmetro -S tem um valor padrão razoável para os pacotes de temporização DNS que precisam ser enviados ao servidor em intervalo constante. Valores menores proporcionam melhor latência do túnel, mas podem sobrecarregar o servidor DNS recursivo e produzir mais ruído.
orgulhosamente patrocinado por: