Shadowsocks-libev is a lightweight and secure socks5 proxy. It is a port of the original shadowsocks created by clowwindy. Shadowsocks-libev is written in pure C and takes advantage of libev to achieve both high performance and low resource consumption.
Shadowsocks-libev consists of five components. One is ss-server(1) that runs on a remote server to provide secured tunnel service. ss-local(1) and ss-redir(1)are clients on your local machines to proxy traffic(TCP/UDP or both). ss-tunnel(1) is a tool for local port forwarding. While ss-local(1) works as a standard socks5 proxy, ss-redir(1) works as a transparent proxy and requires netfilter’s NAT module. For more information, check out the EXAMPLE section. ss-manager(1) is a controller for multi-user management and traffic statistics, using UNIX domain socket to talk with ss-server(1). Also, it provides a UNIX domain socket or IP based API for other software. About the details of this API, please refer to the PROTOCOL section.
CONFIG FILE
The config file is written in JSON and easy to edit. The config file equivalent of command line options is listed as example below.
Command line | JSON |
-s some.server.net | “server”: “some.server.net” |
-s some.server.net -p 1234 (client) | “server”: “some.server.net:1234” |
-p 1234 | “server_port”: “1234” |
-b 0.0.0.0 | “local_address”: “0.0.0.0” |
-l 4321 | “local_port”: “4321” |
-k “PasSworD” | “password”: “PasSworD” |
-m “aes-256-cfb” | “method”: “aes-256-cfb” |
-t 60 | “timeout”: 60 |
-a nobody | “user”: “nobody” |
–fast-open | “fast_open”: true |
–reuse-port | “reuse_port”: true |
–no-delay | “no_delay”: true |
–plugin “obfs-server” | “plugin”: “obfs-server” |
–plugin-opts “obfs=http” | “plugin_opts”: “obfs=http” |
-6 | “ipv6_first”: true |
-n “/etc/nofile” | “nofile”: “/etc/nofile” |
-d “8.8.8.8” | “nameserver”: “8.8.8.8” |
-L “somedns.net:53” | “tunnel_address”: “somedns.net:53” |
-u | “mode”: “tcp_and_udp” |
-U | “mode”: “udp_only” |
no “-u” nor “-U” options (default) | “mode”: “tcp_only” |
(only in ss-manager’s config) | “port_password”: {“1234″:”PasSworD”} |
PROTOCOL
ss-manager(1) provides several APIs through UDP protocol.
– Send UDP commands in the following format to the manager-address provided to ss-manager(1):
– To add a port: