1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
| Shadowsocks是一个轻量级socks5代理,最初用 Python 编写。
Contents 1 安装 2 配置 2.1 客户端 2.1.1 命令行 2.1.2 以守护进程形式运行客户端 2.1.3 图形界面客户端 2.1.4 配置代理 2.1.4.1 浏览器配置 2.2 服务端 2.2.1 以命令行启动进程 2.2.2 以守护进程形式运行 2.2.3 多端口运行 2.2.4 加密方法 2.2.5 性能优化 3 参阅 安装 可安装 shadowsocks-libev 或者 shadowsocks。
配置 shadowsocks以json为配置文件格式,以下是安装包中的样例:
/etc/shadowsocks/config.json { "server":"remote-shadowsocks-server-ip-addr", "server_port":443, "local_address":"127.0.0.1", "local_port":1080, "password":"your-passwd", "timeout":300, "method":"chacha20-ietf", "fast_open":false, "workers":1 } 提示: shadowsocks: 若需同时指定多个服务端ip,使用如下例的语法"server":["1.1.1.1","2.2.2.2"], 提示: 要找出在你的机器上运行最快的方式,可以运行这个脚本 Name Explanation server 服务端监听地址(IPv4或IPv6) server_port 服务端端口,一般为443 local_address 本地监听地址,缺省为127.0.0.1 可用-b参数设置 local_port 本地监听端口,一般为1080 password 用以加密的密匙 timeout 超时时间(秒) method 参阅 加密 mode 设置为tcp或udp或tcp_and_udp fast_open 是否启用TCP-Fast-Open wokers worker数量,如果不理解含义请不要改
客户端 命令行 运行 ss-local 启动客户端;若需指定配置文件的位置:
# ss-local -c /etc/shadowsocks/config.json 注意: 有用户报告无法成功在运行时加载config.json ,或可尝试手动运行:
# ss-local -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法 配合nohup和&可以使之后台运行,关闭终端也不影响:
#nohup ss-local -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法 & 增加 -v 参数获取详细log信息
以守护进程形式运行客户端 注意: shadowsocks和shadowsocks-libev的systemd 系统单元使用相同的配置文件路径 (/etc/shadowsocks) Shadowsocks的systemd服务可在/etc/shadowsocks/里调用不同的conf-file.json(以conf-file为区分标志),例: 在/etc/shadowsocks/中创建了foo.json配置文件,那么执行以下语句就可以调用该配置:
# systemctl start shadowsocks@foo 若需开机自启动:
# systemctl enable shadowsocks@foo 提示: 可用journalctl -u shadowsocks@foo来查询日志; 图形界面客户端 安装 shadowsocks-qt5。
配置代理 shadowsocks客户端启动后,其他程序并不会直接应用socks5连接,可使用以下方法对其进行配置。
全局代理 使用Iptables (简体中文)等工具,桌面环境用户可使用桌面设置中网络设置里的代理功能。
注意: 使用全局代理会使所有的连接通过shadowsocks服务器中转,一般不建议使用全局代理。另外,gnome桌面的代理设置无法正常使用。 程序设置自身代理 不少程序都能在其设置中添加代理,只需要在其设置中找到网络相关配置,添加socks v5代理,参照本地配置文件中的ip和port填写即可(例如浏览器的配置可参考下文#浏览器配置)。
使用工具进行临时代理 例如proxychains-ng(参看Proxy settings#Using a SOCKS proxy)和redsocks-gitAUR。 例如使用proxychanis代理的例子(假设你已经在/etc/proxychains.conf中配置好socks5):
proxychains firefox 转换为http代理 直接走socks代理有时未必是用户的期望,可使用privoxy等软件转化socks代理为http代理。可使用privoxy和squid等工具。 以Privoxy为例,编辑privoxy配置文件,添加socks5转发(不要漏下1080后面的点):
forward-socks5 / 127.0.0.1:1080 . 默认监听的是本机的8188端口,即localhost:8188,可更改为监听其他端口,如
listen-address 127.0.0.1:8010 提示: 如果希望网络上其他主机也能使用该privoxy配置,可以更改127.0.0.1为0.0.0.0或直接删除127.0.0.1。 使用systemd启动或重启privoxy.service服务,就可以使用了。假设转化后的http代理为127.0.0.1:8010,则在终端中启动(以启动chromium为例):
$ chromium %U --proxy-server=127.0.0.1:8010 浏览器配置 提示: 浏览器直接使用SOCKS代理时,你可能需要使用privoxy等辅助程序,因为一般浏览器会泄漏你的DNS请求,从而减少你的匿名,参看前文#配置代理中转化为http代理一节。 firefox 使用扩展如foxyproxy或switchyomega等。 直接在首选项-常规-网络代理中设置“手动代理配置”或者“自动代理配置的URL(PAC)”。 使用“手动代理配置”,在”socks主机“栏填上shadowsocks设置的本地ip(默认127.0.0.1)和端口(默认1080),点选”SOCKS v5“,然后保存即可。 使用“自动代理配置的URL(PAC)”,可使用genpac工具生成,或者使用现成的pac如gfwlist to pac,将该页面url填入并保存即可。
Chrome/Chromium 使用插件如SwitchyOmega(使用方法参看SwitchyOmega-wiki
服务端 提示: 普通用户无需配置服务端。 以命令行启动进程 可使用以下方法运行:
注意: 如果安装的是shadowsocks-libev则使用ss-server替代ssserver。 在配置文件目录内运行 在服务器上cd到config.json所在目录: 运行ssserver 如果想在后台一直运行,可改执行:nohup ssserver > log &;
手动指定配置参数 # ssserver -s 监听地址(通常为0.0.0.0) -p 监听端口 -k 密码 -m 加密方法 -t 超时时间(秒) 配合nohup和&可使之后台运行,关闭终端也不影响,例如:
# nohup ssserver -s 0.0.0.0 -p 443 -k a29rw4pacnj2ahmf -m aes-192-cfb -t 600 & 以守护进程形式运行 首先在/etc/shadowsocks/foo.json(foo是文件名,可随意更改)配置文件内填写好相关参数,然后可以使用以下方法使其以守护进程形式在后台运行:
使用-d参数 # ssserver -c /etc/shadowsocks/foo.json -d start #启动 # ssserver -c /etc/shadowsocks/foo.json -d stop #停止 # ssserver -c /etc/shadowsocks/foo.json -d restart #重启 使用systemd # systemctl start shadowsocks-server@foo #立即启动 # systemctl enable shadowsocks-server@foo #开机自启动 注意: 如果使用shadowsocks-libev,则使用shadowsocks-libev-server替代shadowsocks-server。 提示: 如果使用的服务端端口号小于1024,需要修改usr/lib/systemd/system/shadowsocks-server@.service使得user=root,之后使用systemctl daemon-reload重新载入守护进程配置,即可开启监听。当然也可以用root权限运行shadowsocks,来开启端口号小于1024的监听。 多端口运行 注意: shadowsocks, shadowsocks-libev和shadowsocks-go-serverAUR等均支持多端口,可到Configure-Multiple-Users查看哪些版本支持多端口。 将配置文件中的server_port和password配置删去,添加上"port_password"字段配置端口及其密码,示例:
/etc/shadowsocks/foo.json { "server": yourip, "_comment": { "25":"me", "9999": "girl", "520": "godness" }, "port_password": { "25": "kexuedeshangwang", "520": "loveyoumygodness",, "9999": "forever", }, "local_address": "127.0.0.1", "local_port": 1080, "timeout": 300, "method": "aes-256-cfb", "fast_open": false, "workers": 1, "prefer_ipv6": false } 提示: 有反映多端口配置后使用systemd进行守护进程运行会失败,该情况下可使用上文-d参数的方法。 加密方法 注意: 默认加密方法table速度很快,但很不安全。请不要使用rc4,它不安全。推荐使用AEAD加密 提示: 安装M2Crypto可略微提升加密速度,对于Python2来说,安装python2-m2crypto即可。 AEAD加密:
Name Alias Key Size Salt Size Nonce Size Tag Size AEAD_CHACHA20_POLY1305 chacha20-ietf-poly1305 32 32 12 16 AEAD_AES_256_GCM aes-256-gcm 32 32 12 16 AEAD_AES_192_GCM aes-192-gcm 24 24 12 16 AEAD_AES_128_GCM aes-128-gcm 16 16 12 16 可选的加密方式:
Name Key Size IV Length aes-128-ctr 16 16 aes-192-ctr 24 16 aes-256-ctr 32 16 aes-128-cfb 16 16 aes-192-cfb 24 16 aes-256-cfb 32 16 camellia-128-cfb 16 16 camellia-192-cfb 24 16 camellia-256-cfb 32 16 chacha20-ietf 32 12 不推荐加密方式:
Name Key Size IV Length bf-cfb 16 8 chacha20 32 8 salsa20 32 8 rc4-md5 16 16 注意: 官方软件源的shadowsocks不支持全部加密方式,官方软件源Chacha20以及salsa20的支持可以安装libsodium(For salsa20 and chacha20 support) 。若对非主流加密方式有需求,可尝试aur中的shadowsocks-nodejsAUR[broken link: archived in aur-mirror] 加密类别列表参见[1]。 并且可以使用[2]脚本来比较和找出在你机器上运行最快的加密方法。
性能优化 多用户使用的情况下,建议使用#多端口运行,尽量避免一个端口有过多用户连接。 使用常用端口如25、443、21等等,GFW为减轻压力,对常用端口检查相对较少。 使用python-gevent提升python的shadowsocks运行的速度。 使用python-pip安装M2Crypto可略微提升加密速度;使用较弱的加密方式CR4-MD5提升加密速度(但是会降低安全程度,请根据实际使用情况考虑加密强度的选择)。 优化内核参数,参看Optimizing-Shadowsocks进行设置。 开启fast open降低延迟 # echo 'net.ipv4.tcp_fastopen = 3' >> /etc/sysctl.d/tcp-fastopen.conf 开启TCPBBR拥塞控制算法 注意: 需要内核4.9及以上版本,可使用uname -r查看。 警告: 该算法增加发包率从而提升流量消耗;可能消耗更多的系统资源;如果使用openvz的服务器,不建议使用bbr,据反映容易导致判定为滥用而被服务商禁用。 modprobe tcp_bbr echo "tcp_bbr" > /etc/modules-load.d/bbr.conf echo ' net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr ' > /etc/sysctl.d/bbr.conf sysctl -p 检查:
sysctl net.ipv4.tcp_available_congestion_control sysctl net.ipv4.tcp_congestion_control 如果结果都有 bbr字样, 则证明你的内核已开启 bbr。 执行lsmod ,看到有tcp_bbr模块即说明 bbr 已启动。
|