前言:rustshadowsocks好像好早就有了,只是自己也是最近才发现,据说是性能很不错,也有none或者plain不加密选项可供选择。之前好像在群里看到说,不出意外的话,ss-libev不会有新的功能添加,主要修bug,ss-rust会发力,加一些新功能。rust语言写出的软件,跟go类似,单文件就齐活了,不用像ss-libev那样需要解决运行时的依赖问题。

本文介绍在Debian 10 x64shadowsocks-rust版的安装方法,加密方式选择none不加密,配合v2ray-plugin插件,webserver选择caddy v1.0.5版本,搭建ss+wss类型节点。

条件准备

  • 一个域名,用来申请证书
  • 一台vps服务器
  • ssh客户端等

一、申请证书

申请证书需要准备一个域名(免费付费均可),先在dns解析服务提供商那里添加好对vps ip的A记录。申请证书我习惯于使用acme.sh脚本,之前有专门写过教程:传送门

二、配置ss-rust

2.1 安装

项目releases里直接提供了编译好的二进制包,直接下载对应架构的包即可。我这里机器架构以linux x86_64为例:

# 下载压缩包
cd /usr/local/bin/

wget https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.8.23/shadowsocks-v1.8.23.x86_64-unknown-linux-gnu.tar.xz

wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz

# 解压缩(名字太长,可以用Tab键补全)
xz -d shadowsocks-v1.8.23.x86_64-unknown-linux-gnu.tar.xz && tar -xf shadowsocks-v1.8.23.x86_64-unknown-linux-gnu.tar

tar -zxf v2ray-plugin-linux-amd64-v1.3.1.tar.gz && mv v2ray-plugin_linux_amd64 v2ray-plugin

# 修改所有者
chown root.root ./ss* ./v2ray-plugin

说明:其中,shadowsocks-rust下载地址是:传送门v2ray-plugin下载地址是:传送门

2.2 配置文件

配置文件同样取名config.json,放置在/etc/shadowsocks-rust/目录下:

# 创建目录
mkdir /etc/shadowsocks-rust && cd /etc/shadowsocks-rust

# 创建配置文件,取名config.json
{
    "server":"127.0.0.1",
    "server_port":9000,
    "timeout":300,
    "method":"none",
    "password":"password0",
    "fast_open":false,
    "nameserver":"dns.google",
    "mode":"tcp_only",
    "plugin":"v2ray-plugin",
    "plugin_opts":"server;path=/uri"
}

说明:由于上面设置了none不加密,所以path路径建议设置的尽量复杂些,跟下面Caddyfile文件里的保持一致。

2.3 创建服务文件

ss-rust添加systemd服务,让它可以后台运行和开机自动运行。

# 切换路径
cd /etc/systemd/system/ && vim shadowsocks-rust.service

# 内容示例
[Unit]
Description=Shadowsocks-Rust Service
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-rust/config.json

[Install]
WantedBy=multi-user.target

说明:如果你不想看到标准输出日志的话,可以将systemd日志重定向到/dev/null,具体修改方式为在上述service文件[Service]区块下添加一行StandardOutput=null即可。

2.4 配置systemd

systemctl daemon-reload

systemctl start shadowsocks-rust //启动

systemctl stop shadowsocks-rust //停止

systemctl enable shadowsocks-rust //加入开机自启

systemctl disable shadowsocks-rust //取消开机自启

systemctl is-enabled shadowsocks-rust //判断服务是否处于开机自启状态,输出enabled即代表开机自启

三、配置caddy

3.1 安装caddy

# 下载然后重命名放到/usr/bin目录下,这里感谢秋水逸冰释出的编译成果
wget -O /usr/local/bin/caddy https://dl.lamp.sh/files/caddy_linux_amd64
#(备用)地址
wget -O /usr/local/bin/caddy https://dl.shiping.date/teddysun/caddy-v1.0.5/linux/caddy_linux_amd64

# 赋予权限
chmod 755 /usr/local/bin/caddy

说明:之前给出的安装caddy的脚本好像已经不能用了,里面caddy1的下载链接404了,这里使用秋水逸冰编译好的caddy1版本,具体使用方法还跟之前一样。

3.2 创建caddy的配置文件

3.2.1 配置caddy目录并生成证书

# 创建caddy目录并切换至此
mkdir -p /etc/caddy && cd /etc/caddy

# 创建log空文件,并赋予写权限
touch caddy.log && chmod 666 caddy.log

# 用acme.sh脚本安装证书到此目录
acme.sh --installcert -d yourdomain.com --fullchain-file /etc/caddy/caddy.crt --key-file /etc/caddy/caddy.key --ecc

# 赋予其它用户对caddy.key的读权限
chmod 644 caddy.key

3.2.2 创建caddy配置文件Caddyfile

vim Caddyfile //创建并开始编辑文件

//以下是文件内容,请稍作修改后添加至文件
yourdomain.com:443 {
  gzip
  log /etc/caddy/caddy.log
  tls /etc/caddy/caddy.crt /etc/caddy/caddy.key
  proxy / https://baidu.com
  proxy /uri 127.0.0.1:9000 {
    websocket
    header_upstream -Origin
  }
}
//以上是文件内容,请稍作修改后添加至文件

说明:此处用proxy / https://baidu.com来反代别的网站,你也可以去掉此行,用root /path/to/website来指定网站根目录。

3.3 注册caddy服务

cd /etc/systemd/system && vim caddy.service //切换到此目录下,创建并开始编辑服务文件

//以下是文件内容,请添加至文件
[Unit]
Description=Caddy Service
After=network.target

[Service]
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/caddy -conf /etc/caddy/Caddyfile
Restart=on-abort
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
//以上是文件内容,添加至文件

systemctl daemon-reload //重载守护进程
systemctl start caddy //启动caddy.service服务
systemctl status caddy //查看caddy服务运行状况
systemctl enable caddy //将此服务加入开机自启动

参考链接:

标签: none

已有 10 条评论

  1. nasa nasa

    请问一下这个shadowsocks-rust的多用户多端口,是不是也是和ss-libev的一样,是多开进程实现?还是和python之类的可以直接在配置文件里写多端口和密码

    1. shadowsocks-libev编译出来的ss-manager,可以实现多端口多用户,确实是通过多开ss-server进程;刚刚试了下shadowsocks-rust,可以直接用 ssserver -c config.json ,其中配置文件可以参照ss-rust github readme实例,直接配置多端口多用户。

  2. li3p li3p

    caddy是不是可以自动管理ssl证书的申请?能剩下acme.sh的操作步骤。

    1. 是的,caddy可以自动获取证书,个人习惯于用acme.sh脚本申请

  3. 云天明 云天明

    服务器端按照你的教程设置好了,那客户端咋设置啊

    1. 下载相应平台的插件,根据参数调用就好了呀。以pc端为例,插件程序:v2ray-plugin;插件参数:tls;host=你的域名;path=/uri

  4. 云天明 云天明

    还是被封了/(ㄒoㄒ)/~~七一的时候不停的封端口,于是我开CDN隐藏IP。过了一个星期后,发现端口全部解封了,于是我把CDN关了,于是IP被封了。

    1. 呃呃,被封是玄学,骚年放平心态,谁还没被封过几台机子:)

  5. aydogdy aydogdy

    What about Voice/Video calls through shadowsocks-rust with these setting ??? will work?

  6. VI VI

    ● caddy.service - Caddy Service
    Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Sat 2021-10-30 16:57:08 UTC; 10s ago
    Process: 9378 ExecStart=/usr/bin/caddy -conf /etc/caddy/Caddyfile (code=exited, status=1/FAILURE)
    Main PID: 9378 (code=exited, status=1/FAILURE)
    caddy似乎运行失败,请问一下大佬这个应该怎么解决呢。

添加新评论