grasshopper
Optimize performance for QPP encryption
Grasshopper는 들어오는 패킷을 수신하고 구성된 대상으로 전달하는 UDP 패킷 전달자입니다. 선택적으로 다양한 키와 방법을 사용하여 들어오고 나가는 패킷 모두에 대한 암호화를 지원합니다.
Grasshopper는 체인으로 연결된 중계 시스템으로 기능합니다. 연결된 DNS 쿼리를 수행합니다. 예를 들면 다음과 같습니다.
┌────────────┐ ┌───────────────┐
│ 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 │
│ │
└───────────┘
다음 명령을 사용하여 최신 버전의 Grasshopper를 설치하십시오:
go install github.com/xtaci/grasshopper/cmd/grasshopper@latest
Grasshopper는 다음 매개변수를 지원합니다:
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.
ncat
사용하여 포트 5000에서 UDP 에코 서버를 시작합니다.
ncat -e /bin/cat -k -u -l 5000
Relayer를 시작하려면 다음 명령어를 실행하세요.
./grasshopper start --ci aes --co none -l " 127.0.0.1:4001 " -n " 127.0.0.1:5000 "
--ci aes
: 수신 패킷에 암호화를 적용합니다.--co none
: 일반 텍스트를 ncat
에코 서버로 전송합니다.다른 중계기를 시작하려면 다음 명령을 실행하십시오.
./grasshopper start --ci none --co aes -l " 127.0.0.1:4000 " -n " 127.0.0.1:4001 "
--ci none
: 들어오는 패킷에 암호화가 적용되지 않습니다.--co aes
: 패킷을 암호화하고 다음 홉으로 중계합니다. ncat
사용하여 UDP 패킷을 보내고 중계기 체인과 상호 작용합니다.
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
: Level-1 Relayer의 패킷을 해독합니다.--co none
: 해독된 일반 텍스트 DNS 쿼리 패킷을 Google DNS로 전송합니다../grasshopper start --ci none --co aes -l " 127.0.0.1:4000 " -n " CLOUD_PUBLIC_IP:4000 "
--ci none
: dig
명령은 일반 텍스트로 쿼리하므로 패킷을 해독할 필요가 없습니다.--co aes
: 패킷을 해독하고 레벨 2 중계기로 중계합니다.dig
사용하여 Level-1 Relayer 쿼리(노트북에서) dig google.com @127.0.0.1 -p 4000