Shadowsocks (简体中文) - ArchWiki

Jump to content

# Shadowsocks (简体中文)

From ArchWiki

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