背景
代理服务器可以隐藏本机真实 IP,同时可以通过跳板 IP 访问一些只能由特定地区访问的网站。而这一些代理服务器通常都通过一些程序来搭建,熟知的就有 Shadowsocks、V2Ray 等程序。其中的 Shadowsocks 是一种比较成熟的手段,同时可以搭配 V2Ray-Plugin
插件来实现一定的混淆效果。这里选用 Shadowsocks-libev 作为例子。
通过仓库安装
这一个方法很简单,只需要执行以下几条命令即可:
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";
}
}
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 软件。
...
是我落后了... 发现现在 libev 实现已经不再添加新功能了。目前开发都在 rust 实现上了,正好买了 VMISS 新机子,测试一下,到时候再发一篇🤣