iOS 上的小火箭(shadowrocket)该如何设置 wss(websocket)?
Closed this issue · 6 comments
我的gost跑在了nginx后面,用的是推荐的websocket协议,nginx解决了tls证书的问题,因此转发到后端gost是裸露 websocket。
现在我电脑上的gost客户端已经可以使用了。但手机端上的小火箭(shadowrocket)不知道该如何设置。小火箭(shadowrocket)显示已经有了 gost 插件。
本来想去找小火箭(shadowrocket)相关的群或者论坛问,但没找到就到这里来问了。
为了给后来的兄弟参考如何放在nginx后面,我把我的配置和nginx配置共享出来。
服务端
gost -L "ws://${USER}:${PASSWORD}@${BIND_IP}:${PORT}?path=/ws&proxyProtocol=1"
这是本地的gost配置
gost -F="wss://${USER}:${PASS}@${DOMAIN}:${PORT}?path=/ws"
这是 nginx 配置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name DOMAIN;
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
#forbidden search engine crawlling
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}
client_max_body_size 25M;
location / {
proxy_pass http://127.0.0.1:18888;
# Upgrade headers for WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Standard headers to pass along
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
if ($host = DOMAIN) {
return 301 https://$host$request_uri;
} # managed by certbot
listen 80 ;
listen [::]:80;
server_name DOMAIN;
return 404; # managed by Certbot
}
因为没有搭建你这种nginx反代gost的服务器,所以只能看着小火箭猜测设置方法了
点小火箭右上角的“+”号,然后点选类型,点选“relay(gost 2.11+ relay协议)”进去,地址填你的域名,端口填443,用户名及密码照填你上面配置那个,然后点“插件”进入,再次点“插件”然后点选“gost”,地址填你的域名,端口填443,类型选择“wss”,路径改为“/”,理论上能够填的就这些了
因为没有搭建你这种nginx反代gost的服务器,所以只能看着小火箭猜测设置方法了
点小火箭右上角的“+”号,然后点选类型,点选“relay(gost 2.11+ relay协议)”进去,地址填你的域名,端口填443,用户名及密码照填你上面配置那个,然后点“插件”进入,再次点“插件”然后点选“gost”,地址填你的域名,端口填443,类型选择“wss”,路径改为“/”,理论上能够填的就这些了
试过了,不行。
想到了两个可能性
第一是服务器端使用 https://github.com/ginuerzh/gost/releases/tag/v2.11.1 这个版本的gost,因为看起来插件标明版本是gost 2.11,所以为了兼容性需要确保服务器与客户端版本一致
第二是去掉服务器端gost -L "ws://${USER}:${PASSWORD}的用户名及密码,因为这个看起来在客户端插件里面没有地方填的,只是硬填在了最外面的用户名和密码项,客户端插件有可能不在ws层面握手认证,而在tls层面认证,这样就跟服务器端的gost要求在ws层面认证不兼容了,解决认证可以用uuid作为ws的path,类似vless
小火箭添加的时候必须要选择一种节点类型,所以服务器上你需要用socks5+ws或者http+ws之类的组合协议。然后按照上面回复的设置,加上类型设置为你选择组合协议应该就可以了。
小火箭添加的时候必须要选择一种节点类型,所以服务器上你需要用socks5+ws或者http+ws之类的组合协议。然后按照上面回复的设置,加上类型设置为你选择组合协议应该就可以了。
这种我也尝试过了,也还是不行。
搞定了,外面的类型选 socks5。然后把帐号密码填上。插件选gost,然后配置好插件里面的端口和路径。
我之前一直连不上是因为没有输入用户名导致的。