go-gost/gost

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,然后配置好插件里面的端口和路径。

我之前一直连不上是因为没有输入用户名导致的。