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
新增話題