# Shadowsocks (简体中文)

From ArchWiki
Jump to navigation Jump to search
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-ng 和 tsocks. 参见 Proxy server#Using a SOCKS proxy.

##### 转换为 HTTP 代理

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

以 Privoxy 为例，编辑配置文件，添加 SOCKS5 转发：

    forward-socks5 / 127.0.0.1:1080 .

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

    listen-address  127.0.0.1:8010

提示： 如果希望网络上其他主机也能使用该 Privoxy 配置，可以更改 `127.0.0.1` 为 `0.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
  - 使用如 SwitchyOmega 或 FoxyProxy 等扩展。
  - 直接在 首选项 > 常规 > 网络代理 中设置 手动代理配置 或者 自动代理配置的 URL（PAC）。
    - 使用 手动代理配置：在 SOCKS 主机 栏填上 Shadowsocks 设置的本地地址和端口，点选 SOCKS v5，保存即可。
    - 使用 自动代理配置的 URL（PAC）：可使用 genpac 工具生成。
- Chrome/Chromium
  - 使用 SwitchyOmega 等插件。

### 服务端

#### 加密方法

警告：

- Stream Cipher[失效链接 2021-05-17 ⓘ] 无法保证数据的完整性与安全性，在可能时应使用 AEAD Cipher[失效链接 2021-05-17 ⓘ].
- Stream Cipher 现在被认为安全性不足，请切换至 AEAD Cipher.

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_port` 和 `password` 配置删去，添加上 `"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"
    }

#### 性能优化

- 使用常用端口如 `443` 等。GFW 为减轻压力，对常用端口检查相对较少。
- 启用 TCP Fast Open.
- 启用 BBR.
- 安装 python-m2crypto 和 python-gevent 提升 shadowsocks 的速度。
- 优化内核参数，参见 Optimizing-Shadowsocks.

## 参阅

- shadowsocks-libev(8)
- Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势？

Category:

- Proxy servers (简体中文)

Hidden category:

- Pages with dead links