nondanee/UnblockNeteaseMusic

进阶配置

nondanee opened this issue · 116 comments

除了基本的命令行参数,在源码中还预留了一些可配置位置
如果有能力,可以了解一下这个部分

自签证书

macOS 客户端 700 以上版本无法通过握手后返回空数据的方式降级 https 请求 (如有别的降级方式,请告知我),Linux 客户端 1.2 以上版本有同样问题,其它平台暂时还未遇到

可以直接换用旧版本
http://d1.music.126.net/dmusic/NeteaseMusic_2.0.0_700_web.dmg
http://d1.music.126.net/dmusic/NeteaseMusic_2.0.0_690_web.dmg
http://d1.music.126.net/dmusic/NeteaseMusic_1.5.10_636_web.dmg

新版通过自签证书直接代理 https 流量能够解决此问题 (同时支持 hosts 模式和代理模式)
可以直接使用仓库里的证书,若需自己签发证书,步骤如下 (需要用到 OpenSSL)
仓库未公开 CA 私钥,若担心作者作恶,请自行创建 CA 签发证书,感谢 @ITJesse 提醒 #166

# 生成 CA 私钥
openssl genrsa -out ca.key 2048

# 生成 CA 证书 ("YOURNAME" 处填上你自己的名字)
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1825 -out ca.crt -subj "/C=CN/CN=UnblockNeteaseMusic Root CA/O=YOURNAME"

# 生成服务器私钥
openssl genrsa -out server.key 2048

# 生成证书签发请求
openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/L=Hangzhou/O=NetEase (Hangzhou) Network Co., Ltd/OU=IT Dept./CN=*.music.163.com"

# 使用 CA 签发服务器证书
openssl x509 -req -extfile <(printf "extendedKeyUsage=serverAuth\nsubjectAltName=DNS:music.163.com,DNS:*.music.163.com") -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

上述步骤完成后

将服务器私钥 (server.key) 和服务器证书 (server.crt) 拷贝到仓库中覆盖原有文件 (若使用 docker,可通过添加 -v /path/to/server.crt:/usr/src/app/server.crt -v /path/to/server.key:/usr/src/app/server.key 参数映射本地路径覆盖原有文件),再将 CA 证书 (ca.crt) 安装到系统;如果不自行签发,直接安装仓库里的 CA 证书 (ca.crt) 即可

CA 证书需要手动配置为信任,切记
(macOS 上信任证书的简便步骤 👉 #463)
(macOS 上若手动安装证书无效,请设置 Safari 通过代理后打开 music.163.com,点击 "继续访问" 安装证书 👉 #593 (comment))
(iOS 上容易遗漏的步骤 👉 https://support.apple.com/zh-cn/HT204477)

之后在启动命令中增加 https 监听端口,格式为 -p <http port>:<https port>,hosts 模式应为 80:443,代理模式随意,两个端口号不同即可

自签证书下网易云网页版是可用的,但是阻止变灰无效,因为网页内嵌加密,需要脚本配合

国内中继

测试过除咪咕外,QQ、虾米、百度、酷狗、酷我 API 都有海外墙,修改请求头无法绕过,必须通过国内代理,而音源文件本身没有海外请求限制,不需要代理。
考虑大陆服务器带宽比较珍贵,全局代理代价太大,增加了中继 "RPC"

目前仅提供 QQ 音源的公共中继服务
因 QQ 128k 音源可以直接使用测试 vkey,默认未启用中继服务

其它音源需要从国内请求的部分都预留了降级逻辑,不过在源码里屏蔽了,需要注释掉这个限制

if(path != 'qq/ticket') return Promise.reject()

中继服务器的源码为 bridge.js,部署后修改 insure.js 的 host 变量为自己的服务器地址即可

P.S. 来自套路云、良心云的请求会被虾米拒绝

Hi,我使用仓库里面默认的证书,安装到Mac中,然后经用surge代理,surge端显示无效的证书链是个啥情况?(Mac客户端没升级之前一直都是OK的)

@iDesperad0
需要在 "钥匙串" 里信任根证书,此步骤是否遗漏?
装完证书应该需要重启一下应用,chrome是这样的好像。

妈耶,是我的疏忽!因为之前一直用代理模式而把端口设置成8080,改成hosts模式忘了改回80了,刚才改成80已经OK了!只不过以前一直用的代理模式已经行不通了,感觉有点奇怪,有时间我再琢磨琢磨,也可能是surge的锅。
总之不论哪个方法最后还是成了,而且320Kbps是真香啊!非常非常感谢你哈!

@iDesperad0 你可以测试一下用系统代理,看看有没有问题,我试过应该是可以的。

QQ的音源真的很迷啊,128K真的难以下咽。忍住不用QQ音乐越来越难。

是不是QQ的音源又挂了😂?刚才突然发现好多歌曲不能放了,以为hosts也失效了,折腾老半天,看log发现小部分歌使用了千千静听音源,其他大部分QQ音乐独占的资源几乎全失效了。

@iDesperad0
最新的 release (包括 docker) 上的挂了,已经好几天了(星期二到现在)
最新的 commit,M500 是没问题的
以后不会再管 QQ 高音质了,换一个封一个......

@nondanee
哈哈,辛苦了,无奈QQ音乐占据着国内最大的版权比例😢。

@LeticiaAnna
不支持,README 里写了,设置 -t user:password 用不了(当然你可以试试看,switchyomega 里可以用)
上游代理也不支持用户名密码

不好意思我手抖把你的评论删掉了==

我这里测试卸载干净再装Mac 2.0(730),直连基本都用http
Snipaste_2019-05-10_16-11-17.png

CleanMyMac卸载原始版本再安装    
版本                直连                   连unblockserver
1.5.10 636      music.163.com:443      可以降级 https 请求
2.0    700      music.163.com:443      不可以降级 https 请求
2.0    730      http

覆盖升级                            直连           连unblockserver
1.5.10 636  --> 2.0 700      music.163.com:443  不可以降级 https 请求
2.0    700  --> 2.0 730      http

这是今天下午测的。这结果很迷,和之前我的测试结果不太一样。

进阶成功,我想问一下老哥,-e http://xxx.xxx:999 接域名的话,能不能改你的js文件来进行操作,我想用PM2来进行node后台,但是找不到pm2 脚本配置命令该怎么写,如果能改到js文件里面那我就直接PM2 app.js就可以了,希望老哥能说一下js文件改哪里

@app-AZ
pm2 start app.js -- -e http://xxx.xxx:999

@onewayticket255
我自己没测过 726 和 730,如果默认 http 的话那也挺好的,方便 MITM,之后我去确认一下

但是 700 我这边结果还是:直接安装无法降级,在 636 降级了,覆盖上来就可以降级
关键点不是覆盖,而是在 636 降级 http 成功了(如果在 636 没降级过,覆盖 700 也还是不能降级的)

其实装了证书的话,降不降级就无所谓了

降级和自签证书这两个 trick 都很容易封的,且用且珍惜


Hosts模式,CA证书信任了,node app.js -p 80:443 -f 103.126.92.132启动后,列表不灰了,但是播放不出来,请问什么原因?日志中的链接我在浏览器是秒开的,版本774

@CrazyMelody
看 log 的话,443 的端口没有被请求,有的话应该是 MITM > music.163.com (ssl)
你试一下在 chrome 里打开 https://music.163.com 看看会不会提示不安全,期间我换过一次证书不知道你有没有重新安装

因为 isure.stream log 说明是有请求的
猜测可能被 QQ ban 了?(user-agent 会被查出来) 如果可以的话

return resolve(ctx.proxyRes = proxyRes)

在这个位置 print 一下 url 和 proxyRes.statusCode 试一下

抱歉我没试测试 774 版本,你可以新建一个 issue 看看别人的反馈

@CrazyMelody
看 log 的话,443 的端口没有被请求,有的话应该是 MITM > music.163.com (ssl)
你试一下在 chrome 里打开 https://music.163.com 看看会不会提示不安全,期间我换过一次证书不知道你有没有重新安装

因为 isure.stream log 说明是有请求的
猜测可能被 QQ ban 了?(user-agent 会被查出来) 如果可以的话

return resolve(ctx.proxyRes = proxyRes)

在这个位置 print 一下 url 和 proxyRes.statusCode 试一下
抱歉我没试测试 774 版本,你可以新建一个 issue 看看别人的反馈

感谢回复,找到问题了,因为公司网络有个诡异的问题,用chrome打不开大部分https网站,得科学上网才可以,用safari则秒开。。。我把网络换成流量就正常了

#48 (comment)

首先谢谢你写的破解代码。想问一下你这个安装证书操作 具体在centos7下怎么操作啊?

@bigNeoneo
服务器不需要安装证书,要使用代理的客户端才需要。
那么我默认你问的是 linux 下的网易云客户端怎么使用
我测过 linux 客户端不会信任安装系统的证书,所以装了也没用,就别装了
启动时增加 --ignore-certificate-errors 直接忽略掉证书错误,README 里有写

其实我是想问,这样启动服务后,我在windows客户端设置代理就直接用了,很完美,可是我在IOS设备,用potasto直接挂VPN使用,就无法使用,看控制台也有显示
image
image
求解答,再次感谢

#48 (comment)

所以就是一直不升级。。。?

请教一个问题,就是服务器端怎样配置可以让音源文件不走代理?因为本身音源不需要检测地区的话,我期望的是服务器端只做链接修改,音源的下载还是由客户端完成。

在服务器端,我的启动方法是node app.js -s -p 端口
在安卓上,我的配置方法是打开Wifi设置,修改PAC为http://服务器IP:端口/proxy.pac。结果可以下载周董的歌,但下载速度只有100K/s,所以我猜测下载文件是走的服务端(因为我的服务器是最低配所以带宽应该是比较小)。

@Aqua-Dream
是的音源(下载)走服务器
可以不走代理,按他这样改就行了 #143 (comment)

不过安卓(和 macOS)端下载前有一次预下载计算 MD5 的过程 (MD5 不正确无法正常下载),#98 #101
服务器带宽很小的话也比较慢 (累计下载两次)

@Aqua-Dream
我回旧版本测了下好像并没有我以前顾虑的问题,下个版本我会改过来

@Aqua-Dream
是的音源(下载)走服务器
可以不走代理,按他这样改就行了 #143 (comment)

不过安卓(和 macOS)端下载前有一次预下载计算 MD5 的过程 (MD5 不正确无法正常下载),#98 #101
服务器带宽很小的话也比较慢 (累计下载两次)

貌似确实有效,感谢

help

我是按照步骤来的呀,怎么就这样了

@lostimever
按照什么步骤,请简单说一下
用的 proxifier?要不你看一下这个 #91

@lostimever
按照什么步骤,请简单说一下
用的 proxifier?要不你看一下这个 #91

感谢,我这边好了,我简单说一下我这边配置,你以后可以做参考:
1、服务器上用supervisord 作进程管理;
2、macOS Mojave 10.14.5 (18F203);
3、Proxifier for Mac v2.22
4、网易云 Version 2.1.0 (782)

iOS还没有搞定,以后再研究一下

大佬,请问按照node app.js -p 65535这种方式设置后,现在是不是不能用了?
win端网易音乐内歌曲由灰变黑,但是播放时总是显示失败。

大佬,请问按照node app.js -p 65535这种方式设置后,现在是不是不能用了?
win端网易音乐内歌曲由灰变黑,但是播放时总是显示失败。

我5月的时候通过这种方式还能在win端网易音乐用的

@auntspock
不会啊,刚试了没问题
log 没有显示匹配结果吗?
客户端版本和 unblock server 版本分别是多少?
测试用了哪首歌?歌曲 id 是多少?

@auntspock
不会啊,刚试了没问题
log 没有显示匹配结果吗?
客户端版本和 unblock server 版本分别是多少?
测试用了哪首歌?歌曲 id 是多少?

谢谢大大回复,我截图如下可能更好说明:
1、centos7 64位,采用的0.16.0版release。
2、在win端网易客户端启用全局代理后,服务器日志如下


3、复制日志中http开头的地址在浏览器打开可以打开播放和下载。

@auntspock
不要用 -s
或者追加 -e http://music.163.com

@auntspock
不要用 -s
或者追加 -e http://music.163.com

意思是删除-s对吧,好的我试试

终于可以了,但是等了接近3分钟才能播放,是什么原因呢,大大,我是不是应该在-o参数里,把qq、虾米放到前面?

不知道啊
如果之前不会等 3 分钟的话你可以用上一个版本试试

还有
加了 -e http://music.163.com 的话
是可以用 -s

好的,那我又加上-s。
上个版本是指0.15.2对吗,我试试

会不会跟我没有开bbr有关

@auntspock
这个你自己测试吧
反正 0.16.0 加上 -e http://music.163.com 就和 0.15.2 的默认配置一致了 (在代码逻辑上)

好的谢谢大大

@auntspock
这个你自己测试吧
反正 0.16.0 加上 -e http://music.163.com 就和 0.15.2 的默认配置一致了 (在代码逻辑上)
另外我需要在服务器上开bbr加速吗

大大,使用win端网易的时候,是不是每次用之前都需要去服务器执行一次node app.js -s -p 16070 -o xiami qq migu netease baidu kugou kuwo joox命令?刚刚执行后出现如下提示

@auntspock
不需要,去找个进程守护工具 #136
报错说端口被占用了,应该是之前就启动了吧

好的大大,装了个supervisord。
1、如果我要调整音源的搜索顺序,该执行哪个步骤呢?
2、如果在手机使用该服务,是在手机的网络设置-v**选项里面填入网址和端口吗?

是在截图中填写吗?填好也保存了,但是没有办法选中启用呢

@auntspock 你提的问题跟此 issue 没有关系,麻烦新开一个 issue

@nondanee 你好,关于中继方面,还是不是很懂,想请教下
现在有两台服务器:
假设国内服务器ip:192.168.12.13:7654
国外的是172.16.70.18:3688

按照中继 "RPC"的配置,已经注释provider/insure.js里的
if(path != 'qq/ticket') return Promise.reject() 这行

在bridge.js没看到host变量,不太清楚"部署后修改 host 变量为自己的服务器地址即可"是在哪里改
然后我用node app.js -p3688 -u http://192.168.12.13:7654
在网易云里面设置http代理:172.16.70.18:3688
原来听不了的歌曲可以听了,但是感觉带宽还是和直接用国内的一样,缓冲慢,感觉整个都是跑了代理了,而不是查询走代理,播放走国外的
是哪里没有配对吗?

@yevision94
启动中继 server 用 node bridge.js
host 变量在 insure.js 里

const host = 'https://public.nondanee.tk'

不需要加 -u
-u 是在使用多级代理,确实跟直接用国内一样
现在如果用 PAC 或者 hosts 模式,播放已经默认不走代理了

哪些歌原来不能听啊?

一开始把insure.js的host改了之后测试可以听了,感谢!
另外是要先node bridge.js,再node app.js吧,刚尝试只运行bridge不行
之前是董真和心然的海棠无香刚出那会听不了,会变成其它不知名的歌
补充:刚试了用原来默认的配置不走中继也能听了,不知道什么时候好的,现在不确定中继是不是行了,笑哭

@yevision94
bridge.js 运行在国内,app.js 随便运行在哪都行,host 是 bridge 的地址
默认配置里 neteaseqq 的音源是不用中继的
如果不确定是不是中继服务的效果,你可以自己请求下这个 url 看看

return request('GET', `${host}/${path}?${query}`)

@nondanee 这样子说的话,实际是没用到中继。
node bridge.js这个也是用 -p 指定端口吗?
另外,发现RADWIMPS最新天气之子的专辑里的風たちの声(movie edit)听不了,变成了radwimps你的名字里面的一首歌,还有其它几首也是

@yevision94
node bridge.js 9000 这样,直接跟端口号
匹配的问题参考👉 #149
我看了下《風たちの声》在 QQ 音乐要付费
看了下这两种关键词搜索结果不一样

風たちの声 - RADWIMPS
https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=風たちの声%20-%20RADWIMPS

風たちの声 (Movie edit) - RADWIMPS
https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=風たちの声%20(Movie%20edit)%20-%20RADWIMPS

感觉是 QQ 音乐搜索关键词优化的问题......

@nondanee 懂了,中继顺利建起来了,感谢大佬指点!
ps:版权分散真是···有qq音乐绿砖,有时又喜欢网易云的体验,看来还是要等了,无奈

Hi~
客户端796

安装了CA证书
image

使用host模式
image

这样执行
image

客户端显示没有网络连接
是哪一步有误吗?

@FiShelly
改成这样子 -p 80:443 -f ...

@nondanee
ok! 谢谢。

根据 #22 (comment)

我自己签发了证书,但是127.0.0.2 未能解决本地nginx冲突问题
image

@kossel
好吧我试了下也确实不行==,那你再给 nginx 加上 https 反代吧
或者让 nginx 不在 0.0.0.0

server {
        listen 127.0.0.1:80;
        server_name _;

        location / {
                proxy_pass http://127.0.0.1:XXX; # http 端口
                proxy_set_header HOST 'music.163.com';
        }
}
server {
	listen 127.0.0.1:443 ssl default_server;
	server_name _;

	ssl on;
	ssl_certificate <???>/server.crt;
	ssl_certificate_key <???>/server.key;

	ssl_session_timeout 10m;
	ssl_session_cache shared:SSL:10m;

	ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers 'AES128+EECDH:AES128+EDH';
	ssl_prefer_server_ciphers on;

	location / {
		proxy_pass https://127.0.0.1:XXXX; # https 端口
		proxy_set_header HOST 'music.163.com';
	}
}

@nondanee 反代到8081:8082,搞定!非常感谢 🙏 尝试了很多方法这是最完美不需要vpn 的方法 😄

@kossel
好吧我试了下也确实不行==,那你再给 nginx 加上 https 反代吧
或者让 nginx 不在 0.0.0.0

server {
        listen 127.0.0.1:80;
        server_name _;

        location / {
                proxy_pass http://127.0.0.1:XXX; # http 端口
                proxy_set_header HOST 'music.163.com';
        }
}
server {
	listen 127.0.0.1:443 ssl default_server;
	server_name _;

	ssl on;
	ssl_certificate <???>/server.crt;
	ssl_certificate_key <???>/server.key;

	ssl_session_timeout 10m;
	ssl_session_cache shared:SSL:10m;

	ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers 'AES128+EECDH:AES128+EDH';
	ssl_prefer_server_ciphers on;

	location / {
		proxy_pass https://127.0.0.1:XXXX; # https 端口
		proxy_set_header HOST 'music.163.com';
	}
}

本来想使用自签证书 直接使用mac连接使用的 但是mac上使用的clash没发加载证书,应该就不行了吧,于是想使用这种方法。

请问 这种nginx转发的方式 可以UnblockNeteaseMusic服务和nginx用两个服务器吗?还是只能用一个服务器?
另外是这种方式 使用网易音乐客户端的电脑还需要自签证书吗?

我现在的方式是 服务器上nginx 使用自己签发的证书 然后将生成的ca.crt、server.crt、server.key三个文件覆盖掉另一台服务器上UnblockNeteaseMusic程序里的对应文件 然后网站配置按你上面的代码设置了 http转发端口到UnblockNeteaseMusic服务器的4511,https转发到4522
然后在安装UnblockNeteaseMusic的服务器运行node app.js -p 4511:4512 -e https://url
现在mac和iphone 连接到UnblockNeteaseMusic服务器的 4511 列表显示正常 有版权歌也能听 但是无版权歌就显示“播放失败网络错误” 解析出来的qq音乐地址复制出来也可以播放
请问能帮忙看下是什么原因?谢谢

@htwyqjj
clash 不信任系统上安装的证书吗?我不太清楚

这种转发方式是 hosts 模式使用的,为解决端口冲突用,代理用不到。
可以用两个,也可以用一个
还是需要,macOS 客户端 2.X 有限制,回到 1.X 就没限制了

-e 不加试试看

@kossel
好吧我试了下也确实不行==,那你再给 nginx 加上 https 反代吧
或者让 nginx 不在 0.0.0.0

server {
        listen 127.0.0.1:80;
        server_name _;

        location / {
                proxy_pass http://127.0.0.1:XXX; # http 端口
                proxy_set_header HOST 'music.163.com';
        }
}
server {
	listen 127.0.0.1:443 ssl default_server;
	server_name _;

	ssl on;
	ssl_certificate <???>/server.crt;
	ssl_certificate_key <???>/server.key;

	ssl_session_timeout 10m;
	ssl_session_cache shared:SSL:10m;

	ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers 'AES128+EECDH:AES128+EDH';
	ssl_prefer_server_ciphers on;

	location / {
		proxy_pass https://127.0.0.1:XXXX; # https 端口
		proxy_set_header HOST 'music.163.com';
	}
}

本来想使用自签证书 直接使用mac连接使用的 但是mac上使用的clash没发加载证书,应该就不行了吧,于是想使用这种方法。

请问 这种nginx转发的方式 可以UnblockNeteaseMusic服务和nginx用两个服务器吗?还是只能用一个服务器?
另外是这种方式 使用网易音乐客户端的电脑还需要自签证书吗?

我现在的方式是 服务器上nginx 使用自己签发的证书 然后将生成的ca.crt、server.crt、server.key三个文件覆盖掉另一台服务器上UnblockNeteaseMusic程序里的对应文件 然后网站配置按你上面的代码设置了 http转发端口到UnblockNeteaseMusic服务器的4511,https转发到4522
然后在安装UnblockNeteaseMusic的服务器运行node app.js -p 4511:4512 -e https://url
现在mac 使用clash链接到UnblockNeteaseMusic服务器的 4511 列表显示正常 有版权歌也能听 但是无版权歌就显示“播放失败网络错误” 解析出来的qq音乐地址复制出来也可以播放
请问能帮忙看下是什么原因?谢谢

@htwyqjj
clash 不信任系统上安装的证书吗?我不太清楚

这种转发方式是 hosts 模式使用的,为解决端口冲突用,代理用不到。
可以用两个,也可以用一个
还是需要,macOS 客户端 2.X 有限制,回到 1.X 就没限制了

-e 不加试试看

你的意思是 我的电脑或者手机 还是要安装ca.crt证书才可以 是吗

@htwyqjj
macOS 上必须装证书,手机可以不装

@htwyqjj
macOS 上必须装证书,手机可以不装

好吧 我以为使用nginx 转发 就不需要安装证书了 原来还是需要的……那干吗还需要nginx转发这种方式啊……
另外我试了一下 不安装证书 手机端不能播放

@htwyqjj
macOS 上必须装证书,手机可以不装

感谢 兜兜转转 绕了一大圈子 mac安装自签证书 可以使用了
另外ios最新版应该也需要证书了 我昨天使用quantumtul使用 MITM 是可以使用的 今天删除了证书 不能播放了

@htwyqjj
我之前就回复你了啊 #48 (comment)

这种转发方式是 hosts 模式使用的,为解决端口冲突用,代理用不到。

iOS 如果不安装证书,则需要 "配置 https endpoint" #65
见 README 中的描述

iOS 客户端 (配置 https endpoint 或使用自签证书)

和这个的配置可能很像,但是不一样

@htwyqjj
我之前就回复你了啊 #48 (comment)

这种转发方式是 hosts 模式使用的,为解决端口冲突用,代理用不到。

iOS 如果不安装证书,则需要 "配置 https endpoint" #65
见 README 中的描述

iOS 客户端 (配置 https endpoint 或使用自签证书)

和这个的配置可能很像,但是不一样

但是我ios 没有安装证书 按照iOS 如果不安装证书,则需要 "配置 https endpoint" #65
这个来 不行啊

@htwyqjj
那也有可能的
我没试过新版客户端,README 截图用的是 6.0 好像

@htwyqjj
那也有可能的
我没试过新版客户端,README 截图用的是 6.0 好像

经测试 手机安装自签证书 无需quantumtul使用 MITM 即可使用
感谢你的解答!谢谢!

attr0 commented

国内中继

测试过除咪咕外,QQ、虾米、百度、酷狗、酷我 API 都有海外墙,修改请求头无法绕过,必须通过国内代理,而音源文件本身没有海外请求限制,不需要代理。
考虑大陆服务器带宽比较珍贵,全局代理代价太大,增加了中继 "RPC"

目前仅提供 QQ 音源的公共中继服务
因 QQ 128k 音源可以直接使用测试 vkey,默认未启用中继服务

其它音源需要从国内请求的部分都预留了降级逻辑,不过在源码里屏蔽了,需要注释掉这个限制

if(path != 'qq/ticket') return Promise.reject()

中继服务器的源码为 bridge.js,部署后修改 insure.js 的 host 变量为自己的服务器地址即可

P.S. 来自套路云、良心云的请求会被虾米拒绝

本人小白一只,大大能给我细讲一下国外怎么访问么?真心感谢
我自己有国内的服务器,不知道怎么配置。

shzxm commented

不知道能不能支持 apple music音源?或者spotify

@shzxm
不能
没找到下载 spotify 歌曲的方法,据说 spotify 使用 ogg 格式且有 DRM
Apple Music API 申请就需要 enroll apple developer program,门槛太高

自签证书模式是只对mac好使吗?在UWP客户端下,无法播放。在PC端下,改hosts文件无效全灰,内部设置代理80/443的话,网络超时无法播放。

@Lonelykid
刚验证了下,对 UWP 和 Windows 客户端都好使

  • UWP 只用 http 接口,甚至都不用装证书。UWP 访问本地要额外打开 loopback,README 有写
  • 修改 hosts 后 Windows 客户端也可用,注意 interface.music.163.com 这个域名也要写入,README 有写
  • 修改 hosts 并在 Windows 客户端设置代理端口 80 也可用 (你这是什么奇怪操作? hosts 或者代理二选一就行)

还有 443 那个是 https 代理,像客户端设置、Android 的 wifi 代理、iOS 的 WLAN 代理都不支持

@nondanee 谢谢,无法播放可能是我临时的网络问题,UWP现在可用了,不是在本地不需要加loopback吧。不过PC客户端的确是无视了hosts设置,歌曲全都是灰的,客户端内设置也不好使,版本2.6.0 Build 198145

@Lonelykid
emmm 我把 AppData 删掉试了下 (新安装状态),确实无视 hosts 了
我之前试了可用大概是因为在之前版本用过 hosts,升级上来有些配置保留了

但是客户端内设代理还是可以用的,我的版本是 2.6.0 (Build:198161)

@nondanee 客户端内置代理的确可以,但是服务端只能是http模式。我试了打开https,然后在客户端里填80/443都不行。

使用pm2管理启动服务,设置好端口号,仍然以8080端口启动

apps:
        - script: ./app.js
          name: netease
          watch: true
          log_date_format: "YYYY-MM-DD HH:mm Z"
          error_file: /wlf/music/UnblockNeteaseMusic/logs/error.log
          out_file: /wlf/music/UnblockNeteaseMusic/logs/out.log
          env_production:
                  NODE_ENV: production
                  HOST: localhost
                  PORT: 10001

启动命令为
pm2 start pm2.yml --env production

查看日志显示为:
0|netease | 2019-11-27 14:30 +08:00: HTTP Server running @ http://0.0.0.0:8080

@lostimever
不支持从环境变量读参数,必须设置 args

          args: -a localhost -p 10001

@lostimever
不支持从环境变量读参数,必须设置 args

          args: -a localhost -p 10001

嗯嗯,感谢🙏

obcsl commented

想请教一下作者大大🙏。provider里面虾米xiami.js怎么添加自己的cookie?或者内置账号?

因为自己刚好还剩一年的虾米会员,还是想尽可能利用起来。也看了隔壁qq.js是有注释预留cookie的地方,但是虾米木有找到类似的。。。

@obcsl
还没看

虾米反爬比较严格,加了 cookie 也不一定可用
而且我也没虾米会员 == 就不弄了

release log 里说了才有功能哦,没有说就是还没做

obcsl commented

谢谢大佬耐心回复。我自己回去研究一下。

jxcn commented

国内中继

测试过除咪咕外,QQ、虾米、百度、酷狗、酷我 API 都有海外墙,修改请求头无法绕过,必须通过国内代理,而音源文件本身没有海外请求限制,不需要代理。
考虑大陆服务器带宽比较珍贵,全局代理代价太大,增加了中继 "RPC"

目前仅提供 QQ 音源的公共中继服务
因 QQ 128k 音源可以直接使用测试 vkey,默认未启用中继服务

其它音源需要从国内请求的部分都预留了降级逻辑,不过在源码里屏蔽了,需要注释掉这个限制

if(path != 'qq/ticket') return Promise.reject()

中继服务器的源码为 bridge.js,部署后修改 insure.js 的 host 变量为自己的服务器地址即可

P.S. 来自套路云、良心云的请求会被虾米拒绝

@nondanee 因为我是macOS使用,所以我尝试部署的是 RPC+https endpoint 模式…

按照上面的说明
先在 国内节点 git clone 后无任何修改 执行 node bridge.js 9000
然后在 国外节点 修改 insure.js
1
并执行 node app.js -p 8080:8081 -e https://mydomain.com -o qq migu kuwo joox

1 node bridge.js 9000 会有log显示吗?我这边完全没有动静的说
2
2 由于 1 中没有log显示,我尝试使用本issues中的测试代码进行测试
3
3 macOS客户端版本是2.3.0(816) 连通后原本灰掉的歌曲显示能播,但是点击播放在loading一段时间(log会出现MITM > music.163.com)后直接播放了下一曲(之前就能播放的歌曲)
4 https endpoint 配置应该是没问题的,毕竟issues测试joox是能解析到歌曲的

@jxcn

  1. 是的,bridge 没有 log 的
  2. 额。。。国内节点要求大陆的,香港的不行
  3. 不显灰和能不能播是两回事:因为在显示列表的时候我没法确定每首灰的歌的匹配结果,所以全部显示能点击,实际等播放到那首歌了再去匹配;如果不修改列表显示,那么客户端在 UI 上就限制了,点这首歌直接弹框不能听,不去请求服务器,也就不会过代理;loading 的时间在做匹配,匹配不到会返回空,没法播放的话网易云会自动下一首
  4. 嗯,问题就是因为香港节点,joox 服务东南亚港澳
jxcn commented

@nondanee
我的部署姿势没错吧?
然后我国内节点的确是在大陆啊 就是开bridge的节点
我知道香港能用joox,所以看起来压根没成功连到大陆的bridge?
两边防火墙都是关闭的,可以排除防火墙的原因导致没连bridge成功,所以如何排查一下呢?

@jxcn
应该没错
嗯没连到
可以直接浏览器打开链接测试一下 bridge server 正不正常

http(s)://HOST:PORT/qq/track?{%22song%22:%220034UmOI0ObAqd%22,%22file%22:%22001pSSJ10V7r7e%22}
jxcn commented

@nondanee
看起来bridge是OK的
1

@jxcn
那在 bridge 里这行 if(path != 'qq/ticket') return Promise.reject() 注释了吗==,看你截图里没有
insure 里可以 print 出来看看

return request('GET', `${host}/${path}?${query}`)
.then(response => response.body())
.then(data => {
	console.log('bridge', data)
	return data
})
jxcn commented

@nondanee
bridge 的确没注释 压根没有做任何修改
insure 这个要如何操作进行 print
刚刚Google了一波没看明白…(我丢人了

@jxcn
说错了,是 insure 里那行 qq/ticket 注释掉了吗?直接删掉也行
底下那段代码,你在 insure 找到位置粘进去就行

jxcn commented

服务商网络问题 换IP解决了…

感谢大佬投入。

我在使用中遇到如下问题:
安装好证书在iphone设置代理后,歌单恢复但是提示播放失败。
docker 命令如下:

docker run -d -p 12306:8080 -v /home/pi/SourceCode/unblockneteasemusic/server.crt:/usr/src/app/server.crt -v /home/pi/SourceCode/unblockneteasemusic/server.key:/usr/src/app/server.key  --name neteasemusic nondanee/unblockneteasemusic -p 8080:8081 -e https://music.163.com

试过 -e http://music.163.com 同样现象
部分log如下:

MITM > 115.236.118.33 
[1400394244] 以父之名 (Live)
http://dl.stream.qqmusic.qq.com/M50000026oNl2nIpMd.mp3?vkey=806CCD60642A65C5DA2B81C99B9A331A5BE26C45CE299F0B788BF189FAFE0DB43B9730523131450608E7B1BCDB710B31A3681986413391C1&uin=0&fromtag=8&guid=7332953645
TUNNEL > localhost:8081
TUNNEL > localhost:8081
TUNNEL > localhost:8081
TUNNEL > localhost:8081
MITM > 59.111.181.38 
MITM > 59.111.181.38 
MITM > 115.236.118.33 
MITM > 115.236.118.33 
MITM > 115.236.118.33 
MITM > 115.236.118.33 
MITM > 115.236.118.33 
MITM > 115.236.118.33 
TUNNEL > wfd.netease.im:443
TUNNEL > wfd.netease.im:443
TUNNEL > wfd.netease.im:443

有版权歌曲正常播放

@DOTA2mm
看 log 似乎证书没被信任啊,浏览器里打开 music.163.com 看看会不会有证书错误警告?

这两天一直遇到一个奇怪的问题,自签证书在ios客户端显示网络不给力,而用项目自带的证书,就没有问题。

两者只有证书不同,可以排除掉部署和客户端配置不对的情况。

经过反复测试,自签证书有效期不能太长,否则在客户端会提示“网络不给力”。

openssl x509 -req -extfile <(printf "subjectAltName=DNS:music.163.com,DNS:*.music.163.com") -days 800 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

数次调整,发现days不能超过900,具体上限是多少未知。目前设定到800,工作正常。

想请教下作者,这个是什么原因导致的,为什么有效期太长就不行了。