在 iOS 上使用 UnblockNeteaseMusic

我觉得这个作者的语言表达能力很有问题,然后带着一大批用户一起跟他语焉不详(

Prerequisites

Shadowrocket
一个自己的域名
一台 VPS

正文

由于 iOS 在请求第三方音源的时候,会默认使用 https 而非 http 做请求[1],因此需要使用 -e 参数是定 endpoint。然后因为一些我也搞不清(也没人写)的原因(大概是 UnblockNeteaseMusic 使用了 MITM?),在使用 endpoint 参数的时候,要么安装作者提供的描述文件,要么需要自己签发证书。

假如不想安装描述文件,按照如下几个步骤操作:

  • 开启 UnblockNeteaseMusic 并监听公网端口
node path/to/UnblockNeteaseMusic/app.js -p <PORT> -o kuwo qq xiami migu -a 0.0.0.0 -e https://<YOUR_DOMAIN>

-o 参数的顺序可以自行选择,注意这里不能开启 -s,否则 Windows 客户端无法正常登录(我觉得是白名单的问题)

  • 创建 nginx vhost,签发 Let’s Encrypt 证书,并修改配置文件

如果使用 oneinstack 这样的一键包,直接创建一个 vhost 然后去改配置文件即可,改好的配置文件长这样

server {
  listen 80;
  listen [::]:80;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ssl_certificate <YOUR_CRT_FILE>;
  ssl_certificate_key <YOUR_KEY_FILE>;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on;
  ssl_stapling_verify on;
  server_name <YOUR_DOMAIN>;
  access_log <YOUR_LOG_FILE> combined;
  index index.html index.htm index.php;
  root <PATH_TO_YOUR_ROOT_DIR>;
  if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
  
  location /.well-known {
  }

  location /shadowrocket-netease-rules.conf {
  }

  location / {
    proxy_pass http://localhost:<PORT>;
  }
}

这里第一个 location 是为了方便 acme.sh 签发证书做域名校验;
第二个是可以在同一个域名下放入 Shadowrocket 的配置文件,然后直接订阅,我自己的配置文件放在这里(参考了 lolico.me 的配置)
第三个是为了把所有对这个域名的请求转发到 UnblockNeteaseMusic 的本体[2],但是根据我的测试来看,似乎一点用都没有。在设置了代理之后,所有的请求是以 HTTP CONNECT 的方式发出的,所以需要的是 forward proxy 而非这里的 reverse proxy。但是在这个场景下,我们需要的只是类似于端口转发的操作,nginx 并没法支持这样的行为,所以实在是弄不懂为什么要这样写。

  • 安装 Shadowrocket 并且添加一个节点做 HTTP 代理,只需要填写服务器域名和代理程序本体监听的端口就可以了,不要写入 443 或者 80 这些 nginx 监听的端口

所以到头来,需要多终端多网络环境使用,且终端没有条件跑这个脚本的情况下,似乎无论如何都要把这个代理程序本体放在公网上。

Reference

  1. https://github.com/nondanee/UnblockNeteaseMusic/issues/368
  2. https://github.com/nondanee/UnblockNeteaseMusic/issues/65
  3. https://lolico.me/2020/03/23/unblock-netease-music/
  4. https://github.com/nondanee/UnblockNeteaseMusic

发表评论

电子邮件地址不会被公开。