手动搭建shadowsocks-rust 作者: 毕世平 时间: 2020-11-29 分类: 默认分类 前言:`rust`版`shadowsocks`好像好早就有了,只是自己也是最近才发现,据说是性能很不错,也有`none或者plain`不加密选项可供选择。之前好像在群里看到说,不出意外的话,`ss-libev`不会有新的功能添加,主要修bug,`ss-rust`会发力,加一些新功能。`rust`语言写出的软件,跟go类似,单文件就齐活了,不用像`ss-libev`那样需要解决运行时的依赖问题。 本文介绍在`Debian 10 x64`下`shadowsocks-rust`版的安装方法,加密方式选择`none`不加密,配合`v2ray-plugin`插件,webserver选择`caddy v1.0.5`版本,搭建`ss+wss`类型节点。 **条件准备**: - 一个域名,用来申请证书 - 一台vps服务器 - ssh客户端等 # 一、申请证书 申请证书需要准备一个域名(免费付费均可),先在dns解析服务提供商那里添加好对`vps ip`的A记录。申请证书我习惯于使用`acme.sh`脚本,之前有专门写过教程:[传送门](https://shiping.date/18.html "传送门")。 # 二、配置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`下载地址是:[传送门](https://github.com/shadowsocks/shadowsocks-rust/releases "传送门");`v2ray-plugin`下载地址是:[传送门](https://github.com/shadowsocks/v2ray-plugin/releases "传送门")。 ## 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 //将此服务加入开机自启动 参考链接: - [Shadowsocks-rust项目地址](https://github.com/shadowsocks/shadowsocks-rust "Shadowsocks-rust项目地址") - [v2ray-plugin项目地址](https://github.com/shadowsocks/v2ray-plugin "v2ray-plugin项目地址") - [acme.sh脚本项目地址](http://acme.sh "acme.sh脚本项目地址") - [Shadowsocks-Rust简介](https://www.malike.net.cn/blog/2019/04/30/shadowsocks-rust-tutorial/ "Shadowsocks-Rust简介") - [关闭日志](https://github.com/shadowsocks/shadowsocks-rust/issues/75 "关闭日志") - [How to silent a systemd service](https://serverfault.com/questions/838574/how-to-silent-a-systemd-service "How to silent a systemd service") 标签: none
请问一下这个shadowsocks-rust的多用户多端口,是不是也是和ss-libev的一样,是多开进程实现?还是和python之类的可以直接在配置文件里写多端口和密码
shadowsocks-libev编译出来的ss-manager,可以实现多端口多用户,确实是通过多开ss-server进程;刚刚试了下shadowsocks-rust,可以直接用 ssserver -c config.json ,其中配置文件可以参照ss-rust github readme实例,直接配置多端口多用户。
caddy是不是可以自动管理ssl证书的申请?能剩下acme.sh的操作步骤。
是的,caddy可以自动获取证书,个人习惯于用acme.sh脚本申请
服务器端按照你的教程设置好了,那客户端咋设置啊
下载相应平台的插件,根据参数调用就好了呀。以pc端为例,插件程序:v2ray-plugin;插件参数:tls;host=你的域名;path=/uri
还是被封了/(ㄒoㄒ)/~~七一的时候不停的封端口,于是我开CDN隐藏IP。过了一个星期后,发现端口全部解封了,于是我把CDN关了,于是IP被封了。
呃呃,被封是玄学,骚年放平心态,谁还没被封过几台机子:)
What about Voice/Video calls through shadowsocks-rust with these setting ??? will work?
● 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似乎运行失败,请问一下大佬这个应该怎么解决呢。