搭建 Shadowsocks 服务器

Shadowsocks-libev 未来只修复 BUG,新版本已经转向 Shadowsocks-Rust,建议及时更新。

背景

代理服务器可以隐藏本机真实 IP,同时可以通过跳板 IP 访问一些只能由特定地区访问的网站。而这一些代理服务器通常都通过一些程序来搭建,熟知的就有 Shadowsocks、V2Ray 等程序。其中的 Shadowsocks 是一种比较成熟的手段,同时可以搭配 V2Ray-Plugin 插件来实现一定的混淆效果。这里选用 Shadowsocks-libev 作为例子。

通过仓库安装

本方式只适用于 Debian、Ubuntu 系统,同时你或许还需要保证系统为最新版,否则可能会安装旧版。该方式的系统要求:Debian 8, 9 或更高、Ubuntu 14.04 LTS, 16.04 LTS, 16.10 或更高

这一个方法很简单,只需要执行以下几条命令即可:

apt update
apt install shadowsocks-libev -y

安装完成之后,配置文件的路径是 /etc/shadowsocks-libev/config.json

通过手动编译安装

编译准备

使用 apt 安装一些必备模块:

apt install -y --no-install-recommends \
    gettext \
    build-essential \
    autoconf \
    libtool \
    libpcre3-dev \
    asciidoc \
    xmlto \
    libev-dev \
    libudns-dev \
    libc-ares-dev

然后手动编译这两个依赖:

# libmbedtls
wget -qO- https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v3.3.0.tar.gz | tar xzv
cd mbedtls-3.3.0
make SHARED=1 CFLAGS=-fPIC && make DESTDIR=/usr install

# libsodium
wget -qO- https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz | tar xzv
cd libsodium-1.0.18
./configure --prefix=/usr && make && make install

编译 Shadowsocks

请不要直接 git clone 整个项目代码,应当在 Release 页面 下载
wget -qO- https://github.com/shadowsocks/shadowsocks-libev/releases/download/v3.3.5/shadowsocks-libev-3.3.5.tar.gz | tar xzv
mv shadowsocks-libev-3.3.5 shadowsocks && cd shadowsocks
./configure --disable-documentation && make && make install

编辑配置文件

如果你使用仓库安装,配置文件路径请查阅上述步骤

手动编译安装后,此时你应当在 shadowsocks 目录中,需要手动创建 config.json 文件:

nano config.json

然后添加以下内容:

{
    "server":["127.0.0.1"], #本地监听地址
    "mode":"tcp_only", #TCP、UDP 设置
    "server_port":8888, #服务器端口
    "local_port":1080,
    "password":"password", #密码
    "timeout":86400,
    "method":"chacha20-ietf-poly1305", #加密方式
}

接下来需要配置 Shadowsocks 为系统服务,否则重启过后不会自启动。首先创建一个服务文件:

nano /etc/systemd/system/shadowsocks.service

然后添加如下内容:

[Unit]
Description=Shadowsocks server
After=network.target
 
[Service]
ExecStart=/usr/local/bin/ss-server -c /root/shadowsocks/config.json 
Restart=always
 
[Install]
WantedBy=multi-user.target

保存之后,执行下方命令启动:

systemctl enable shadowsocks && systemctl start shadowsocks

配置 V2Ray-Plugin 插件

寻常的配置仍然容易被识别,所以一般还搭配 WebSocket 混淆插件。这里选用 teddysun 大佬维护的 V2Ray-Plugin 插件。

首先需要从 Release 页面 下载:

wget -qO- https://github.com/teddysun/v2ray-plugin/releases/download/v5.3.0/v2ray-plugin-linux-amd64-v5.3.0.tar.gz | tar xzv

安装只需要将解压后的文件移动即可:

mv v2ray-plugin_linux_amd64 /usr/bin/v2ray-plugin

最后需要编辑你的 config.json 文件,在最后加上这两段内容:

"plugin":"v2ray-plugin",
"plugin_opts":"server;host=<你的域名>;path=/random;mux=0",

将配置文件保存之后,重启即可。

配置 Nginx

为什么需要配置 Nginx 呢?因为上面的配置中并没有指定证书,一般来说需要使用 HTTPS 加密。这里使用 Nginx 对 Shadowsocks 进行反代。

安装 Nginx

这里我直接使用 OneinStack 一键安装命令:

wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1 --reboot

安装完成之后会重启,开机进入系统后,在 /usr/local/nginx/conf 下创建 vhost 目录:

mkdir /usr/local/nginx/conf/vhost

接着新建一个 Nginx 配置文件:

nano /usr/local/nginx/conf/vhost/shadow.conf

在配置文件里输入下方配置:

server {
    listen 443 ssl;
    ssl_certificate /path/to/cer; #证书位置
    ssl_certificate_key /path/to/key; #密钥位置
    ssl_session_timeout 3m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY13>
    ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
    ssl_conf_command Options PrioritizeChaCha;
    ssl_prefer_server_ciphers on;

    server_name <你的域名>;

    location /random {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8888;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
注意要提前申请好 TLS 证书,同时要保证 proxy_pass 后的端口与你 config.json 配置文件中的端口一致

之后执行如下命令重启 Nginx 服务器即可:

service nginx restart

客户端配置

由于我使用的是 Clash,配置文件中服务器的写法如下:

...
proxies:
  - name: <自定义服务器名称>
    type: ss
    server: <你的域名>
    port: 443
    cipher: chacha20-ietf-poly1305
    password: <服务器密码>
    plugin: v2ray-plugin
    plugin-opts:
      mode: websocket
      tls: true
      host: <你的域名>
      path: /random
      mux: 0 #这里的 mux: 0 是为了兼容 Quantumult X 软件。
...
至此,你已经搭建、配置好一个 Shadowsocks 服务器啦!

有 1 条评论

  1. yeni

    是我落后了... 发现现在 libev 实现已经不再添加新功能了。目前开发都在 rust 实现上了,正好买了 VMISS 新机子,测试一下,到时候再发一篇🤣

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注