You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

379 lines
11 KiB

12 years ago
11 years ago
12 years ago
11 years ago
10 years ago
11 years ago
11 years ago
9 years ago
11 years ago
11 years ago
9 years ago
9 years ago
12 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
10 years ago
11 years ago
11 years ago
11 years ago
12 years ago
9 years ago
9 years ago
11 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
9 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
10 years ago
10 years ago
9 years ago
9 years ago
9 years ago
9 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
10 years ago
11 years ago
  1. shadowsocks-libev
  2. =================
  3. Intro
  4. -----
  5. [Shadowsocks-libev](http://shadowsocks.org) is a lightweight secured socks5
  6. proxy for embedded devices and low end boxes.
  7. It is a port of [shadowsocks](https://github.com/shadowsocks/shadowsocks)
  8. created by [@clowwindy](https://github.com/clowwindy) maintained by
  9. [@madeye](https://github.com/madeye) and [@linusyang](https://github.com/linusyang).
  10. Current version: 2.4.1 | [Changelog](debian/changelog)
  11. Travis CI: [![Travis CI](https://travis-ci.org/shadowsocks/shadowsocks-libev.png?branch=master)](https://travis-ci.org/shadowsocks/shadowsocks-libev) | Jenkins Matrix: [![Jenkins](https://jenkins.shadowvpn.org/buildStatus/icon?job=Shadowsocks-libev)](https://jenkins.shadowvpn.org/job/Shadowsocks-libev/)
  12. Features
  13. --------
  14. Shadowsocks-libev is writen in pure C and only depends on
  15. [libev](http://software.schmorp.de/pkg/libev.html) and
  16. [openssl](http://www.openssl.org/) or [polarssl](https://polarssl.org/).
  17. In normal usage, the memory footprint is about 600KB and the CPU utilization is
  18. no more than 5% on a low-end router (Buffalo WHR-G300N V2 with a 400MHz MIPS CPU,
  19. 32MB memory and 4MB flash).
  20. Installation
  21. ------------
  22. #### Notes about PolarSSL
  23. * Default crypto library is OpenSSL. To build against PolarSSL,
  24. specify `--with-crypto-library=polarssl` and `--with-polarssl=/path/to/polarssl`
  25. when running `./configure`.
  26. * PolarSSL __1.2.5 or newer__ is required. Currently, PolarSSL does __NOT__ support
  27. CAST5-CFB, DES-CFB, IDEA-CFB, RC2-CFB and SEED-CFB.
  28. * RC4 is only support by PolarSSL __1.3.0 or above__.
  29. ### Debian & Ubuntu
  30. #### Install from repository
  31. Add GPG public key
  32. ```bash
  33. wget -O- http://shadowsocks.org/debian/1D27208A.gpg | sudo apt-key add -
  34. ```
  35. Add either of the following lines to your /etc/apt/sources.list
  36. ```
  37. # Ubuntu 14.04 or above
  38. deb http://shadowsocks.org/ubuntu trusty main
  39. # Debian Wheezy, Ubuntu 12.04 or any distribution with libssl > 1.0.1
  40. deb http://shadowsocks.org/debian wheezy main
  41. # Debian Squeeze, Ubuntu 11.04, or any distribution with libssl > 0.9.8, but < 1.0.0
  42. deb http://shadowsocks.org/debian squeeze main
  43. ```
  44. Then,
  45. ``` bash
  46. sudo apt-get update
  47. sudo apt-get install shadowsocks-libev
  48. ```
  49. #### Build package from source
  50. Supported Platforms:
  51. * Debian 7 (see below), 8, unstable
  52. * Ubuntu 14.10, 15.04 or higher
  53. To build packages on Debian 7 (Wheezy), you need to enable `debian-backports`
  54. to install systemd-compatibility packages like `dh-systemd` or `init-system-helpers`.
  55. This also means that you can only install those built packages on systems that have
  56. `init-system-helpers` installed.
  57. Otherwise, try to build and install directly from source. See the **Linux**
  58. section below.
  59. ``` bash
  60. cd shadowsocks-libev
  61. sudo apt-get install build-essential autoconf libtool libssl-dev \
  62. gawk debhelper dh-systemd init-system-helpers
  63. dpkg-buildpackage -us -uc -i
  64. cd ..
  65. sudo dpkg -i shadowsocks-libev*.deb
  66. ```
  67. #### Configure and start the service
  68. ```
  69. # Edit the configuration file
  70. sudo vim /etc/shadowsocks-libev/config.json
  71. # Edit the default configuration for debian
  72. sudo vim /etc/default/shadowsocks-libev
  73. # Start the service
  74. sudo /etc/init.d/shadowsocks-libev start # for sysvinit, or
  75. sudo systemctl start shasowsocks-libev # for systemd
  76. ```
  77. ### Fedora & RHEL
  78. Supported distributions include
  79. - Fedora 20, 21, rawhide
  80. - RHEL 6, 7 and derivatives (including CentOS, Scientific Linux)
  81. #### Install from repository
  82. Enable repo via `dnf`:
  83. ```
  84. su -c 'dnf copr enable librehat/shadowsocks'
  85. ```
  86. Or download yum repo on [Fedora Copr](https://copr.fedoraproject.org/coprs/librehat/shadowsocks/) and put it inside `/etc/yum.repos.d/`. The release `Epel` is for RHEL and its derivatives.
  87. Then, install `shadowsocks-libev` via `dnf`:
  88. ```bash
  89. su -c 'dnf update'
  90. su -c 'dnf install shadowsocks-libev'
  91. ```
  92. or `yum`:
  93. ```bash
  94. su -c 'yum update'
  95. su -c 'yum install shadowsocks-libev'
  96. ```
  97. ### Linux
  98. For Unix-like systems, especially Debian-based systems,
  99. e.g. Ubuntu, Debian or Linux Mint, you can build the binary like this:
  100. ```bash
  101. sudo apt-get install build-essential autoconf libtool libssl-dev
  102. ./configure && make
  103. sudo make install
  104. ```
  105. ### FreeBSD
  106. ```bash
  107. su
  108. cd /usr/ports/net/shadowsocks-libev
  109. make install
  110. ```
  111. Edit your config.json file. By default, it's located in /usr/local/etc/shadowsocks-libev
  112. To enable shadowsocks-libev, add the following rc variable to your /etc/rc.conf file.
  113. ```
  114. shadowsocks_libev_enable="YES"
  115. ```
  116. Start the shadowsocks server:
  117. ```bash
  118. service shadowsocks_libev start
  119. ```
  120. ### OpenWRT
  121. ```bash
  122. # At OpenWRT build root
  123. pushd package
  124. git clone https://github.com/shadowsocks/shadowsocks-libev.git
  125. popd
  126. # Enable shadowsocks-libev in network category
  127. make menuconfig
  128. # Optional
  129. make -j
  130. # Build the package
  131. make V=99 package/shadowsocks-libev/openwrt/compile
  132. ```
  133. ### OS X
  134. For OS X , use [homebrew](http://brew.sh) to install or build.
  135. Install homebrew
  136. ```bash
  137. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  138. ```
  139. Install shadowsocks-libev
  140. ```bash
  141. brew install shadowsocks-libev
  142. ```
  143. ### Windows
  144. For Windows, use either MinGW (msys) or Cygwin to build.
  145. At the moment, only `ss-local` is supported to build against MinGW (msys).
  146. If you are using MinGW (msys), please download OpenSSL or PolarSSL source tarball
  147. to the home directory of msys, and build it like this (may take a few minutes):
  148. * OpenSSL
  149. ```bash
  150. tar zxf openssl-1.0.1e.tar.gz
  151. cd openssl-1.0.1e
  152. ./config --prefix="$HOME/prebuilt" --openssldir="$HOME/prebuilt/openssl"
  153. make && make install
  154. ```
  155. * PolarSSL
  156. ```bash
  157. tar zxf polarssl-1.3.2-gpl.tgz
  158. cd polarssl-1.3.2
  159. make lib WINDOWS=1
  160. make install DESTDIR="$HOME/prebuilt"
  161. ```
  162. Then, build the binary using the commands below, and all `.exe` files
  163. will be built at `$HOME/ss/bin`:
  164. * OpenSSL
  165. ```bash
  166. ./configure --prefix="$HOME/ss" --with-openssl="$HOME/prebuilt"
  167. make && make install
  168. ```
  169. * PolarSSL
  170. ```bash
  171. ./configure --prefix="$HOME/ss" --with-crypto-library=polarssl --with-polarssl=$HOME/prebuilt
  172. make && make install
  173. ```
  174. Usage
  175. -----
  176. ```
  177. ss-[local|redir|server|tunnel]
  178. -s <server_host> host name or ip address of your remote server
  179. -p <server_port> port number of your remote server
  180. -l <local_port> port number of your local server
  181. -k <password> password of your remote server
  182. [-m <encrypt_method>] encrypt method: table, rc4, rc4-md5,
  183. aes-128-cfb, aes-192-cfb, aes-256-cfb,
  184. bf-cfb, camellia-128-cfb, camellia-192-cfb,
  185. camellia-256-cfb, cast5-cfb, des-cfb, idea-cfb,
  186. rc2-cfb, seed-cfb, salsa20 and chacha20
  187. [-f <pid_file>] the file path to store pid
  188. [-t <timeout>] socket timeout in seconds
  189. [-c <config_file>] the path to config file
  190. [-i <interface>] network interface to bind,
  191. not available in redir mode
  192. [-b <local_address>] local address to bind,
  193. not available in server mode
  194. [-u] enable udprelay mode,
  195. TPROXY is required in redir mode
  196. [-U] enable UDP relay and disable TCP relay,
  197. not available in local mode
  198. [-A] enable onetime authentication
  199. [-L <addr>:<port>] specify destination server address and port
  200. for local port forwarding,
  201. only available in tunnel mode
  202. [-d <addr>] setup name servers for internal DNS resolver,
  203. only available in server mode
  204. [--fast-open] enable TCP fast open,
  205. only available in local and server mode,
  206. with Linux kernel > 3.7.0
  207. [--acl <acl_file>] config file of ACL (Access Control List)
  208. only available in local and server mode
  209. [--manager-address <addr>] UNIX domain socket address
  210. only available in server and manager mode
  211. [--executable <path>] path to the executable of ss-server
  212. only available in manager mode
  213. [-v] verbose mode
  214. notes:
  215. ss-redir provides a transparent proxy function and only works on the
  216. Linux platform with iptables.
  217. ```
  218. ## Advanced usage
  219. The latest shadowsocks-libev has provided a *redir* mode. You can configure your linux based box or router to proxy all tcp traffic transparently.
  220. # Create new chain
  221. root@Wrt:~# iptables -t nat -N SHADOWSOCKS
  222. root@Wrt:~# iptables -t mangle -N SHADOWSOCKS
  223. # Ignore your shadowsocks server's addresses
  224. # It's very IMPORTANT, just be careful.
  225. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN
  226. # Ignore LANs and any other addresses you'd like to bypass the proxy
  227. # See Wikipedia and RFC5735 for full list of reserved networks.
  228. # See ashi009/bestroutetb for a highly optimized CHN route list.
  229. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
  230. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
  231. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
  232. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
  233. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
  234. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
  235. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
  236. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
  237. # Anything else should be redirected to shadowsocks's local port
  238. root@Wrt:~# iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345
  239. # Add any UDP rules
  240. root@Wrt:~# ip rule add fwmark 0x01/0x01 table 100
  241. root@Wrt:~# ip route add local 0.0.0.0/0 dev lo table 100
  242. root@Wrt:~# iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01
  243. # Apply the rules
  244. root@Wrt:~# iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
  245. root@Wrt:~# iptables -t mangle -A PREROUTING -j SHADOWSOCKS
  246. # Start the shadowsocks-redir
  247. root@Wrt:~# ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid
  248. ## Security Tips
  249. Although shadowsocks-libev can handle thousands of concurrent connections nicely, we still recommend to
  250. set up your server's firewall rules to limit connections from each user.
  251. # Up to 32 connections are enough for normal usages
  252. iptables -A INPUT -p tcp --syn --dport ${SHADOWSOCKS_PORT} -m connlimit --connlimit-above 32 -j REJECT --reject-with tcp-reset
  253. ## License
  254. Copyright (C) 2014 Max Lv <max.c.lv@gmail.com>
  255. This program is free software: you can redistribute it and/or modify
  256. it under the terms of the GNU General Public License as published by
  257. the Free Software Foundation, either version 3 of the License, or
  258. (at your option) any later version.
  259. This program is distributed in the hope that it will be useful,
  260. but WITHOUT ANY WARRANTY; without even the implied warranty of
  261. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  262. GNU General Public License for more details.
  263. You should have received a copy of the GNU General Public License
  264. along with this program. If not, see <http://www.gnu.org/licenses/>.