cmd | ||
config | ||
internal | ||
Makefile | ||
README.md | ||
release.sh |
Cloak
A shadowsocks plugin that obfuscates the traffic as normal HTTPS traffic and disguises the proxy server as a normal webserver.
This is an active WIP. Everything is subject to change.
This project is based on GoQuiet. The most significant difference is that, in GoQuiet, a new TCP connection is establieshed and a TLS handshake is done between the client and the proxy server each time a connection is made to ssclient, whereas in Cloak all the traffic is multiplexed through a fixed amount of consistant TCP connections between the client and the proxy server. The major benefits are:
-
Significantly quicker establishment of new connections as TLS handshake is only done on the startup of the client
-
More realistic traffic pattern
Besides, Cloak allows multiple users to use one server on a single port. QoS restrictions such as bandwidth limitation and data cap can also be managed.
Build
Simply make client
and make server
. Output binary will be in the build folder
Setup
For the administrator of the server
- Install and configure shadowsocks-libev on your server
- Clone this repo onto your server
- Build and run ck-server -k. The base64 string before the comma is the public key, the one after the comma is the private key
- Run
ck-server -u
. This will be used as the AdminUID - Put the private key and the AdminUID you obtained previously into config/ckserver.json
- Edit the configuration file of shadowsocks-libev (default location is /etc/shadowsocks-libev/config.json). Let
server_port
be443
,plugin
be the full path to the ck-server binary andplugin_opts
be the full path to ckserver.json. If the fieldsplugin
andplugin_opts
were not present originally, add these fields to the config file. - Run ss-server as root (because we are binding to TCP port 443)
If you want to add more users
- Run ck-server -u to generate a new UID
- On your client, run
ck-client -a -c <path-to-ckclient.json>
to enter admin mode - Input as prompted, that is your ip:port of the server and your AdminUID. Enter 4 to create a new user.
- Enter the UID in your ckclient.json as the prompted UID, enter SessionsCap (maximum amount of concurrent sessions a user can have), UpRate and DownRate (in bytes/s), UpCredit and DownCredit (in bytes) and ExpiryTime (as a unix epoch)
- Give your PUBLIC key and the newly generated UID to the new user
Note: the user database is persistent as it's in-disk. You don't need to add the users again each time you start ck-server.
Instructions for clients
- Install and configure a version of shadowsocks client that supports plugins (such as shadowsocks-libev and shadowsocks-windows)
- Clone this repo and build ck-client
- Obtain the PUBLIC key and your UID (or the AdminUID, if you are the server admin) from the administrator of your server
- Put the public key and the UID you obtained into config/ckclient.json
- Configure your shadowsocks client with your server information. The field
plugin
should be the path to ck-server binary andplugin_opts
should be the path to ckclient.json