手动搭建shadowsocks-rust
前言: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
脚本,之前有专门写过教程:传送门。
二、配置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 //将此服务加入开机自启动
参考链接:
请问一下这个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似乎运行失败,请问一下大佬这个应该怎么解决呢。