很久以前自己写过ss-libev+simple-obfs免流教程,现在obfs已经停止更新了,看到了@Conners Hua大佬的文章教程,记录一下自己参考文章部署2ray-plugin的过程(在我写这篇文章的时候作者已经把原文删除了)
教程中有提到:
Quantumult X,它需要 v2ray-plugin 服务端配置 mux=0 参数,与Shadowrocket等软件所使用的服务端配置是有所不同的,后面会有既满足Quantumult X又满足Shadowrocket的方案
准备工作准备工作
- 一个域名
- 一台云服务器(作者用的Ubuntu,我用的是Debian)
如果是新系统,请先刷新软件源及更新软件
sudo apt update && sudo apt upgrade
另外还需要一些软件
sudo apt install vim curl wget
按照教程内容分为两大部分
- web服务器
- shadowsocks
部署web服务器之Caddy
(Caddy比较简单,能够自动申请证书,配置https)
安装 Caddy
curl https://getcaddy.com | bash -s personal
新建配置文件目录
sudo mkdir /etc/caddy
sudo chown -R root:root /etc/caddy
新建 caddy 配置文件
sudo touch /etc/caddy/Caddyfile
sudo chown root:root /etc/caddy/Caddyfile
sudo chmod 644 /etc/caddy/Caddyfile
新建 SSL 证书目录
sudo mkdir /etc/ssl/caddy
sudo chown -R root:www-data /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy
新建 Web 根目录
sudo mkdir /var/www
sudo chown www-data:www-data /var/www
sudo chmod 555 /var/www
配置 Web 站点
example.com 是一个文件夹,可以以你的域名为名字
sudo mkdir /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 555 /var/www/example.com
配置 Caddy 服务
下载服务文件并配置
sudo wget <https://raw.githubusercontent.com/caddyserver/caddy/master/dist/init/linux-systemd/caddy.service>
sudo cp caddy.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/caddy.service
sudo chmod 644 /etc/systemd/system/caddy.service
sudo systemctl daemon-reload
启动 caddy
sudo systemctl start caddy.service
设置开机启动
sudo systemctl enable caddy.service
配置 Caddy 网站
sudo vim /etc/caddy/Caddyfile
内容如下:
example.com { # 你的域名
tls mail@example.com # 你的邮箱用于申请 SSL 证书
gzip
# root /var/www/example.com
proxy / www.microsoft.com # 需要反向代理网站的网址
proxy /s localhost:10100 { # 用于 v2ray-plugin 的 path
websocket
header_upstream -Origin
}
proxy /x localhost:10200 { # 可以多加一个给 Quantumult X
websocket
header_upstream -Origin
}
}
PS:
- 如果有兴趣可以自己写一些静态页面放置于/var/www/example.com目录或者干脆反向代理一个国际网站,如果你想要自己弄一个静态页面可以将 proxy / www.microsoft.com 注释掉,也就是在前面加上 # 号,然后将 root 前的 # 号去除
- 这里你需要有个印象,在这里我配置了两个 path ,一个是 /s 对应端口为 10100 用于普通 v2ray-plugin 软件。另一个是 /x 对应端口为 10200 用于 Quantumult X,如果你不使用可以将第二个 /x 的配置删除。
修改好 Caddyfile 后保存退出,然后重启下 Caddy 服务让其生效。
sudo systemctl restart caddy.service
PS:
在重启服务后可以查看下服务状态,也就是
sudo systemctl status caddy.service
如果你访问网站发现没有成功,就可以查看上述状态是否是绿色,并且注意运行端口,Caddy 可能会指定一个随机端口,此时你可以再次修改 Caddyfile 中强制指定 443 端口,比如:
example.com:443 { # 你的域名
tls mail@example.com # 你的邮箱用于申请 SSL 证书
...
}
之后和上面一样保存退出、重启服务
遇到「listen tcp :443: bind: permission denied」问题
如果通过查看 status 发现「listen tcp :443: bind: permission denied」
sudo vim /etc/systemd/system/caddy.service
去掉 CapabilityBoundingSet和 AmbientCapabilities 的注释
; The following additional security directives only work with systemd v229 or later.
; They further restrict privileges that can be gained by caddy. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
找到以下两行,将注释也就是开头的 ; 移除,保存并退出重启服务即可。
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true
部署web服务器之Nginx
这里就贴一下我用的配置文件
server {
listen 80;
server_name banana-zone.me;##你的域名
#rewrite ^(.*)$ https://$host$1 permanent; ##这句是强制HTTP跳转HTTPS
#rewrite ^/(.*) https://www.microsoft.com permanent;
}
#上面这个我是让http直接跳转到/www.microsoft.com permanent,会导致shadowrocket连不了
server
{
listen 443;
ssl on;
server_name banana-zone.me;##你的域名
ssl_certificate /root/ssl/banana-zone.me.fullchain.cer; ##证书位置
ssl_certificate_key /root/ssl/banana-zone.me.key; ##证书位置
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
index index.html index.htm index.php;
#上面是Nginx的https配置
location / {
proxy_pass https://www.microsoft.com;
}
#这个是反向代理,即浏览banana-zone.me时会跳转到www.microsoft.com
location /s { # path
proxy_redirect off;
proxy_pass http://127.0.0.1:10100; # Shadowsocks 或 VMess 配置里的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
#上面是适用于shadowrocket的配置
location /x { # path
proxy_redirect off;
proxy_pass http://127.0.0.1:10200; # Shadowsocks 或 VMess 配置里的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
#上面是适用于Quantumult X的配置
#看个人需求,需要哪个要哪个或者两个一起
PS:
重点都是对应到后端 Shadowsocks 或者 V2Ray 的端口以及 WebSocket 的 path 路径
location /s { # path
proxy_redirect off;
proxy_pass http://127.0.0.1:10100; # Shadowsocks 或 VMess 配置里的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
#上面是适用于shadowrocket的配置
location /x { # path
proxy_redirect off;
proxy_pass http://127.0.0.1:10200; # Shadowsocks 或 VMess 配置里的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
PS:
以上内容必须放在listen 443那段后面,放在别的地方,shadowrocket会连不上
部署v2ray-plugin 与 Shadowsocks
(部署Shadowsocks有两种方法)
首先是部署 v2ray-plugin,编译该项目需要安装 Go
先到 Go 官网下载页面获取最新下载链接
安装并配置 Go
wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz && tar -xaf go1.13.1.linux-amd64.tar.gz
mv go /usr/local/
配置环境
vim /etc/profile
在最后加上
export PATH=$PATH:/usr/local/go/bin
然后保存退出
使配置生效
source /etc/profile
查看 Go 版本以确认安装成功
go version
看到返回结果为go version go1.13.1 linux/amd64,即 go 安装成功了
下载并编译 v2ray-plugin
下载并进入目录
git clone https://github.com/shadowsocks/v2ray-plugin.git && cd v2ray-plugin
编译 v2ray-plugin
go build
将编译好的主体放入 PATH 环境
mv v2ray-plugin /usr/local/bin
方法一
Shadowsocks-libev + v2ray-plugin(有局限性)
安装并配置 Shadowsocks-libev
sudo apt install shadowsocks-libev
卸载
apt remove shadowsocks-libev
编辑 Shadowsocks 配置文件
vim /etc/shadowsocks-libev/config.json
{
"server":"127.0.0.1",
"server_port":10100,
"local_port":1080,
"password":"FuckGFW",
"timeout":60,
"method":"chacha20-ietf",
"plugin":"v2ray-plugin",
"plugin_opts":"server;path=/s;loglevel=none"
}
说明:
- server 此处打算仅使用 v2ray-plugin 的方式使用 SS,所以只监听本地地址。
- server_port 用于对应 Web 服务器,也就是之前设置的 10100 端口
- password 密码
- method 依旧建议使用 AEAD 算法(实际测试ss-server不识别aes-128-gcm)
- plugin v2ray-plugin 前面已放入 PATH 环境,所以直接指定
- plugin_opts 如示例中填写, path 就是之前配置 Web 服务器中的 /s,另外如果是用于 Quantumult X 需要加上 mux=0 完整的示例就是 server;mux=0;path=/x;loglevel=none (注意加上 mux=0 后不与 Shadowrocket 等兼容)
修改完成后重启 Shadowsocks 服务以让其生效
sudo systemctl restart shadowsocks-libev
PS:
第一种方法的问题在于,不能同时使用 Shadowrocket 等和 Quantumult X 的 v2ray-plugin,因为 Quantumult X 需要 mux=0 但这样其他软件如 Shadowrockety又不兼容
方法二
V2ray(ss)+v2ray-plugin
可以同时支持多种 v2ray-plugin,不仅是两种不同的 v2ray-plugin,甚至进一步的使用其他协议比如 VMess、以及软件和配置都可以统一使用 V2ray
安装 V2ray
bash <(curl -L -s https://install.direct/go.sh)
配置 V2Ray
cd /etc/v2ray/
sudo mv config.json config.json.bak
sudo vim config.json
可以新建一个 config.json 把电脑上编辑好的粘贴或者上传到 /etc/v2ray,这里不详细介绍,直接贴配置
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "info"
},
"inbounds": [
{ // 第一个进站配置,用于普通的 v2ray-plugin
"port": 10100,
"protocol": "dokodemo-door",
"tag": "wsdoko",
"settings": {
"address": "v1.mux.cool",
"followRedirect": false,
"network": "tcp"
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/s"
}
}
},
{ // 配合上面的进站配置的 SS 协议配置
"port": 8389, // 此处的端口实际用不到但必须设置
"protocol": "shadowsocks",
"settings": {
"method": "aes-128-gcm",
"ota": false,
"password": "qwe123",
"network": "tcp,udp"
},
"streamSettings": {
"network": "domainsocket"
}
},
{ // 第三个进站配置,用于 Quantumult X 的 v2ray-plugin
"port": 10200,
"protocol": "shadowsocks",
"settings": {
"method": "aes-128-gcm",
"ota": false,
"password": "qwe123",
"network": "tcp,udp"
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/x"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
},
{ // 用于普通 v2ray-plugin
"protocol": "freedom",
"tag": "ssmux",
"streamSettings": {
"network": "domainsocket"
}
}
], // 用于普通 v2ray-plugin
"transport": {
"dsSettings": {
"path": "/var/run/ss-loop.sock"
}
},
"routing": {
"rules": [
{ // 用于普通 v2ray-plugin
"type": "field",
"inboundTag": [
"wsdoko"
],
"outboundTag": "ssmux"
},
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "blocked"
}
]
}
}
PS:
对于对应 Web 服务器端口的 10100 和 10200 以及和 path 也可以自行修改,但要记住如果这里改了对应的 Web 服务器配置也要改
修改完成后重启 V2Ray 服务以让其生效
sudo service v2ray restart
为防止意外查看下 V2Ray 的服务状态是否是正常的绿色
sudo service v2ray status
最后附上Quantumult X 和Shadowrocket的设置
参考
更新后续遇到的问题
ss-libev+v2ray-plugin
Shadowrocket无法连接成功,原因是ss-server不识别aes-128-gcm
这个加密方式,自动转换成rc4-md5
但是在v2ray中的ss则没有这个问题。
v2ray(ss)+v2ray-plugin
Shadowrocket无法连接成功,Quantumult X则无问题,原因是wordpress设置了固定链接,所以nginx配置中添加了这一段
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
结果导致连接不上,最后把wordpress设定成默认链接即可
Comments | 2 条评论
博主 MurrddoL
如下报错
root@ubuntu:~# sudo systemctl status caddy.service
* caddy.service – Caddy HTTP/2 web server
Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2019-11-10 09:00:43 EST; 44min ago
Docs: https://caddyserver.com/docs
Process: 1617 ExecStart=/usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/e
Main PID: 1617 (code=exited, status=2)
Nov 10 09:00:43 ubuntu systemd[1]: Started Caddy HTTP/2 web server.
Nov 10 09:00:43 ubuntu systemd[1]: caddy.service: Main process exited, code=exited, status=2/INVALIDA
Nov 10 09:00:43 ubuntu systemd[1]: caddy.service: Unit entered failed state.
Nov 10 09:00:43 ubuntu systemd[1]: caddy.service: Failed with result ‘exit-code’.
博主 香蕉弟弟
@MurrddoL 是不是配置文件有问题🤨