Shadowsocks

Shadowsocks

shadowsocks-rust

Quick Start (server)

/root/files/appdata/ssserver-rust/config/config.json

{
  "servers": [
    {
      "address": "0.0.0.0",
      "port": 21,
      "method": "chacha20-ietf-poly1305",
      "password": "freedom"
    },
    {
      "address": "0.0.0.0",
      "port": 23,
      "method": "2022-blake3-aes-128-gcm",
      "password": "Zm9yZXZlci0tZnJlZWRvbQ=="
    }
  ],
  "mode": "tcp_and_udp"
}

Start

docker run --name ssserver-rust \
  --restart always \
  -p 21:21/tcp -p 21:21/udp \
  -p 23:23/tcp -p 23:23/udp \
  -v /root/files/appdata/ssserver-rust/config:/etc/shadowsocks-rust \
  -dit ghcr.io/shadowsocks/ssserver-rust:latest

说明

  • 配置文件兼容 shadowsocks-libev 的 config.json 语法。
  • "servers" 字段可以配置监听多个不同配置的 shadowsocks server。
  • AEAD-2022 加密协议(SIP022): 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305。
    • 2022-blake3-aes-128-gcm 和 2022-blake3-aes-256-gcm 分别需要提供正好 16 或 32个字节的 key。2022-blake3-chacha20-poly1305 为 32 字节 key。
    • 配置文件里的 password 填写 key base64 编码字符串。可选的生成方式:
    • OpenSSL cli: openssl rand -base64 16
    • node.js: Buffer.from("forever--freedom").toString("base64")
    • AEAD-2022 是目前最安全的协议。没有任何已知的弱点。其引入了 timestamp,能够彻底防止重放攻击。但目前(2022-09)各种客户端和第三方工具对这种加密方式支持还不完善。

AEAD-2022 协议支持

参考

  • Android: shadowsocks-android v5.3.0+ 已支持。
  • Windows: v2rayN (基于Xray-core)
  • OpenWrt: xray-core
    • opkg(需要 OpenWrt 21.02+), 6MB多。
    • 直接下载官方静态编译的 xray-core 也可以。但占用空间很大。

shadowsocks-libev

config

ss-server -s 0.0.0.0 -p 443 -u -m chacha20-ietf-poly1305 -k password --fast-open

参数:

  • --acl ACL_FILE_PATH

Config file

-c config_file_path 参数指定。

{
    "server":"0.0.0.0",
    "acl":"/etc/shadowsocks-libev/config.acl",
    "mode":"tcp_and_udp",
    "server_port":21,
    "local_port":1080,
    "password":"password",
    "timeout":86400,
    "method":"chacha20-ietf-poly1305"
}

-u, --fast-open, --acl 等参数无法通过配置文件指定。

initscript

systemd

vim /etc/default/shadowsocks-libev

START=yes

# Configuration file
CONFFILE="/etc/shadowsocks-libev/config.json"

# Extra command line arguments
DAEMON_ARGS="-u"

# User and group to run the server as
USER=nobody
GROUP=nogroup

# Number of maximum file descriptors
MAXFD=32768

init.d

initscript 配置文件:/etc/default/shadowsocks-libev

# Defaults for shadowsocks initscript
# sourced by /etc/init.d/shadowsocks-libev
# installed at /etc/default/shadowsocks-libev by the maintainer scripts

#
# This is a POSIX shell fragment
#
# Note: `START', `GROUP' and `MAXFD' options are not recognized by systemd.
# Please change those settings in the corresponding systemd unit file.

# Enable during startup?
START=yes

# Configuration file
CONFFILE="/etc/shadowsocks-libev/config.json"

# Extra command line arguments
DAEMON_ARGS="-u"

# User and group to run the server as
USER=root
GROUP=root

# Number of maximum file descriptors
MAXFD=1024

Tips

"block all requests from X.X.X.X" error

这是auto ban机制,一个IP多次连接失败就会被(永久)ban,只有重启server服务器才行解封。

Fix:

Add your IP to the [white_list] section of the ACL file.

ACL

启动 ss-server 时用 --acl <acl_file> 参数指定 acl 文件路径。

ACL 文件格式:

#[accept_all]
# 除黑名单IP外,允许所有IP连接。(默认模式)

[reject_all]
# 拒绝所有IP 连接 (除了[white_list]白名单里的IP)

[black_list]
# 黑名单 IP

[white_list]
# IP白名单。在启用了 [reject_all] 的模式下,只有这里IP能够连接。
# 另外,白名单里的IP不会因为多次尝试连接失败而被自动封禁。

127.0.0.1
::1
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
fc00::/7

[outbound_block_list]
# 禁止访问列表

(^|\.)\w*adwords\w*\.\w*$

[bypass_all]
# 直连所有IP模式 (适用于 ss-local 的配置)

[proxy_all]
# 代理所有IP模式 (适用于 ss-local 的配置)

[bypass_list]
#直连列表 (适用于 ss-local 的配置)

[proxy_list]
#代理列表 (适用于 ss-local 的配置)
  • black_list / white_list 每一条记录是一个 IP 或 IP段。
  • outbound_block_list / bypass_list / proxy_list 每一条是IP、IP段或用来匹配域名的正则表达式。
  • 参考: acl.c

Docker

docker pull shadowsocks/shadowsocks-libev:edge

docker run -e PASSWORD=123456 -e METHOD=chacha20-ietf-poly1305 \
  -p 80:8388 -p 80:8388/udp \
  --restart always --name ss-server -d \
  shadowsocks/shadowsocks-libev:edge

shadowsocks-windows

特点:在同一端口(默认 1080) 同时提供 Socket5 和 http(s) 代理。

Problems

访问个别站(例如GETCHU)会很卡,但改用同一IP的VPN就正常

Workaround:用 Socket5代理,不要用 http(s)代理。

shadowsocks-win 自动设置的系统代理只能设为 http。如果需要使用 Socket5 模式代理,可以:

  • 安装 Chrome SwitchyOmega 扩展并使用其管理 Chrome 代理设置。
  • 使用 Proxifier 强制任何 Win32 程序使用 Socket5 代理。

Last update: 2022-09-23 03:27:57 UTC