Shadowsocks (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Shadowsocks翻译,最后翻译时间:2017-9-26,点击这里可以查看翻译后英文页面的改动。

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 启动客户端;若需指定配置文件的位置:

# sslocal -c /etc/shadowsocks/config.json
注意: 有用户报告无法成功在运行时加载config.json
,或可尝试手动运行:
# sslocal -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法

配合nohup和&可以使之后台运行,关闭终端也不影响:

#nohup sslocal -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服务器中转,一般不建议使用全局代理。
  • 程序设置自身代理

不少程序都能在其设置中添加代理,只需要在其设置中找到网络相关配置,添加socks v5代理,参照本地配置文件中的ip和port填写即可(例如浏览器的配置可参考下文#浏览器配置)。

  • 使用工具进行临时代理

例如proxychains-ng(参看Proxy settings#Using a SOCKS proxy)和redsocks-gitAUR

  • 转换为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
    • 直接在首选项-常规-网络代理中设置“手动代理”或者“自动代理配置的URL(PAC)”(生成pac可使用genpac,或者使用现成的pac如gfwlist to pac)。
    • 使用扩展如foxyproxyswitchyomega等。
  • Chrome/Chromium

使用插件如switchomega(使用方法参看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 start  #停止
 # ssserver -c /etc/shadowsocks/foo.json -d start  #重启
  • 使用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的监听。

多端口运行

注意: shadowsocksshadowsocks-go-serverAUR等支持多端口,而shadowsocks-libev不支持,可到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,它不安全。
提示: 安装M2Crypto可略微提升加密速度,对于Python2来说,安装python2-m2crypto即可。

可选的加密方式:

  • aes-256-cfb(Shadowsocks经典、传统的加密算法,也是Shadowsocks的作者推荐过的加密算法,移动平台可能开销稍高)
  • aes-128-cfb
  • aes-192-cfb
  • aes-256-ofb
  • aes-128-ofb
  • aes-192-ofb
  • aes-128-ctr
  • aes-192-ctr
  • aes-256-ctr
  • aes-128-cfb8
  • aes-192-cfb8
  • aes-256-cfb8
  • aes-128-cfb1
  • aes-192-cfb1
  • aes-256-cfb1
  • aes-256-gcm
  • aes-128-gcm
  • aes-192-gcm
  • bf-cfb
  • camellia-128-cfb
  • camellia-192-cfb
  • camellia-256-cfb
  • cast5-cfb
  • chacha20
  • idea-cfb
  • rc2-cfb
  • rc4-md5
  • salsa20
  • seed-cfb
注意: 官方软件源的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 已启动。

参阅