UnblockNeteaseMusic icon indicating copy to clipboard operation
UnblockNeteaseMusic copied to clipboard

iOS 食用指南

Open u3u opened this issue 5 years ago • 166 comments

项目作者注: 此方案使用公网可信任 https endpoint 解决可以匹配但无法播放的问题 如 README 中描述,解决方法不唯一,具体见 #56 "✳ 配置 https 转发" 部分

前提步骤(小白请点这里,老司机请绕道)

下面的命令按照顺序复制执行即可

安装 Node.js

# 先安装 nvm 方便管理多版本 node
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash

# 然后再安装 node
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/ nvm install 8.9.0

# 测试
node -v

安装 Yarn [可选]

# 先安装 yvm 方便管理多版本 yarn
curl -s https://raw.githubusercontent.com/tophat/yvm/v2.4.3/scripts/install.sh | INSTALL_VERSION="v3.6.2" bash

# 然后再安装 yarn
yvm install latest

# 测试
yarn -v

安装 PM2 用于部署服务

yarn global add pm2 # 或者使用 npm -g install pm2

克隆并进入项目根目录

git clone https://github.com/nondanee/UnblockNeteaseMusic.git /var/www/UnblockNeteaseMusic && cd /var/www/UnblockNeteaseMusic

修改服务器配置推荐使用 VSCode 配合 Remote Development 扩展使用

方法一:使用证书

安装新的 CA 证书,设备上点击链接应该会自动跳转

https://raw.githubusercontent.com/nondanee/UnblockNeteaseMusic/master/ca.crt

在设置 > 通用 > 关于本机 > 证书信任设置,手动信任证书

官方教程:https://support.apple.com/zh-cn/HT204477

启动服务

测试服务:

# 启动命令改为 node app.js -p port1:port2 (port2 是用来内部转发的 https 端口)
node app.js -s -e https://music.163.com -p 8080:8081

使用 pm2 部署:

pm2 start app.js --name UnblockNeteaseMusic -- -s -e https://music.163.com -p 8080:8081
pm2 常用命令
pm2 stop UnblockNeteaseMusic # 停止服务
pm2 restart UnblockNeteaseMusic # 重启服务
pm2 pull UnblockNeteaseMusic # 更新服务到最新代码
pm2 show UnblockNeteaseMusic # 查看服务的参数信息
pm2 log UnblockNeteaseMusic # 查看服务日志
pm2 ls # 查看已部署的服务列表
pm2 monit # 监控服务状态
pm2 flush # 清理所有日志文件
pm2 update # 更新 pm2 状态

方法二:配置 https endpoint 转发音源

配置 Nginx 转发音源

server {
  listen 443;
  server_name your_domain; # 改为你自己的域名

  ssl on;
  ssl_certificate 1_your_domain_bundle.crt; # 改为自己申请得到的 crt 文件的名称
  ssl_certificate_key 2_your_domain.key; # 改为自己申请得到的 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;

  location / {
    proxy_pass http://localhost:8080; # 代理到 Unblock 服务地址
  }
}

启动服务

测试服务:

node app.js -s -e https://<转发音源的域名>

使用 pm2 部署:

# 香港服务器需要指定 `-o joox` 参数
pm2 start app.js --name UnblockNeteaseMusic -- -s -e https://<转发音源的域名> -o joox

下载 Shadowrocket 并配置 Unblock 代理

项目作者注: 没有强制要求 Shadowrocket,设置 WLAN 代理也可以

  • 右上角加号添加节点
  • 类型选择 HTTP
  • 服务器填写你的服务器公网 IP
  • 端口填写你启动服务的端口号(默认为 8080)
  • 然后底部找到配置 点击本地文件 -> default.conf -> 编辑配置
  • 添加三条规则 选项选择你刚刚添加的节点
    • USER-AGENT: NeteaseMusic*
    • DOMAIN-SUFFIX: 163.com
    • DOMAIN-SUFFIX: 126.net

可以在腾讯云申请免费 SSL 证书:https://console.cloud.tencent.com/ssl

常见问题

网络不给力
  • 如果你使用证书,请检查证书是否已信任:https://support.apple.com/zh-cn/HT204477
  • 如果你使用 https endpoint 转发音源,请检查你的启动参数是否正确(不要指定第二个端口号)
歌曲不存在
  • 歌曲不存在应该是资源库里面没有匹配到,你可以尝试换几首热门歌曲测试

u3u avatar May 01 '19 13:05 u3u

E1444D56-89F2-4124-ADF1-24436B21E517 A4F6F27E-19A5-4033-808B-1EC5BEAADD0B

@onewayticket255 是这个版本吗?我的可以播放

u3u avatar May 05 '19 12:05 u3u

@onewayticket255 那应该是服务器问题吧 我用的腾讯云

u3u avatar May 05 '19 12:05 u3u

所以ios使用是要一直开着VPN嘛,这样不会比较耗电嘛

459217974 avatar May 06 '19 03:05 459217974

@459217974 你可以先把你想听的歌下载到本地 之后就不用开了 需要的时候再开

u3u avatar May 06 '19 11:05 u3u

请问一下 你的iOS网易云客户端版本号

onewayticket255 avatar May 06 '19 14:05 onewayticket255

ios 就是刚打开应用的那一会可以用,听了一首歌就不行了,就是按照指南来弄的,电脑很稳定

zqcccc avatar May 06 '19 14:05 zqcccc

@onewayticket255 我用的最新版 6.1.1

u3u avatar May 07 '19 00:05 u3u

@zqcccc 不能用之后你看看你的代理是不是断开连接了(偶尔会自动断开) 或者尝试断开重连并重启网易云 然后去服务器看日志 客户端如果代理成功后日志会刷的非常快

u3u avatar May 07 '19 00:05 u3u

安卓也有类似的症状:刚打开的一会儿可以用,过一会儿就不行了(不会走代理了)

目前是路由器 dnsmasq 指定解析,设备使用路由器递归 dns。

本地解析 httpdns 的域名有两个 ip 结果,在路由器已屏蔽。

所以我怀疑是不是其有其他 httpdns,或者其他类似机制在客户端内部更新解析。

改日我抓包一下看看

violarulan avatar May 07 '19 18:05 violarulan

node app.js -e https://your_domain
HTTP Server running @ http://0.0.0.0:8080
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443
MITM > 59.111.160.195
TUNNEL - 59.111.160.195:443

一直这样循环....

server {
  listen 443;
  server_name your_domain;

  ssl on;
  ssl_certificate /usr/local/nginx/conf/ssl/1_your_domain_bundle.crt;
  ssl_certificate_key /usr/local/nginx/conf/ssl/2_your_domain.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;

  location / {
        proxy_pass http://localhost:8080; # 代理到 Unblock 服务地址
    }

}

nginx配置大概这样...

Nannnnnnnn avatar May 08 '19 09:05 Nannnnnnnn

亲测成功,推荐大家在VPS上用宝塔面板,一键安装LNMP,然后建站,申请个低价域名,第一年最多也就10RMB,宝塔支持申请https免费ssl证书,期限是一年,强制https,而且Nginx直接有配置选项,不用麻烦找,在宝塔安装pm2管理器,后台运行node项目更方便。整个流程下来,除了申请域名需要实名认证审核需要一天多时间,其他copy老哥代码基本是傻瓜式操作,我用的jp服务器,512M内存Centos 7,10G硬盘,既用来FQ又挂网易云,完全够用。 QQ截图20190512210915 QQ截图20190512211010 QQ截图20190512211207 QQ截图20190512211604

app-AZ avatar May 12 '19 13:05 app-AZ

前面两个怎么弄啊,小白根本看不懂啊~给个详细教程好么?

1047958328 avatar May 13 '19 06:05 1047958328

我发现一个BUG,在IOS端的歌手的所有歌曲列表是灰色的,但是在专辑列表里是能播放的。 微信图片_20190517114006 微信图片_20190517115109

HeavyLuna avatar May 17 '19 03:05 HeavyLuna

https://github.com/nondanee/UnblockNeteaseMusic/issues/65#issuecomment-493309851

iOS的热门单曲链接和其他平台不一样。不过不是很影响使用。

onewayticket255 avatar May 17 '19 04:05 onewayticket255

#65 (comment)

iOS的热门单曲链接和其他平台不一样。不过不是很影响使用。

我之前一直都在拿那个界面测试。。。测试到绝望。。。后来才发现在专辑里能正常听。。。。

HeavyLuna avatar May 17 '19 04:05 HeavyLuna

#65(评论)

iOS版的热门单曲链接和其他平台不一样。不过不是很影响使用。

大神,怎么弄的啊,求教~

1047958328 avatar May 17 '19 07:05 1047958328

#65(评论) iOS版的热门单曲链接和其他平台不一样。不过不是很影响使用。

大神,怎么弄的啊,求教~

可以无视就好了,去专辑里听,或者去专辑里下载。

HeavyLuna avatar May 17 '19 07:05 HeavyLuna

@Anopia 是个 BUG,以后这样的问题新开一个 issue 吧(明晚修)

nondanee avatar May 17 '19 15:05 nondanee

~~我试了下,网易云 iOS 6.2.0 不转发音源就可以用==~~ ~~使用 WLAN 代理,手动和自动都行~~ 不对,仅限网易自己的源,QQ 的还是要转发==

nondanee avatar May 18 '19 14:05 nondanee

~我试了下,网易云 iOS 6.2.0 不转发音源就可以用==~ ~使用 WLAN 代理,手动和自动都行~ 不对,仅限网易自己的源,QQ 的还是要转发==

大佬,针对小白搞一个教程可以么,ios,真心不会操作啊

1047958328 avatar May 18 '19 15:05 1047958328

@1047958328 没有域名的话不建议折腾 有域名要签证书的话推荐用 acme.sh 比较方便,nginx 配置直接复制上面 @u3u 就行了 我没有义务什么都教啊(这其实就是搭建网站的步骤,善用搜索)

nondanee avatar May 18 '19 15:05 nondanee

感觉网易云自己的源和别的源被区别对待可能是因为 response.headers 里什么标记字段,我找不出来==

nondanee avatar May 18 '19 15:05 nondanee

@onewayticket255 我又不是网易员工==我咋知道 因为不管是 qq 源还是网易源都是被包装在 music.163.com/package/ 后面的 除了 response headers,这两个请求没有任何区别

nondanee avatar May 18 '19 15:05 nondanee

还有一个问题 我发现我签 CA 证书的时候少写了 CN,导致在 iOS 上不被当作 root CA,而无法手动信任

https://www.thesslstore.com/blog/trust-manually-installed-root-certificates-in-ios/ https://support.apple.com/zh-cn/HT204477

可能信任了以后就能用自签证书了?我试试看

nondanee avatar May 18 '19 15:05 nondanee

还有一个问题 我发现我签 CA 证书的时候少写了 CN,导致在 iOS 上不被当作 root CA,而无法手动信任

https://www.thesslstore.com/blog/trust-manually-installed-root-certificates-in-ios/ https://support.apple.com/zh-cn/HT204477

可能信任了以后就能用自签证书了?我试试看

iOS 证书签了 在Certificate Trust Setting 不显示(旧版本成功过,不过iOS12.3之后就没成功过,很迷)

onewayticket255 avatar May 18 '19 15:05 onewayticket255

@onewayticket255 因为我的 CA 证书里漏了 CN(common name) ,所以虽然"描述文件"里有,但"证书信任设置"看不到,也就没法信任

nondanee avatar May 18 '19 15:05 nondanee

@onewayticket255 试过了,重新签了证书,手动信任后,HTTPS API 请求可以直接 MITM,不需要降级 音源 endpoint 会被自动升到 https,也可以正常播放,QQ 源播放正常

之后 iOS 应该不需要 endpoint 了

nondanee avatar May 18 '19 16:05 nondanee

@1047958328 没有域名的话不建议折腾 有域名要签证书的话推荐用 acme.sh 比较方便,nginx 配置直接复制上面 @u3u 就行了 我没有义务什么都教啊(这其实就是搭建网站的步骤,善用搜索)

要是能明白就不追着您问了。您辛苦,我不懂,撤了。打扰您了。

1047958328 avatar May 19 '19 01:05 1047958328

@1047958328 已经不需要 endpoint 了,不需要转发音源了,想试的话可以试一下

  1. 更新代码
  2. 安装新的 CA 证书,设备上点击链接应该会自动跳转https://raw.githubusercontent.com/nondanee/UnblockNeteaseMusic/master/ca.crt
  3. 在设置 > 通用 > 关于本机 > 证书信任设置,手动开启证书。官方教程:https://support.apple.com/zh-cn/HT204477
  4. 启动命令改为 node app.js -p port1:port2(port2 是用来内部转发的 https 端口),在 WiFi 设置里开启 http 代理,手动,填 IP 端口号 port1
  5. v0.16.0 及以上版本因音源默认不通过服务器转发,需要增加 -e http://music.163.com-e https://music.163.com 让音源请求通过服务器 (两种 -e 哪个能用自行测试下)

nondanee avatar May 19 '19 01:05 nondanee

@1047958328 已经不需要 endpoint 了,不需要转发音源了,想试的话可以试一下

  1. 更新代码
  2. 安装新的 CA 证书,设备上点击链接应该会自动跳转https://raw.githubusercontent.com/nondanee/UnblockNeteaseMusic/master/ca.crt
  3. 在设置 > 通用 > 关于本机 > 证书信任设置,手动开启证书。官方教程:https://support.apple.com/zh-cn/HT204477
  4. 启动命令改为 node app.js -p port1:port2(port2 是用来内部转发的 https 端口),在 WiFi 设置里开启 http 代理,手动,填 IP 端口号 port1

劳您费心了。谢谢您。我对编程一类的一窍不通,搞了好几天,除了搞到了域名和ssl以外没任何进展。不会配置转发音源一类的。 这个确实简单多了。可是第一步和第四步,真的抱歉,不明白怎么做。更新代码怎么做?启动命令又是哪个……唉,可能和这个项目无缘吧。

1047958328 avatar May 19 '19 01:05 1047958328