Difference between revisions of "Shadowsocks (简体中文)"

From ArchWiki
Jump to: navigation, search
(配置: update multi-instance usage for shadowsocks-libev)
(命令行)
(47 intermediate revisions by 11 users not shown)
Line 3: Line 3:
 
[[en:Shadowsocks]]
 
[[en:Shadowsocks]]
 
[[ja:Shadowsocks]]
 
[[ja:Shadowsocks]]
[https://github.com/clowwindy/shadowsocks/ Shadowsocks]是一个轻量级[[Wikipedia:SOCKS_(protocol)#SOCKS5|socks5]]代理,以python写成;
+
{{提示|由于shadowsocks多为中文用户使用,该中文页面大量内容领先于英文页面。}}
 +
[https://github.com/clowwindy/shadowsocks/ Shadowsocks]是一个轻量级[[Wikipedia:SOCKS_(protocol)#SOCKS5|socks5]]代理,最初用 Python 编写。
 
==安装==
 
==安装==
可自[community]中安装已打包好的shadowsocks。
+
[[install|安装]] {{pkg|shadowsocks-libev}} 或者 {{pkg|shadowsocks}}
{| class="wikitable"
 
|-
 
| {{pkg|shadowsocks-libev}}{{pkg|shadowsocks}}
 
| shadowsocks基本包
 
|-
 
| {{pkg|libsodium}}<br>{{pkg|python2-numpy}}<br>{{pkg|python2-salsa20}}
 
| [https://github.com/shadowsocks/shadowsocks/wiki/Encryption Salsa20和Chacha20]支持;
 
|}
 
 
 
 
==配置==
 
==配置==
shadowsocks以[[Wikipedia:JSON|json]]为配置文件格式,以下是一个样例:
+
shadowsocks以[[Wikipedia:JSON|json]]为配置文件格式,以下是安装包中的样例:
 
{{hc|/etc/shadowsocks/config.json|{
 
{{hc|/etc/shadowsocks/config.json|{
 
"server":"remote-shadowsocks-server-ip-addr",
 
"server":"remote-shadowsocks-server-ip-addr",
Line 24: Line 16:
 
"password":"your-passwd",
 
"password":"your-passwd",
 
"timeout":300,
 
"timeout":300,
"method":"aes-256-cfb",
+
"method":"chacha20-ietf",
 
"fast_open":false,
 
"fast_open":false,
 
"workers":1
 
"workers":1
 
}
 
}
 
}}
 
}}
{{提示|shadowsocks: 若需同时指定多个服务端ip,可参考{{ic|"server":["1.1.1.1","2.2.2.2"],}}}}
+
{{提示|shadowsocks: 若需同时指定多个服务端ip,使用如下例的语法{{ic|"server":["1.1.1.1","2.2.2.2"],}}}}
{{提示|shadowsocks-libev: 若需同时指定多个服务端ip或利用多处理器核心提高sockets处理性能,可启用多个shadowsocks-libev实例并绑定同一个端口,因为其支持SO_REUSEPORT(内核级CPU负载平衡)}}
+
{{提示|要找出在你的机器上运行最快的方式,可以运行[https://github.com/shadowsocks/shadowsocks-libev/blob/0437e05aa8ec7f36f1eeb8c366dfd2b2b3b0288b/scripts/iperf.sh 这个脚本]}}
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Name !! Explanation
 
|-
 
|-
 
|server
 
|server
Line 40: Line 33:
 
|-
 
|-
 
|local_address
 
|local_address
|本地监听地址,缺省为{{ic|127.0.0.1}}
+
|本地监听地址,缺省为{{ic|127.0.0.1}} 可用-b参数设置
 
|-
 
|-
 
|local_port
 
|local_port
Line 52: Line 45:
 
|-
 
|-
 
|method
 
|method
|加密方法,默认的{{ic|table}}是一种不安全的加密,此处首推{{ic|aes-256-cfb}}
+
|参阅 [https://github.com/shadowsocks/shadowsocks/wiki/Encryption 加密]
 
|-
 
|-
 
|fast_open
 
|fast_open
Line 61: Line 54:
 
|}
 
|}
  
===客户端===
+
 
在{{ic|config.json}}所在目录下运行{{ic|sslocal}}即可;若需指定配置文件的位置:
+
=== 客户端 ===
{{bc|# sslocal -c /etc/shadowsocks/config.json}}
+
==== 命令行 ====
 +
运行 {{ic|ss-local}} 启动客户端;若需指定配置文件的位置:
 +
{{bc|# ss-local -c /etc/shadowsocks/config.json}}
 
{{注意|有用户报告无法成功在运行时加载{{ic|config.json}}}},或可尝试手动运行:
 
{{注意|有用户报告无法成功在运行时加载{{ic|config.json}}}},或可尝试手动运行:
{{bc|# sslocal -s ''服务器地址'' -p ''服务器端口'' -l ''本地端端口'' -k ''密码'' -m ''加密方法''}}
+
{{bc|# ss-local -s ''服务器地址'' -p ''服务器端口'' -l ''本地端端口'' -k ''密码'' -m ''加密方法''}}
 
配合nohup和&可以使之后台运行,关闭终端也不影响:
 
配合nohup和&可以使之后台运行,关闭终端也不影响:
{{bc|#nohup sslocal -s ''服务器地址'' -p ''服务器端口'' -l ''本地端端口'' -k ''密码'' -m ''加密方法'' &}}
+
{{bc|#nohup ss-local -s ''服务器地址'' -p ''服务器端口'' -l ''本地端端口'' -k ''密码'' -m ''加密方法'' &}}
 +
增加 {{ic|-v}} 参数获取详细log信息
 
----
 
----
==== GUI client ====
 
安装 {{AUR|shadowsocks-qt5}}。
 
  
{{提示|也可以使用[https://github.com/shadowsocks/shadowsocks-gui shadowsocks-gui@gitHub],如果不希望自己编译的话到[http://sourceforge.net/projects/shadowsocksgui/files/dist/ shadowsocks-gui@sourceforge]直接下载。}}
+
====以守护进程形式运行客户端====
----
+
{{注意|shadowsocks和shadowsocks-libev的systemd 系统单元使用相同的配置文件路径 ({{ic|/etc/shadowsocks}}}}
 
 
===服务端===
 
{{提示|普通用户无需配置服务端;}}
 
在服务器上{{ic|cd}}到{{ic|config.json}}所在目录:
 
# 运行{{ic|ssserver}}
 
# 如果想在后台一直运行,可改执行:{{ic|nohup ssserver > log &}};
 
 
 
===以守护进程形式运行客户端===
 
 
Shadowsocks的[[systemd_(简体中文)|systemd]]服务可在{{ic|/etc/shadowsocks/}}里调用不同的{{ic|''conf-file''.json}}(以{{ic|''conf-file''}}为区分标志),例:
 
Shadowsocks的[[systemd_(简体中文)|systemd]]服务可在{{ic|/etc/shadowsocks/}}里调用不同的{{ic|''conf-file''.json}}(以{{ic|''conf-file''}}为区分标志),例:
 
在{{ic|/etc/shadowsocks/}}中创建了{{ic|foo.json}}配置文件,那么执行以下语句就可以调用该配置:
 
在{{ic|/etc/shadowsocks/}}中创建了{{ic|foo.json}}配置文件,那么执行以下语句就可以调用该配置:
Line 89: Line 75:
 
{{提示|可用{{ic|journalctl -u shadowsocks@foo}}来查询日志;}}
 
{{提示|可用{{ic|journalctl -u shadowsocks@foo}}来查询日志;}}
  
===以守护进程形式运行服务端===
+
====图形界面客户端====
以上只是启动了客户端的守护进程,如果架设的是服务器,则需要:
+
安装 {{Pkg|shadowsocks-qt5}}
# systemctl start shadowsocks-server@foo
+
 
# systemctl enable shadowsocks-server@foo
+
====配置代理====
{{提示|如果使用的服务端端口号小于1024,需要修改{{ic|usr/lib/systemd/system/shadowsocks-server@.service}}使得{{ic|1=user=root}},之后使用{{ic|systemctl daemon-reload}}重新载入守护进程配置,即可开启监听。}}
+
shadowsocks客户端启动后,其他程序并不会直接应用socks5连接,可使用以下方法对其进行配置。
  
===加密===
+
* 全局代理
{{注意|默认加密方法{{ic|table}}速度很快,但很不安全。如果CPU支持AES硬件加速的话,推荐使用{{ic|aes-128-ctr}}。如果是旧CPU(不支持AES硬件加速),ChaCha20是占用最小速度最快的一种方式。请不要使用{{ic|rc4}},它不安全。}}
+
使用[[Iptables (简体中文)]]等工具,桌面环境用户可使用桌面设置中网络设置里的代理功能。
{{提示|安装{{ic|M2Crypto}}可略微提升加密速度,对于Python2来说,安装{{pkg|python2-m2crypto}}即可。}}
+
{{注意|使用全局代理会使所有的连接通过shadowsocks服务器中转,一般不建议使用全局代理。另外,gnome桌面的代理设置无法正常使用。}}
可选的加密方式:
+
 
* aes-256-cfb(Shadowsocks的作者推荐的加密算法,移动平台可能开销稍高)
+
* 程序设置自身代理
* aes-128-cfb
+
不少程序都能在其设置中添加代理,只需要在其设置中找到网络相关配置,添加socks v5代理,参照本地配置文件中的ip和port填写即可(例如浏览器的配置可参考下文[[#浏览器配置]])。
* aes-192-cfb
+
 
* aes-256-ofb
+
* 使用工具进行临时代理
* aes-128-ofb
+
例如{{Pkg|proxychains-ng}}(参看[[Proxy settings#Using a SOCKS proxy]])和{{AUR|redsocks-git}}
* aes-192-ofb
+
例如使用[[proxychanis]]代理的例子(假设你已经在{{ic|/etc/proxychains.conf}}中配置好socks5):
* aes-128-ctr
+
  proxychains firefox
* aes-192-ctr
+
 
* aes-256-ctr
+
* 转换为http代理
* aes-128-cfb8
+
直接走socks代理有时未必是用户的期望,可使用privoxy等软件转化socks代理为http代理。可使用{{Pkg|privoxy}}{{Pkg|squid}}等工具。
* aes-192-cfb8
+
以[[Privoxy]]为例,编辑privoxy配置文件,添加socks5转发(不要漏下1080后面的点):
* aes-256-cfb8
+
  forward-socks5 / 127.0.0.1:1080 .
* aes-128-cfb1
+
默认监听的是本机的8188端口,即{{ic|localhost:8188}},可更改为监听其他端口,如
* aes-192-cfb1
+
  listen-address  127.0.0.1:8010
* aes-256-cfb1
+
{{提示|如果希望网络上其他主机也能使用该privoxy配置,可以更改127.0.0.1为0.0.0.0或直接删除127.0.0.1。}}
* bf-cfb
+
 
* camellia-128-cfb
+
使用[[systemd]]启动或重启{{ic|privoxy.service}}服务,就可以使用了。假设转化后的http代理为127.0.0.1:8010,则在终端中启动(以启动chromium为例):
* camellia-192-cfb
+
  $ chromium %U --proxy-server=127.0.0.1:8010
* camellia-256-cfb
+
 
* cast5-cfb
+
=====浏览器配置=====
* chacha20
+
{{提示|浏览器直接使用[[Wikipedia:SOCKS|SOCKS]]代理时,你可能需要使用[[privoxy]]等辅助程序,因为一般浏览器会泄漏你的DNS请求,从而减少你的匿名,参看前文[[#配置代理]]中转化为http代理一节。}}
* idea-cfb
+
 
* rc2-cfb
+
*firefox
* rc4-md5
+
**使用扩展如[https://getfoxyproxy.org/ foxyproxy]或[https://github.com/FelisCatus/SwitchyOmega switchyomega]等。
* salsa20
+
**直接在首选项-常规-网络代理中设置“手动代理配置”或者“自动代理配置的URL(PAC)”。
* seed-cfb
+
使用“手动代理配置”,在”socks主机“栏填上shadowsocks设置的本地ip(默认127.0.0.1)和端口(默认1080),点选”SOCKS v5“,然后保存即可。
{{注意|官方软件源的{{pkg|shadowsocks}}不支持全部加密方式,官方软件源Chacha20以及salsa20的支持可以安装libsodium(For salsa20 and chacha20 support) 。若对非主流加密方式有需求,可尝试[[Arch User Repository (简体中文)|aur]]中的{{aur|shadowsocks-nodejs}}{{Broken package link|{{aur-mirror|shadowsocks-nodejs}}}}}},
+
使用“自动代理配置的URL(PAC)”,可使用[https://github.com/JinnLynn/genpac genpac]工具生成,或者使用现成的pac如[https://github.com/search?utf8=%E2%9C%93&q=gfwlist+pac&type= gfwlist to pac],将该页面url填入并保存即可。
 +
 
 +
* Chrome/Chromium
 +
使用插件如[https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif SwitchyOmega](使用方法参看[https://github.com/FelisCatus/SwitchyOmega/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 SwitchyOmega-wiki]
 +
 
 +
===服务端===
 +
{{提示|普通用户无需配置服务端。}}
 +
==== 以命令行启动进程 ====
 +
可使用以下方法运行:
 +
{{注意|如果安装的是{{Pkg|shadowsocks-libev}}则使用{{ic|ss-server}}替代{{ic|ssserver}}。}}
 +
 
 +
* 在配置文件目录内运行
 +
# 在服务器上{{ic|cd}}到{{ic|config.json}}所在目录:
 +
# 运行{{ic|ssserver}}
 +
如果想在后台一直运行,可改执行:{{ic|nohup ssserver > log &}}
  
===Firefox===
+
* 手动指定配置参数
以下是本地监听端口{{ic|127.0.0.1:1080}}配置完毕后,[[Firefox (简体中文)|Firefox]]使用代理服务器的方法示例。
+
{{bc|# 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 &
  
安装代理插件[https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/?src=userprofile foxyproxy]:打开浏览器右上角菜单,进入扩展管理,在搜索框中输入foxyproxy,安装foxyproxy代理插件,安装完毕后重启浏览器。
+
==== 以守护进程形式运行 ====
 +
首先在{{ic|/etc/shadowsocks/foo.json}}(foo是文件名,可随意更改)配置文件内填写好相关参数,然后可以使用以下方法使其以守护进程形式在后台运行:
  
设置代理:找到foxyproxy插件,单击进入foxyproxy的设置界面,在代理服务器目录左侧选择添加代理服务器,为新加代理起一个名字,然后在代理服务器设置里选择手动设置代理服务器,ip地址栏填写127.0.0.1,勾选SOCKS代理服务器,点选SOCKS V5,然后确定。
+
* 使用{{ic|-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  #重启
  
开启快速添加(可选):在foxyproxy设置中,选择快速添加,勾选启用,在进入某些需要代理的网站时可以按下Alt+f2将网址添加到设定的代理中(!此功能需要foxyproxy标准版)。
+
* 使用systemd
  
使用代理:在foxyproxy上鼠标右键点击,指针移动到添加的代理上,就可以选择使用此代理服务器。也可以根据个人需求给某些特定域名添加到代理列表,使指定域名使用相应的代理设置。
+
# systemctl start shadowsocks-server@foo  #立即启动
 +
# systemctl enable shadowsocks-server@foo  #开机自启动
 +
{{注意|如果使用{{Pkg|shadowsocks-libev}},则使用{{ic|shadowsocks-libev-server}}替代{{ic|shadowsocks-server}}。}}
 +
{{提示|如果使用的服务端端口号小于1024,需要修改{{ic|usr/lib/systemd/system/shadowsocks-server@.service}}使得{{ic|1=user=root}},之后使用{{ic|systemctl daemon-reload}}重新载入守护进程配置,即可开启监听。当然也可以用'''root'''权限运行shadowsocks,来开启端口号小于1024的监听。}}
  
更多有关foxyproxy内容,请到[https://getfoxyproxy.org foxyproxy官网]查看。
+
==== 多端口运行 ====
 +
{{注意|{{Pkg|shadowsocks}}, {{Pkg|shadowsocks-libev}}和{{AUR|shadowsocks-go-server}}等均支持多端口,可到[https://github.com/shadowsocks/shadowsocks/wiki/Configure-Multiple-Users Configure-Multiple-Users]查看哪些版本支持多端口。}}
 +
将配置文件中的{{ic|server_port}}和{{ic|password}}配置删去,添加上{{ic|"port_password"}}字段配置端口及其密码,示例:
 +
{{hc|/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
 +
}
 +
}}
  
===Chrome/Chromium===
+
{{提示|有反映多端口配置后使用systemd进行守护进程运行会失败,该情况下可使用上文{{ic|-d}}参数的方法。}}
以下是本地监听端口{{ic|127.0.0.1:1080}}配置完毕后,[[Chromium (简体中文)|Chrome/Chromium]]使用代理服务器的方法示例。
 
  
方法一:
+
====加密方法====
  
请安装 [https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif  Proxy SwitchyOmega插件](SwitchySharp已停止开发),若商店打不开的话可以直接下载Github上面的[https://github.com/FelisCatus/SwitchyOmega/releases crx文件]可参考[https://github.com/FelisCatus/SwitchyOmega 该扩展提供的图解流程]。
+
{{注意|默认加密方法{{ic|table}}速度很快,但很不安全。请不要使用{{ic|rc4}},它不安全。推荐使用AEAD加密}}
 +
 
 +
{{提示|安装{{ic|M2Crypto}}可略微提升加密速度,对于Python2来说,安装{{pkg|python2-m2crypto}}即可。}}
 +
AEAD加密:
 +
{| border="1" align="center"
 +
!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
 +
|}
 +
可选的加密方式:
 +
{| border="1" align="center"
 +
!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
 +
|}
 +
不推荐加密方式:
 +
{| border="1" align="center"
 +
!Name
 +
!Key Size
 +
!IV Length
 +
|-
 +
|bf-cfb
 +
|16
 +
|8
 +
|-
 +
|chacha20
 +
|32
 +
|8
 +
|-
 +
|salsa20
 +
|32
 +
|8
 +
|-
 +
|rc4-md5
 +
|16
 +
|16
 +
|}
  
另外提供老版[https://chrome.google.com/webstore/detail/proxy-switchysharp/dpplabbmogkhghncfbfdeeokoefdjegm Proxy SwitchySharp扩展]因为它诞生早,经过了更多用户的考验,且基本功能完备。
+
{{注意|官方软件源的{{pkg|shadowsocks}}不支持全部加密方式,官方软件源Chacha20以及salsa20的支持可以安装libsodium(For salsa20 and chacha20 support) 。若对非主流加密方式有需求,可尝试[[Arch User Repository (简体中文)|aur]]中的{{aur|shadowsocks-nodejs}}{{Broken package link|{{aur-mirror|shadowsocks-nodejs}}}}}}
  
也可以选用其他代理扩展,设置方法类似。
+
加密类别列表参见[https://github.com/shadowsocks/shadowsocks/wiki/Encryption]。
 +
并且可以使用[https://github.com/shadowsocks/shadowsocks-libev/blob/0437e05aa8ec7f36f1eeb8c366dfd2b2b3b0288b/scripts/iperf.sh]脚本来比较和找出在你机器上运行最快的加密方法。
  
方法二:
+
====性能优化====
 +
* 多用户使用的情况下,建议使用[[#多端口运行]],尽量避免一个端口有过多用户连接。
 +
* 使用[https://www.google.com/search?newwindow=1&q=%E5%B8%B8%E7%94%A8%E7%AB%AF%E5%8F%A3%E5%8F%B7&oq=%E5%B8%B8%E7%94%A8%E7%AB%AF%E5%8F%A3%E5%8F%B7&gs_l=psy-ab.3...30218.34357.0.34596.9.8.1.0.0.0.552.2392.4-4j1.5.0....0...1.1.64.psy-ab..4.3.1400...35i39k1j0i5i30k1.0.tTk_3WbYY-g 常用端口]如25、443、21等等,[https://zh.wikipedia.org/wiki/%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E GFW]为减轻压力,对常用端口检查相对较少。
 +
* 使用{{Pkg|python-gevent}}提升python的{{Pkg|shadowsocks}}运行的速度。
 +
* 使用{{Pkg|python-pip}}安装{{ic|M2Crypto}}可略微提升加密速度;使用较弱的加密方式CR4-MD5提升加密速度(但是会降低安全程度,请根据实际使用情况考虑加密强度的选择)。
 +
* 优化内核参数,参看[https://github.com/shadowsocks/shadowsocks/wiki/Optimizing-Shadowsocks Optimizing-Shadowsocks]进行设置。
 +
* 开启fast open降低延迟
 +
  # echo 'net.ipv4.tcp_fastopen = 3' >> /etc/sysctl.conf
  
1.直接指定Chromium走socks代理似乎不能远程dns解析,这未必是用户的期望,可使用privoxy等软件转化socks代理为http代理。
+
* 开启TCP[https://github.com/google/bbr BBR]拥塞控制算法
 +
{{注意|需要内核4.9及以上版本,可使用{{ic|uname -r}}查看。}}
 +
{{警告|该算法增加发包率从而提升流量消耗;可能消耗更多的系统资源;如果使用openvz的服务器,不建议使用bbr,据反映容易导致判定为滥用而被服务商禁用。}}
  
编辑privoxy配置文件(不要漏下1080后面的点)
+
  modprobe tcp_bbr
{{hc|/etc/privoxy/config|
+
  echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
forward-socks5   /               127.0.0.1:1080 .
+
   echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
listen-address  127.0.0.1:8118}}
+
  echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
 +
  sysctl -p
  
重启服务应用更改:
+
检查:
# /etc/init.d/privoxy restart
+
  sysctl net.ipv4.tcp_available_congestion_control
 +
  sysctl net.ipv4.tcp_congestion_control
  
2.假设转化后的http代理为127.0.0.1:8118,则在终端中启动:
+
如果结果都有 bbr字样, 则证明你的内核已开启 bbr。
$ chromium %U --proxy-server=127.0.0.1:8118
+
执行{{ic|lsmod | grep bbr}},看到有{{ic|tcp_bbr}}模块即说明 bbr 已启动。
  
 
==参阅==
 
==参阅==
Line 172: Line 323:
 
* [http://blog.robotshell.org/2014/about-shadowsocks/ About Shadowsocks]
 
* [http://blog.robotshell.org/2014/about-shadowsocks/ About Shadowsocks]
 
* [http://blog.pcwuyu.com/index.php/Arch/archlinux-shadowsocks-configuration.html shadowsocks最新配置]
 
* [http://blog.pcwuyu.com/index.php/Arch/archlinux-shadowsocks-configuration.html shadowsocks最新配置]
 +
* [https://www.zhihu.com/question/53559433 Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?]

Revision as of 16:20, 14 April 2018

提示: 由于shadowsocks多为中文用户使用,该中文页面大量内容领先于英文页面。

Shadowsocks是一个轻量级socks5代理,最初用 Python 编写。

安装

安装 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 参阅 加密
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代理。可使用privoxysquid等工具。 以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
    • 使用扩展如foxyproxyswitchyomega等。
    • 直接在首选项-常规-网络代理中设置“手动代理配置”或者“自动代理配置的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
  • 在配置文件目录内运行
  1. 在服务器上cdconfig.json所在目录:
  2. 运行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-libevshadowsocks-go-serverAUR等均支持多端口,可到Configure-Multiple-Users查看哪些版本支持多端口。

将配置文件中的server_portpassword配置删去,添加上"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.conf
  • 开启TCPBBR拥塞控制算法
注意: 需要内核4.9及以上版本,可使用uname -r查看。
警告: 该算法增加发包率从而提升流量消耗;可能消耗更多的系统资源;如果使用openvz的服务器,不建议使用bbr,据反映容易导致判定为滥用而被服务商禁用。
 modprobe tcp_bbr
 echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
 echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
 echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
 sysctl -p

检查:

 sysctl net.ipv4.tcp_available_congestion_control
 sysctl net.ipv4.tcp_congestion_control

如果结果都有 bbr字样, 则证明你的内核已开启 bbr。 执行lsmod ,看到有tcp_bbr模块即说明 bbr 已启动。

参阅