Shadowsocks 加密连接可以分为两部分:sslocal、ssserver,简单的说,在本地设备上运行 sslocal 并且在服务器上运行 ssserver,加密连接就建好啦。

It's about the network
速度挺快的

先说服务器这边,从可靠的角度考虑,运行 ssserver 需要做这些事:安装必要的程序;配置防火墙,开放 Shadowsocks Server 服务端口和其他必要的端口;运行 Shadowsocks 服务程序。把这些事情写成一个 bash 脚本,代码如下。

#!/bin/bash
ssPackageUrl=https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.15.3/shadowsocks-v1.15.3.x86_64-unknown-linux-gnu.tar.xz
ssPort=7039
ssHome=/home/xinlake/shadowsocks-rust

# upgrade packages, install packages
apt update
apt-get install -y tar wget ufw

# setup firewall, enable ssh and shadowsocks port
ufw allow 22/tcp
ufw allow $ssPort/tcp
ufw allow $ssPort/udp
ufw --force enable

# deploy shadowsocks-rust
mkdir -m 0755 -p $ssHome
cd $ssHome

if [[ ! -f "./ssserver" ]]; then
wget --quiet --output-document shadowsocks-x64-linux-gnu.tar.xz $ssPackageUrl

tar -xf ./shadowsocks-x64-linux-gnu.tar.xz
rm ./shadowsocks-x64-linux-gnu.tar.xz
fi

# start shadowsocks server
./ssserver --server-addr "[::]:$ssPort" --encrypt-method "aes-256-gcm" --password "hello-ss" -U &

上面的代码会安装 tar、wget 等要用到的工具(一般来说这些工具系统都有,执行一下 apt 安装就不怕万一没有或是被卸载,即便已经安装也没什么影响),然后打开 SSH 和 Shadowsocks 服务端口,SSH 是为了远程管理,服务端口(ssPort=7039)随意指定个不用的就行,再从 GitHub 下载并解压 Shadowsocks 程序包,最后在 7039 端口上运行 Shadowsocks 服务程序。

这样,服务器这边就准备好了。留意 Shadowsocks Server 的参数:IP 地址为 VPS-IP 地址;端口为 7039;加密方式为 aes-256-gcm;密码为 hello-ss

现在来说本地设备这边,设备这边有两步,先运行 sslocal 连接服务器创建加密连接,然后将流量转给 sslocal 走加密连接。执行下面的代码,第一步就完成了。

sslocal.exe --server-addr "<VPS-IP>:7039" --encrypt-method "aes-256-gcm" --password "hello-ss"
--local-addr "127.0.0.1:1080" --protocol http

为了使代码清晰,我把 sslocal 的参数写成了两行并且都写了全名。第一行是目标服务器的参数,服务器地址(IP:Port)、加密方式、密码,也就是上面需要留意的服务器参数。第二行是本地监听,sslocal 不能主动接管流量,它提供的是被动的服务接口(支持 SOCKS5、HTTP、Tunnel 通讯协议,默认 SOCKS5),转发流量这个事情需要操作系统或者应用配合。

以 Windows 11 为例,当 sslocal 以第二行参数监听 1080 号端口时,需要在 Setting –> Network & Internet –> Proxy 里设置代理,这样,第二步就完成了。涉及 Proxy、VPN 方面的内容挺多的,今天我就不深入讲了。

It's about the network
设置代理

Vultr 云服务器上搭建 Shadowsocks 网速还不错(电信网络开欧美地区服务器),封面图是 Android 手机更新 App 或看视频,下图是 Windows PC 看 8K 视频。我觉得他们家有个比较方便的地方就是可以创建启动脚本,比如我将上面服务端的代码创建名为 SS 的启动脚本,然后建 VPS 实例时启动脚本选择 SS 就行。

It's about the network