UnblockNeteaseMusic
UnblockNeteaseMusic copied to clipboard
iOS 食用指南
项目作者注: 此方案使用公网可信任 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 转发音源,请检查你的启动参数是否正确(不要指定第二个端口号)
歌曲不存在
- 歌曲不存在应该是资源库里面没有匹配到,你可以尝试换几首热门歌曲测试
@onewayticket255 是这个版本吗?我的可以播放
@onewayticket255 那应该是服务器问题吧 我用的腾讯云
所以ios使用是要一直开着VPN嘛,这样不会比较耗电嘛
@459217974 你可以先把你想听的歌下载到本地 之后就不用开了 需要的时候再开
请问一下 你的iOS网易云客户端版本号
ios 就是刚打开应用的那一会可以用,听了一首歌就不行了,就是按照指南来弄的,电脑很稳定
@onewayticket255 我用的最新版 6.1.1
@zqcccc 不能用之后你看看你的代理是不是断开连接了(偶尔会自动断开) 或者尝试断开重连并重启网易云 然后去服务器看日志 客户端如果代理成功后日志会刷的非常快
安卓也有类似的症状:刚打开的一会儿可以用,过一会儿就不行了(不会走代理了)
目前是路由器 dnsmasq 指定解析,设备使用路由器递归 dns。
本地解析 httpdns 的域名有两个 ip 结果,在路由器已屏蔽。
所以我怀疑是不是其有其他 httpdns,或者其他类似机制在客户端内部更新解析。
改日我抓包一下看看
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配置大概这样...
亲测成功,推荐大家在VPS上用宝塔面板,一键安装LNMP,然后建站,申请个低价域名,第一年最多也就10RMB,宝塔支持申请https免费ssl证书,期限是一年,强制https,而且Nginx直接有配置选项,不用麻烦找,在宝塔安装pm2管理器,后台运行node项目更方便。整个流程下来,除了申请域名需要实名认证审核需要一天多时间,其他copy老哥代码基本是傻瓜式操作,我用的jp服务器,512M内存Centos 7,10G硬盘,既用来FQ又挂网易云,完全够用。
前面两个怎么弄啊,小白根本看不懂啊~给个详细教程好么?
我发现一个BUG,在IOS端的歌手的所有歌曲列表是灰色的,但是在专辑列表里是能播放的。
https://github.com/nondanee/UnblockNeteaseMusic/issues/65#issuecomment-493309851
iOS的热门单曲链接和其他平台不一样。不过不是很影响使用。
@Anopia 是个 BUG,以后这样的问题新开一个 issue 吧(明晚修)
~~我试了下,网易云 iOS 6.2.0 不转发音源就可以用==~~ ~~使用 WLAN 代理,手动和自动都行~~ 不对,仅限网易自己的源,QQ 的还是要转发==
~我试了下,网易云 iOS 6.2.0 不转发音源就可以用==~ ~使用 WLAN 代理,手动和自动都行~ 不对,仅限网易自己的源,QQ 的还是要转发==
大佬,针对小白搞一个教程可以么,ios,真心不会操作啊
@1047958328 没有域名的话不建议折腾 有域名要签证书的话推荐用 acme.sh 比较方便,nginx 配置直接复制上面 @u3u 就行了 我没有义务什么都教啊(这其实就是搭建网站的步骤,善用搜索)
感觉网易云自己的源和别的源被区别对待可能是因为 response.headers 里什么标记字段,我找不出来==
@onewayticket255 我又不是网易员工==我咋知道 因为不管是 qq 源还是网易源都是被包装在 music.163.com/package/ 后面的 除了 response headers,这两个请求没有任何区别
还有一个问题
我发现我签 CA 证书的时候少写了 CN
,导致在 iOS 上不被当作 root CA,而无法手动信任
https://www.thesslstore.com/blog/trust-manually-installed-root-certificates-in-ios/ https://support.apple.com/zh-cn/HT204477
可能信任了以后就能用自签证书了?我试试看
还有一个问题 我发现我签 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 因为我的 CA 证书里漏了 CN(common name) ,所以虽然"描述文件"里有,但"证书信任设置"看不到,也就没法信任
@onewayticket255 试过了,重新签了证书,手动信任后,HTTPS API 请求可以直接 MITM,不需要降级 音源 endpoint 会被自动升到 https,也可以正常播放,QQ 源播放正常
之后 iOS 应该不需要 endpoint 了
@1047958328 没有域名的话不建议折腾 有域名要签证书的话推荐用 acme.sh 比较方便,nginx 配置直接复制上面 @u3u 就行了 我没有义务什么都教啊(这其实就是搭建网站的步骤,善用搜索)
要是能明白就不追着您问了。您辛苦,我不懂,撤了。打扰您了。
@1047958328 已经不需要 endpoint 了,不需要转发音源了,想试的话可以试一下
- 更新代码
- 安装新的 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 端口),在 WiFi 设置里开启 http 代理,手动,填 IP 端口号 port1
-
v0.16.0 及以上版本因音源默认不通过服务器转发,需要增加
-e http://music.163.com
或-e https://music.163.com
让音源请求通过服务器 (两种-e
哪个能用自行测试下)
@1047958328 已经不需要 endpoint 了,不需要转发音源了,想试的话可以试一下
- 更新代码
- 安装新的 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 端口),在 WiFi 设置里开启 http 代理,手动,填 IP 端口号 port1
劳您费心了。谢谢您。我对编程一类的一窍不通,搞了好几天,除了搞到了域名和ssl以外没任何进展。不会配置转发音源一类的。 这个确实简单多了。可是第一步和第四步,真的抱歉,不明白怎么做。更新代码怎么做?启动命令又是哪个……唉,可能和这个项目无缘吧。