目录
介绍
昨天我们实操了使用docker版的shadowsocks配合nginx部署ss+ws+tls,也许有的同学觉得杀鸡焉用牛刀,不需要nginx,那我们今天就来看看直接安装shadowsocks以及v2ray-plugin部署ss+ws+tls。
我们先介绍直接使用ss监听443端口的搭建方式,如果想要更安全活得长一点,可配合nginx或caddy搭建伪装网站,请直接跳转到这里。
安装
由于debian11官方源我们已收录了shadowsocks-libev和shadowsocks-v2ray-plugin,我们直接apt安装即可:
apt update -y && apt install -y shadowsocks-libev shadowsocks-v2ray-plugin
修改配置文件
官方版本的shadowsocks-libev,其配置文件位于/etc/shadowsocks-libev/。这里需要注意下,秋水大佬的docker版shadowsocks-libev集成了v2ray-plugin,但是和apt安装的shadowsocks-v2ray-plugin,包名不一样,具体我们可以来看下。
我们可以看到,apt版本的 shadowsocks-v2ray-plugin的二进制文件名字叫做ss-v2ray-plugin,所以我们修改配置文件时也要注意下,将v2ray-plugin
换成ss-v2ray-plugin
。们直接覆盖原配置文件,下面命令请完整复制。
cat > /etc/shadowsocks-libev/config.json <<EOF
{
"server":["::0", "0.0.0.0"],
"server_port":443,
"password":"xxxxxx",
"timeout":300,
"method":"aes-128-gcm",
"nameserver":"1.0.0.1",
"mode":"tcp_and_udp",
"plugin":"ss-v2ray-plugin",
"plugin_opts":"server;tls;host=xxx.xxx.com;cert=/etc/shadowsocks-libev/xxx.com.crt;key=/etc/shadowsocks-libev/xxx.com.key"
}
EOF
此处有几点说明:
1.我的vps是由ipv6的所以我通知监听了ipv4和ipv6
2.我是直接将证书下载下来放在了/etc/shadowsocks-libev/
目录
2.如果没有证书,cert和key参数可以不用填直接删除,ss-v2ray-plugin
插件会自动通过acme脚本申请证书。
重启ss
我们直接重启ss
systemctl restart shadowsocks-libev.service
大坑
然后问题就来了,依然时无法连接,我们去看下ss的状态:
systemctl status shadowsocks-libev.service
发现没跑起来,再去看下日志:
journalctl -u shadowsocks-libev.service -f
好,我们找到错误的原因了:listen tcp 0.0.0.0:443: bind: permission denied
无法监听443端口。这是由于我们使用非root用户启动ss,但是Linux默认不允许非root用户启动的进程监听1024以下的端口,除非为每一个二进制文件显式声明。然后真正使用443端口的其实是v2ray-plugin,所以我们:
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/ss-v2ray-plugin
或者:
sudo setcap CAP_NET_BIND_SERVICE=+eip $(which ss-v2ray-plugin)
然后重启ss
systemctl restart shadowsocks-libev.service
我们可以看到,已经成功跑起来了:
好了大功告成。
ss+ws+tls+nginx
如果要启用伪装站点的话,那就得借用caddy或者nginx,这里提供一个思路,以nginx为例
安装ss
apt update && apt install -y shadowsocks-libev shadowsocks-v2ray-plugin
写入ss配置文件
下面的命令请完整复制
这里有一点说明:端口:23456、路径:/admin/
,请修改成自己想要的,不要照抄我的,而且要和接下来的nginx站点配置文件保持一致。
cat > /etc/shadowsocks-libev/config.json <<EOF
{
"server":"127.0.0.1",
"server_port":23456,
"password":"doub.io",
"timeout":300,
"method":"aes-128-gcm",
"nameserver":"1.0.0.1",
"mode":"tcp_and_udp",
"plugin":"ss-v2ray-plugin",
"plugin_opts":"server;path=/admin/"
}
EOF
重启ss
systemctl restart shadowsocks-libev.service
配置nginx
小白这里直接就apt安装个nginx,你也可以使用的军哥的lnmp或宝塔。
直接安装的命令:
apt update && apt install -y nginx curl tar
新建站点
搭建网站网站的过程我就不写了,实在不行你就用宝塔,也不需要啥命令行操作,我们直接跳到站点的配置文件。如果是apt安装的配置nginx,配置文件在/etc/nginx/conf.d/,直接在里面新建一个站点,如果是宝塔,直接在网站设置里里修改配置文件,如果是军哥的lnmp,配置文件在/usr/local/nginx/conf/vhost/。
我们找到相应站点的配置文件,在最后倒数第二行敲下回车,粘贴进如下配置,其中的/admin/已经23456端口必须和ss配置文件中一致。
location /admin/ {
if ($http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
proxy_pass http://127.0.0.1:23456;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# Show real IP in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
下面贴一份/etc/nginx/conf.d/目录下的完整配置文件
server { # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块 listen 80; listen 443 ssl http2; # listen [::]:80; # listen [::]:443 ssl http2; # 域名,多个以空格分开 server_name xxx.xxx.net; index index.php index.html index.htm default.php default.htm default.html; root /usr/share/nginx/html/xxx; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #HTTP_TO_HTTPS_START if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END ssl_certificate /etc/nginx/xxx.xxx.net.crt; ssl_certificate_key /etc/nginx/xxx.xxx.net.key; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; error_page 497 https://$host$request_uri; #SSL-END #PHP_START # include enable-php.conf; # location ~ \.php$ { # include snippets/fastcgi-php.conf; # fastcgi_pass unix:/run/php/php7.4-fpm.sock; # } #PHP_END #SS_START location /admin/ { if ($http_upgrade != "websocket") { return 404; } proxy_redirect off; proxy_pass http://127.0.0.1:23456; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; # Show real IP in v2ray access.log proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #SS_STOP }
其中标志xxx的部分请替换成自己的域名,这里我把php部分注释掉了,有需要使用php的童鞋请自行取消相应注释,并选择正确版本。
配置伪装网站
从上文的配置文件,我们可以看到站点文件目录为root /usr/share/nginx/html/xxx,你可以拉取个静态网页,也可以反代到cloudreve网盘,具体请参考docker配合宝塔部署ws+tls并搭建伪装网站,你可以拉取个静态网页,也可以反代到cloudreve网盘。
如果是反代到cloudreve网盘的童鞋,简单贴一下说一下教程
安装cloudreve
mkdir cr && chmod +x cr && cd cr wget https://github.com/cloudreve/Cloudreve/releases/download/3.5.3/cloudreve_3.5.3_linux_amd64.tar.gz tar -zxvf cloudreve_3.5.3_linux_amd64.tar.gz chmod +x ./cloudreve ./cloudreve
到此,你可以浏览器访问IP:5212
去修改用户名和密码,如果仅仅用来伪装,直接ctrl+c退出即可
加入进程守护
下面内容请完整复制:
cat > /usr/lib/systemd/system/cloudreve.service <<EOF
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target
[Service]
WorkingDirectory=/root/cr
ExecStart=/root/cr/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
StandardOutput=null
StandardError=syslog
[Install]
WantedBy=multi-user.target
EOF
启用进程守护
systemctl daemon-reload
systemctl restart cloudreve
systemctl enable cloudreve
nginx反代到cloudreve
跟刚刚反代到ss一样的操作,我们在/etc/nginx/conf.d/目录下的配置文件再写入如下内容:
#CR_START location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:5212; } #CR_STOP
然后,重启nginx
systemctl restart nginx.service
好了,大功告成。