grasshopper
Optimize performance for QPP encryption
Grasshopper é um encaminhador de pacotes UDP que escuta pacotes recebidos e os encaminha para um destino configurado. Opcionalmente, suporta criptografia para pacotes de entrada e saída, usando diferentes chaves e métodos.
O Grasshopper funciona como um sistema de retransmissão encadeado. Faça uma consulta DNS encadeada. Por exemplo:
┌────────────┐ ┌───────────────┐
│ ENCRYPTED │ │ RE-ENCRYPTION │
└──────┬─────┘ │ AES ───► 3DES │
│ └───┬───────────┘
│ │
┌─────────┐▼ ┌────────────┐│ ┌─────────┐
<HOP0> HOPS(AES) │ DECRYPTED │▼ <HOP5> HOPS(FINAL)
┌─────────┐ └ ┌────┐ └ DATA HOPS(3DES) │ ┌─┴──┐ ┌────────────┐
│ dig xxx ├─► CLEAR TEXT │HOP1┼── CIPHER ──► PACKET ┌─┴──┐ └ DNS │Hop6├─► 8.8.8.8:53 │
│ @hop0 │ ┌ │Hop2│ (AES) ┌ │Hop4├─ CIPHER ──► QUERY │Hop7│ └────────────┘
└─────────┘ │ ▲ │HOP3│ <HOP2> ▲ │Hop5│ (3DES) ┌ └─┬──┘
│ │ └────┘ │ │ └─┬──┘ │ │
└──┼──────┘ └─────┼──────┘ └─────────┘
│ │
┌──┼────────┐ │
│ │ │
│ OPTIONAL ├──────────────────┘
│ PACKET │
│ PROCESSOR │
│ │
└───────────┘
Instale a versão mais recente do Grasshopper usando o seguinte comando:
go install github.com/xtaci/grasshopper/cmd/grasshopper@latest
O Grasshopper oferece suporte aos seguintes parâmetros:
Grasshopper is a UDP packet forwarder that listens for incoming packets and forwards them to a configured destination. It optionally supports cryptography for both incoming and outgoing packets, using different keys and methods. Optionally, the listener can be configured to apply cryptogrraphy on both the incoming and outgoing packets, with different keys and methods.
Usage:
grasshopper [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
help Help about any command
start Start a listener for UDP packet forwarding
Flags:
--ci string Cryptography method for incoming data. Available options: aes, aes-128, aes-192, qpp, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, sm4, none (default "qpp")
--co string Cryptography method for incoming data. Available options: aes, aes-128, aes-192, qpp, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, sm4, none (default "qpp")
-c, --config string config file name
-h, --help help for grasshopper
--ki string Secret key to encrypt and decrypt for the last hop(client-side) (default "it's a secret")
--ko string Secret key to encrypt and decrypt for the next hops (default "it's a secret")
-l, --listen string Listener address, eg: "IP:1234" (default ":1234")
-n, --nexthops strings Servers to randomly forward to (default [127.0.0.1:3000])
--sockbuf int Socket buffer size for the listener (default 1048576)
--timeout duration Idle timeout duration for a UDP connection (default 1m0s)
-t, --toggle Help message for toggle
-v, --version version for grasshopper
Use "grasshopper [command] --help" for more information about a command.
Use ncat
para iniciar um servidor de eco UDP na porta 5000:
ncat -e /bin/cat -k -u -l 5000
Execute o seguinte comando para iniciar um retransmissor:
./grasshopper start --ci aes --co none -l " 127.0.0.1:4001 " -n " 127.0.0.1:5000 "
--ci aes
: Aplica criptografia em pacotes recebidos.--co none
: transfere texto simples para o servidor de eco ncat
.Execute o seguinte comando para iniciar outro retransmissor:
./grasshopper start --ci none --co aes -l " 127.0.0.1:4000 " -n " 127.0.0.1:4001 "
--ci none
: Nenhuma criptografia é aplicada aos pacotes recebidos.--co aes
: criptografa e retransmite pacotes para o próximo salto. Use ncat
para enviar pacotes UDP e interagir com a cadeia de retransmissão:
ncat -u 127.0.0.1 2132
┌──────────── YOUR─LAPTOP ──────────────┐ ┌────────── CLOUD─SERVER ───────────┐
│ │ │ │
│ │ │ │
│ ┌───────────────────┐ ┌──────────┐ │ │ ┌──────────┐ ┌───────────────┐ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ dig google.com ├───► Level-1 │ │ │ │ Level-2 ├───► Google DNS:53 │ │
│ │ @127.0.0.1 -p 4000│ │ Relayer ┼──┼ ENCRYPTED ┼─► Relayer │ │ CloudFlare:53 │ │
│ │ │ │ │ │ UDP │ │ │ │ │ │
│ └───────────────────┘ └──────────┘ │ │ └──────────┘ └───────────────┘ │
│ │ │ │
│ │ │ │
└───────────────────────────────────────┘ └───────────────────────────────────┘
./grasshopper start --ci aes --co none -l " CLOUD_PUBLIC_IP:4000 " -n " 8.8.8.8:53,1.1.1.1:53 "
--ci aes
: Descriptografa o pacote do Retransmissor de Nível 1.--co none
: transfere o pacote de consulta DNS de texto simples descriptografado para o DNS do Google../grasshopper start --ci none --co aes -l " 127.0.0.1:4000 " -n " CLOUD_PUBLIC_IP:4000 "
--ci none
: Como o comando dig
consulta em texto simples, não precisamos descriptografar o pacote.--co aes
: Descriptografa e retransmite pacotes para o Retransmissor de Nível 2dig
(no seu laptop) dig google.com @127.0.0.1 -p 4000