Shadowsocks (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Shadowsocks 是一个轻量级 SOCKS5 代理。

安装

安装 shadowsocks-libev (Libev) 或 shadowsocks (Python)。推荐使用 shadowsocks-libev

配置

Shadowsocks 以 JSON 为配置文件格式,以下是软件包中的样例:

/etc/shadowsocks/config.json
{
    "server":"my_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"chacha20-ietf-poly1305",
    "fast_open": false,
    "workers": 1,
    "prefer_ipv6": false
}
提示:
  • 若需同时指定多个服务端地址,使用如下语法 "server":["1.1.1.1", "2.2.2.2"].
  • 要找出在你的机器上运行最快的方式,可以运行这个脚本
名称 解释
server 服务端监听地址
server_port 服务端端口
local_address 本地监听地址
local_port 本地端口
password 用于加密的密码
timeout 超时时间(秒)
method 加密方式,默认为 chacha20-ietf-poly1305
mode 是否启用 TCP / UDP 转发,参阅 shadowsocks-libev(8)
fast_open 是否启用 TCP Fast Open
workers worker 数量

使用

客户端

警告: udns 用作 DNS 的存根解析程序。为了防止客户端应用程序(如浏览器)的 DNS 请求泄漏,必须使用其他应用程序。例如客户端上的 Privoxy 或完整的 DNS 解析程序。[1] [2]

守护进程管理

Start/enable shadowsocks-libev@配置文件.service.

如在 /etc/shadowsocks/ 中创建了 foo.json 配置文件,那么以下命令就可以使用该配置:

# systemctl start shadowsocks-libev@foo.service

为其它程序配置代理

Shadowsocks 客户端启动后,其它程序并不会直接使用,可使用以下方法对其进行配置。

全局代理

使用 iptables 等工具。

注意: 使用全局代理会使所有的连接通过 Shadowsocks 服务器中转,一般不建议使用全局代理。
程序设置

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

使用工具进行临时代理

例如 proxychains-ngtsocks. 参见 Proxy server#Using a SOCKS proxy.

转换为 HTTP 代理

直接使用 SOCKS5 代理有时未必是用户的期望,可使用 PrivoxySquid 等软件转换为 HTTP 代理。

以 Privoxy 为例,编辑配置文件,添加 SOCKS5 转发:

forward-socks5 / 127.0.0.1:1080 .

默认监听的是本机的 8118 端口,即 localhost:8118,可更改为监听其他端口:

listen-address  127.0.0.1:8010
提示: 如果希望网络上其他主机也能使用该 Privoxy 配置,可以更改 127.0.0.10.0.0.0 或直接删除 127.0.0.1.

重启 privoxy.service.

假设转换后的 HTTP 代理为 127.0.0.1:8118,则在终端中启动(以 Chromium 为例):

$ chromium --proxy-server="http://127.0.0.1:8118"
浏览器配置
提示: 浏览器直接使用 SOCKS 代理时,你可能需要使用 Privoxy 等辅助程序,因为一般浏览器会泄漏你的DNS请求,从而降低你的匿名性,参见 #转换为 HTTP 代理
  • Firefox
    • 使用如 SwitchyOmegaFoxyProxy 等扩展。
    • 直接在 首选项 > 常规 > 网络代理 中设置 手动代理配置 或者 自动代理配置的 URL(PAC)
      • 使用 手动代理配置:在 SOCKS 主机 栏填上 Shadowsocks 设置的本地地址和端口,点选 SOCKS v5,保存即可。
      • 使用 自动代理配置的 URL(PAC):可使用 genpac 工具生成。
  • Chrome/Chromium

服务端

加密方法

警告:
AEAD Cipher
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_128_GCM aes-128-gcm 16 16 12 16
注意: shadowsocks 不支持某些加密方式,chacha20 以及 salsa20 的支持需要 libsodium.

守护进程管理

shadowsocks-libev: start/enable shadowsocks-libev-server@配置文件.service

shadowsocks: start/enable shadowsocks-server@配置文件.service

多端口运行

注意: shadowsocks-libev 不支持多端口。

将配置文件中的 server_portpassword 配置删去,添加上 "port_password" 字段配置端口及其密码,示例:

/etc/shadowsocks/config.json
{
    "server": "0.0.0.0",
    "port_password": {
        "8381": "foobar1",
        "8382": "foobar2",
        "8383": "foobar3",
        "8384": "foobar4"
    },
    "timeout": 300,
    "method": "aes-256-cfb"
}

性能优化

参阅