Shadowsocks (简体中文)

From ArchWiki

Shadowsocks 是一个轻量级 SOCKS5 代理。

安装

安装 shadowsocks-libev (C) 或 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]

通过命令行

使用 ss-local 命令启动客户端。 要使用 /etc/shadowsocks/config.json 配置文件启动客户端:

$ ss-local -c /etc/shadowsocks/config.json

或者,也可以直接在命令中指定配置:

$ ss-local -s 服务器地址 -p 服务器端口 -l 本地端口 -k 密码 -m 加密方式

要输出详细日志,添加 -v 命令:

$ ss-local -s 服务器地址 -p 服务器端口 -l 本地端口 -k 密码 -m 加密方式 -v

守护进程管理

Shadowsocks 客户端可以通过 systemctl 使用 shadowsocks@.serviceshadowsocks-libev@.service 实例控制。

要使用配置文件 /etc/shadowsocks/config.json启动启用 shadowsocks-libev-server@config.serviceshadowsocks-server@config.service.

您可能也会对在网络启动后[损坏的链接:无效的章节]运行 shadowsocks@shadowsocks-libev@ 实例感兴趣。

提示: 以 root 运行 journalctl -u shadowsocks@foo 来查看日志。

图形界面客户端

安装 shadowsocks-qt5

为其它程序配置代理

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

服务端

守护进程管理

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

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

多端口运行

将配置文件中的 "server_port""password" 字段删去,添加 "port_password" 字段配置端口及其密码。

参见 Configure Multiple Users 中的示例。

性能优化

加密

参见 AEAD Ciphers[失效链接 2022-09-23 ⓘ].

安装 python-m2crypto 包将会使加密更快一点。

要使用 Salsa20ChaCha20 加密,安装 libsodium 包。

参阅