- Notifications
You must be signed in to change notification settings - Fork189
Private proxy solution & network troubleshooting tool.
License
yinqiwen/gsnova
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
GSnova: Private Proxy Solution & Network Troubleshooting Tool.
___ ___ ___ ___ ___ ___ /\ \ /\ \ /\__\ /\ \ /\__\ /\ \ /::\ \ /::\ \ /::| | /::\ \ /:/ / /::\ \ /:/\:\ \ /:/\ \ \ /:|:| | /:/\:\ \ /:/ / /:/\:\ \ /:/ \:\ \ _\:\~\ \ \ /:/|:| |__ /:/ \:\ \ /:/__/ ___ /::\~\:\ \ /:/__/_\:\__\/\ \:\ \ \__\/:/ |:| /\__\/:/__/ \:\__\|:| | /\__\/:/\:\ \:\__\ \:\ /\ \/__/\:\ \:\ \/__/\/__|:|/:/ /\:\ \ /:/ /|:| |/:/ /\/__\:\/:/ / \:\ \:\__\ \:\ \:\__\ |:/:/ / \:\ /:/ / |:|__/:/ / \::/ / \:\/:/ / \:\/:/ / |::/ / \:\/:/ / \::::/__/ /:/ / \::/ / \::/ / /:/ / \::/ / ~~~~ /:/ / \/__/ \/__/ \/__/ \/__/ \/__/
Deprecated, use the rust versionrsnova instead.
- Multiple transport channel support
- http/https
- http2
- websocket
- tcp/tls
- quic
- kcp
- ssh
- Multiplexing
- All proxy connections running over N persist proxy channel connections
- Simple PAC(Proxy Auto Config)
- Multiple Ciphers support
- Chacha20Poly1305
- Salsa20
- AES128
- HTTP/Socks4/Socks5 Proxy
- Local client running as HTTP/Socks4/Socks5 Proxy
- Transparent TCP/UDP Proxy
- Transparent tcp/udp proxy implementation in pure golang
- Multi-hop Proxy
- TLS man-in-the-middle(MITM) Proxy
- HTTP(S) Packet Capture for Web Debugging
- Log HTTP(S) Packets in file
- Forward HTTP(S) Packets to Remote HTTP Server
- P2P/P2S2P Proxy
- P2P: Use TCP NAT tunnel for direct P2P commnunication if possible
- P2S2P: Use middle server for two peers to communication
- Use UPNP to expose port for remote p2p peer if possible.
- Low-memory Environments Support
- Use less than 20MB RSS memory at client/server side
go1.9 or higher is requied.
go get -t -u -v github.com/yinqiwen/gsnova
There is also prebuilt binary release athere
Usage of ./gsnova: -admin string Client Admin listen address -blackList value Proxy blacklist item config -client Launch gsnova as client. -cmd Launch gsnova by command line without config file. -cnip string China IP list. (default "./cnipset.txt") -conf string Config file of gsnova. -forward value Forward connection to specified address -hosts string Hosts file of gsnova client. (default "./hosts.json") -httpdump.dst string HTTP Dump destination file or http url -httpdump.filter value HTTP Dump Domain Filter, eg:*.google.com -key string Cipher key for transmission between local&remote. (default "809240d3a021449f6e67aa73221d42df942a308a") -listen value Listen on address. -log string Log file setting (default "color,gsnova.log") -mitm Launch gsnova as a MITM Proxy -ots string Online trouble shooting listen address -p2p string P2P Token. -pid string PID file (default ".gsnova.pid") -ping_interval int Channel ping interval seconds. (default 30) -pprof string PProf trouble shooting listen address -proxy string Proxy setting to connect remote server. -remote value Next remote proxy hop server to connect for client, eg:wss://xxx.paas.com -servable Client as a proxy server for peer p2p client -server Launch gsnova as server. -stream_idle int Mux stream idle timout seconds. (default 10) -tls.cert string TLS Cert file -tls.key string TLS Key file -upnp int UPNP port to expose for p2p. -user string Username for remote server to authorize. (default "gsnova") -version Print version. -whitelist value Proxy whitelist item config -window string Max mux stream window size, default 512K -window_refresh string Mux stream window refresh size, default 32K
./gsnova -cmd -server -listen tcp://:48100 -listen quic://:48100 -listen tls://:48101 -listen kcp://:48101 -listen http://:48102 -listen http2://:48103 -key 809240d3a021449f6e67aa73221d42df942a308a -user"*"
This would launch a running instance listening at serveral ports with different transport protocol.
The server can also be deployed to serveral PAAS service like heroku/openshift and some docker host service.
./gsnova -cmd -client -listen :48100 -remote http2://app1.openshiftapps.com -key 809240d3a021449f6e67aa73221d42df942a308a
This would launch a socks4/socks5/http proxy at port 48100 and use http2://app1.openshiftapps.com as next proxy hop.
This is a sample forclient.json, theKey
and theServerList
need to be modified to match your server.
./gsnova -client -conf ./client.json
GSnova support more than ONE remote server as the next hops, just add more-remote server
arguments to enable multi-hop proxy.
This would usehttp2://app1.openshiftapps.com
as the first proxy ho and usewss://app2.herokuapp.com
as the final proxy hop.
./gsnova -cmd -client -listen :48101 -remote http2://app1.openshiftapps.com -remote wss://app2.herokuapp.com -key 809240d3a021449f6e67aa73221d42df942a308a
- Edit iptables rules.
- It's only works on linux.
GSnova support running the client as a MITM proxy to capture HTTP(S) packets for web debuging.
This would capture HTTP(S) traffic packets into local dist filehttpdump.log
.
./gsnova -cmd -client -listen :48101 -remote direct -mitm -httpdump.dst ./httpdump.log -httpdump.filter"*.google.com" -httpdump.filter"*.facebook.com"
P2P/P2S2P Proxy can help you to connect two nodes, and use one of them as a tcp proxy server for the other one. This feature can be used for scenarios like:
- Expose any tcp based service behind a NAT or firewall to a specific node in the internet.
There are 3 nodes which should install/run gsnova, a middle server(S) with public IP address, two client nodes(A & B) behind a NAT or firewall.
For the middle server(S), run as a server with a cipher key.
./gsnova -cmd -server -listen tcp://:48103 -key p2pkey -log color
For the node(B) as a proxy server, run as a client to connect server with a P2P token:
./gsnova -cmd -client -servable -key p2pkey -remote tcp://<server ip>:48103 -p2p testp2p -log color
For the node(A) as a client for peer proxy server, run as a client to connect server with same P2P token:
./gsnova -cmd -client -listen :7788 -key p2pkey -remote tcp://<server ip>:48103 -p2p testp2p -log color
If there is no error, now the node A with listen address :7788 can be used as a http/socks4/socks5 proxy to access servers behind a NAT or firewall which node B located in.
And in gsnova, it would try to run with P2P mode first, if it's not pissible, it would use P2S2P mode which would use the middle server to forward tcp stream to remote peeer.
The client side can be compiled to android library bygomobile
, eg:
gomobile bind -target=android -a -v github.com/yinqiwen/gsnova/local/gsnova
Users can develop there own app by using the generatedgsnova.aar
.
There is a very simple andorid appgsnova-android-v0.27.3.1.zip which usetun2socks
+gsnova
to build.
About
Private proxy solution & network troubleshooting tool.