Shadowsocks - Arch Linux 中文维基

跳转到内容

# Shadowsocks

来自 Arch Linux 中文维基

Shadowsocks 是一个轻量级 SOCKS5 代理。

## 安装

安装 shadowsocks-rust包。

### 其他可选项

- shadowsocks-goAUR—使用Go语言编写。
- shadowsocks-gitAUR—使用Python语言编写。已不再开发。
- shadowsocks-libev-staticAUR—使用C语言编写。已不再开发。
- go-shadowsocks2AUR—使用Go语言编写。已不再开发。

## 配置

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`（shadowsocks-libev）或`sslocal` （shadowsocks-rust）命令启动客户端。 要使用 `/etc/shadowsocks/config.json` 配置文件启动客户端:

    $ sslocal -c /etc/shadowsocks/config.json

或者，也可以直接在命令中指定配置：

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

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

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

#### 守护进程管理

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

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

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

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

#### 为其它程序配置代理

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 等插件。

### 服务端

#### 守护进程管理

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

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

#### 多端口运行

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

参见 Configure Multiple Users 中的示例。

### 性能优化

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

### 加密

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

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

要使用 Salsa20 或 ChaCha20 加密，安装 libsodium包 包。

## 参阅

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

分类：​

- 代理服务器
- 包含失效链接的页面

隐藏分类：​

- 包含损坏章节链接的页面

Shadowsocks
添加话题