nondanee / UnblockNeteaseMusic

Revive unavailable songs for Netease Cloud Music
MIT License
17.42k stars 2.51k forks source link

iOS & Mac Using Surge With Docker #314

Closed wangliangliang2 closed 4 years ago

wangliangliang2 commented 4 years ago

first, in you vps start docker with cmd: docker run -d --name unblockneteasemusic -p 8080:8080 nondanee/unblockneteasemusic:latest -s -e https://music.163.com -p 8080:8081

second, add rules in surge.conf: [Proxy] 🇪🇺 UnblockNeteaseMusic = http,\,\ [Rule] DOMAIN-SUFFIX, music.163.com, 🇪🇺 UnblockNeteaseMusic # add USER-AGENT rule in iOS USER-AGENT,NeteaseMusic,🇪🇺 UnblockNeteaseMusic DOMAIN,interface3.music.163.com,🇪🇺 UnblockNeteaseMusic USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90,🇪🇺 UnblockNeteaseMusic [MITM] hostname = music.163.com,interface3.music.163.com

third, trust certicafication of surge and don't forget the about in setting should also trust,then toggle up MITM on iOS.

now, you can enjoy music both in Mac and iOS.

ps: Mac NeteaseMusic version 2.2.0 (Build:800) iOS NeteaseMusic version 6.4.7 the fllowing is results:

image

image

nondanee commented 4 years ago

有什么特别的吗?

wangliangliang2 commented 4 years ago

有什么特别的吗?

没啥特别的。 只是其他issue介绍很杂而且介绍的方法试了试ios端都不可用。 还有的issue用docker里面的ca.crt也是很让人摸不着头脑。 按上面的步骤简单做下ios 和mac端就可以了正常解锁,算是一个方法贴吧。

eliver commented 4 years ago

@wangliangliang2 这个可以用于Quantumult吗,还是说只能用在Surge上?

wangliangliang2 commented 4 years ago

@wangliangliang2 这个可以用于Quantumult吗,还是说只能用在Surge上?

纯分析的角度来看这个适用Quan、小火箭、surge。理由是这个不涉及软件间区别化,只是应用大家都有的MITM功能. 我大概用了下这个项目,感觉流程是这样的[没有抓包验证过(懒),仅仅猜测]: NeteaseMusic->surge(Quan、小火箭)->unblock server MITM(解析找资源返回https://music.163.com/base64.mp3[-e 的启动参数])-> (surge MITM)->返回mp3数据。

eliver commented 4 years ago

@wangliangliang2 学习了,谢谢~

Lakr233 commented 4 years ago

-> third, trust certicafication of surge and don't forget the about in setting should also trust,then toggle up MITM on iOS.

这句话改一下好不好我的老表真的看着很喜感(对不起原谅我(误

-> One more thing, add the certificate you generated by Surge to the system and trust it in system preferences. After that, turn on the MitM.

Lakr233 commented 4 years ago

下面是比较完整 Surge 规则+去广告拦截上报

AND,((URL-REGEX,.+eapi/ad/get), (USER-AGENT,NeteaseMusic)),REJECT AND,((URL-REGEX,.+/api/log.+), (USER-AGENT,NeteaseMusic)),REJECT AND,((URL-REGEX,.+/api/feedback/client/log.+), (USER-AGENT,NeteaseMusic)),REJECT AND,((DOMAIN-SUFFIX,http://hz.music.163.com/), (USER-AGENT,NeteaseMusic)),REJECT AND,((DOMAIN-SUFFIX,interface3.music.163.com), (USER-AGENT,NeteaseMusic)),DIRECT USER-AGENT,NeteaseMusic,🌸 UnblockNeteaseMusic DOMAIN-SUFFIX,music.126.net, 🌸 UnblockNeteaseMusic DOMAIN-SUFFIX,music.163.com,🌸 UnblockNeteaseMusic

nondanee commented 4 years ago

@wangliangliang2

不会吧,#56 #65 不是都把底下讨论最精华的部分全写在最开头的 comment 里了吗,不用全看啊 iOS 应该可以用啊,装 CA 不行吗?https://github.com/nondanee/UnblockNeteaseMusic/issues/65#issuecomment-543188771

docker 里面的 ca.crt 就是仓库里的 ca.crt,docker image 是 ci build,和源码一毛一样 仓库里的 ca.crt 点开安装在信任一下就行了

还有,为什么一定要用 docker 呢,npx 也很简单啊?

iOS 上用的起 surge 的应该是少数吧 =.=

nondanee commented 4 years ago

@Co2333 去广告开个会员就行了 拦截上报的话听歌排行、年报这种应该都会受影响

wangliangliang2 commented 4 years ago

@wangliangliang2

不会吧,#56 #65 不是都把底下讨论最精华的部分全写在最开头的 comment 里了吗,不用全看啊 iOS 应该可以用啊,装 CA 不行吗?#65 (comment)

docker 里面的 ca.crt 就是仓库里的 ca.crt,docker image 是 ci build,和源码一毛一样 仓库里的 ca.crt 点开安装在信任一下就行了

还有,为什么一定要用 docker 呢,npx 也很简单啊?

iOS 上用的起 surge 的应该是少数吧 =.=

1.装ca不行。 2.docker只是我用的真实环境及测试这个项目的使用环境。写清楚方便别人而已。 3.这个跟surge用不用没关系,其他代理软件也可以,原因我解释过了,用surge也只是我的测试和使用环境。

nondanee commented 4 years ago

@wangliangliang2

  1. 那可能是个体差异吧
  2. 好的
  3. 还是有关系的,不是所有代理 APP 都自带 MITM 吧

我合到 #56 里了

lifesign commented 4 years ago

surge for mac 上使用异常,步骤和楼主基本一致

[Proxy] 🇪🇺 UnblockNeteaseMusic = http, 127.0.0.1, 8080

运行后访问客户端,CPU 飙升,surge dashboard 直接假死

image

docker 里的日志,不停在刷 image

nondanee commented 4 years ago

@lifesign 看起来 surge 把 docker 内发起的请求都拦截了,client 显示的是 com.docker.vpnkit....

docker 内 UnblockNeteaseMusic 发起的 music.163.com 请求被 surge 转发到 UnblockNeteaseMusic 代理,死循环

看看能不能在 surge 规则里把 docker 排除一下

lifesign commented 4 years ago

@lifesign 看起来 surge 把 docker 内发起的请求都拦截了,client 显示的是 com.docker.vpnkit....

docker 内 UnblockNeteaseMusic 发起的 music.163.com 请求被 surge 转发到 UnblockNeteaseMusic 代理,死循环

看看能不能在 surge 规则里把 docker 排除一下

临时加了条规则是可以的,现在 Mac 的客户端可用,不过这个可能影响 docker 的策略了,我在尝试一下

[Rule] PROCESS-NAME,/Applications/Docker.app/Contents/Resources/bin/com.docker.vpnkit,DIRECT

image

image

lifesign commented 4 years ago

网页端好像还是不行

image image

Surge For Mac 已经开启 MitM,而且把 Skip Server Certificate Verification 勾上了 image

不勾上会有这个错误 image

nondanee commented 4 years ago

@lifesign 好的

网页版的问题 README 里说过了

支持 Windows 客户端,UWP 客户端,Android 客户端,Linux 客户端 (1.2 版本以上需要自签证书 MITM,启动客户端需要增加 --ignore-certificate-errors 参数),macOS 客户端 (726 版本以上需要自签证书),iOS 客户端 (配置 https endpoint 或使用自签证书) 和网页版 (需要自签证书,需要脚本配合)

参考 https://github.com/nondanee/UnblockNeteaseMusic/issues/48#issuecomment-477870013 最后

lifesign commented 4 years ago

@lifesign 看起来 surge 把 docker 内发起的请求都拦截了,client 显示的是 com.docker.vpnkit....

docker 内 UnblockNeteaseMusic 发起的 music.163.com 请求被 surge 转发到 UnblockNeteaseMusic 代理,死循环

看看能不能在 surge 规则里把 docker 排除一下

尝试了一下,这样的做法,docker 下的命令只能走直连了,如果不配置镜像,将无法访问类似 docker pull 的命令

抓包观察后有几个结论

  1. docker desktop 由于设定的规则里有 DOMAIN-SUFFIX,docker.com,🚀 Proxy 所以没问题
  2. docker 命令行下如果想使用,需要加入 DOMAIN-SUFFIX,docker.io,🚀 Proxy 即可

尝试最简配置如下

[Rule]
DOMAIN-SUFFIX, music.163.com, 🇪🇺 UnblockNeteaseMusic
DOMAIN-SUFFIX,docker.io,🚀 Proxy
DOMAIN-SUFFIX,docker.com,🚀 Proxy

目标是

  1. docker pull 之类的命令可以匹配 docker.io 或者 docker.com 走代理访问
  2. 和 music163 相关的还是走 🇪🇺 UnblockNeteaseMusic

多次尝试后发现,一开始打开客户端的情况下,是没问题的,也能听,但是通过操作反复切换歌曲,网页端和客户端交叉访问,会有一个时刻 docker logs 里不断出现这个时,就进入了死循环中,目前无法按照相同的操作路径复现 出现过问题的有

  1. 某次操作打开客户端的,等你下课一播放就死循环
  2. 一开始打开客户端,后面关闭后,操作网页端,再次打开客户端直接死循环
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80
MITM > music.163.com:80

image

大部分是请求 http://music.163.com/* 的时候,这个时候因为命中了 surge 基于域名后缀的规则(但没区分 http 或者 https),会转发到 surge,surge 又转发到 docker,导致死循环了

以下日志输出 music.163.com 这种是正常的,不知道和输出 music.163.com:80 差异在哪里,含义上似乎是一样的

MITM > music.163.com
MITM > music.163.com
[412327303] 哪里都是你 (Live)
http://win.web.rh01.sycdn.kuwo.cn/cac68b6d2f33707a78b857c47ccd246f/5e106e4f/resource/n1/5/9/4267523983.mp3
MITM > win.web.rh01.sycdn.kuwo.cn (ssl)
MITM > music.163.com
MITM > music.163.com
MITM > music.163.com
[26609712] 美景
http://rq01.sycdn.kuwo.cn/a947d59448bc8dbe679440541bb57052/5e106e5d/resource/n3/19/81/981709890.mp3
TUNNEL > localhost:8081
MITM > rq01.sycdn.kuwo.cn (ssl)
TUNNEL > p3.music.126.net:443

目前参考 https://github.com/nondanee/UnblockNeteaseMusic/issues/56 里的,这样测试是可行的,不会出现假死,客户端正常听,但是带来的一个问题是网页无法使用,似乎无解

[Rule]
PROCESS-NAME,NeteaseMusic*,UnblockNeteaseMusic
DOMAIN-SUFFIX,docker.io,🚀 Proxy
DOMAIN-SUFFIX,docker.com,🚀 Proxy

image 请求 http://music.163.com/* 是命中的是 DIRECT,不会转发到 docker

nondanee commented 4 years ago

@lifesign 网页无法用很好解决啊,加上浏览器的 PROCESS-NAME

出现这个问题的原因是 surge 会检查 docker 发出的请求,但你无法给特定 container/image 写白名单

那么普通的 cli 程序发出的请求会走 surge 规则吗? 比如 curl 这种,我觉得没有 export http_proxy 应该不会吧~ 如果不走的话建议直接 npx

lifesign commented 4 years ago

@lifesign 网页无法用很好解决啊,加上浏览器的 PROCESS-NAME

出现这个问题的原因是 surge 会检查 docker 发出的请求,但你无法给特定 container/image 写白名单

那么普通的 cli 程序发出的请求会走 surge 规则吗? 比如 curl 这种,我觉得没有 export http_proxy 应该不会吧~ 如果不走的话建议直接 npx

加上 PROCESS-NAME 的话,像 chrome 的访问就都走代理的,这样也不合适 普通的 cli 请求不会的,docker 是因为命中了两条规则才会走代理 那这么看起来 docker 和 surge 的配合想要同时兼容客户端和网页是没什么好办法了,转 npx 的方式落

wangliangliang2 commented 4 years ago

nblockNeteaseMusic = http, 127.0.0.1, 8080

运行后访问客户端,CPU 飙升,surge dashboard 直接假死

我的docker之前是放在云服务器里,运行正常。 现在是放nas中(和电脑同一个局域网),运行也正常。 以上两种情况 docker 和 surge 的配合是能同时兼容客户端和网页的,并且不好导致cpu飙升。 至于本机的docker情况,我没测试过。 PS:HTTPS Decrypt 可以关掉的。 image