人在海外,还是喜欢熟悉的网易云音乐。毕竟是养了那么久的号,推荐的歌曲还是蛮符合我的胃口的,只可惜网易云许多歌曲在海外都无法播放,因此想着如何能解锁网易云。

一开始直接想通过国内服务器搭建一个代理,但是国内VPS带宽实在捉急,听个无损都要缓冲,体验太差了。在网上搜索,发现有这样一个项目可以帮助我们解决问题:https://github.com/nondanee/UnblockNeteaseMusic

项目分析

该项目的主要功能如下:

  1. 为请求增加 X-Real-IP 参数解锁海外限制,支持指定网易云服务器 IP
  2. 使用 QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咪咕 / JOOX 音源替换变灰歌曲链接

  3. 完整的流量代理功能 (HTTP / HTTPS),可直接作为系统代理 (同时支持 PAC)

功能1是我研究这个项目的初衷,我希望能在不用翻回国的情况下解锁网易云的海外限制。通过这个项目看来,网易云是通过X-Real-IP这个请求头来判断IP的。稍微熟悉网络安全的同学都知道,取IP应该用 REMOTE_ADDR,这个是不可伪造的,而X-Real-IP和X-Forward都是可以伪造的,因此此项目通过代理,修改了网易云音乐的包头,从而使得网易云无法正确判断我们的位置。

该项目如何修改我们的发包头呢?因为此项目是一个代理的形式提供服务,对HTTP流量可以直接修改,但是对于HTTPS流量就无能为力了。为此该项目采用了两种方法:1.流量降级。2.中间人攻击。第一种方法是,当检测到流量是https的时候就返回一个空,这时候网易云音乐客户端会重新以http的形式连接,从而可以修改包头。第二种方法,是用自定义证书替换网易云音乐的证书,因此可以通过中间人解密修改流量。

这个bug的修正其实非常简单,不懂为啥网易云一直没有修复,其实只需要将IP的取值来源换成REMOTE_ADDR即可。

对于功能2,其实就是对网易云音乐没有版权的歌曲,自动通过其他音乐源获取同名歌曲替换即可。此时网易云就只是一个没有感情的UI界面+收藏+推荐的软件了,正好也符合我的需求,本来我就只需要它的私人FM功能。

功能3是实现1,2的根源,通过一个代理的形式对流量进行修改,从而达到解锁的效果。同时既可以在本地搭建也可在云服务器搭建,给多个设备使用。后文我将介绍如何在云服务器搭建,从而给多个设备使用。

项目部署

由于源项目太久没有更新,我采用此项目所提供的的一个docker方式快捷部署。

服务端执行:

1
docker run  -d -p 8080:8080  -m 300M --memory-swap -1 -e ENABLE_LOCAL_VIP=true -e NO_CACHE=true -e ENABLE_FLAC=true -e NODE_ENV=production --restart=always --log-opt max-size=10m --name=win_music pan93412/unblock-netease-music-enhanced -e https://music.163.com

此时会在VPS上开启8080端口的http服务。由于该项目有内存溢出情况,所以设置了内存限制。此指令已经亲自测试在所有客户端都可用。

项目使用

Windows

windows客户端非常好使用,直接在设置-工具-http代理处填写你的服务器ip和端口号(默认是8080)即可。

IOS

IOS由于无法直接通过流量降级发送http流量,因此采用安装证书,用中间人攻击方式修改流量。

在Safari上打开如此地址安装并信任证书。在设置 > 通用 > 关于本机 > 证书信任设置,手动信任证书。

IOS推荐采用Shadowrockt方式添加http代理。如果不想麻烦可以直接开全局代理,或者用如下规则:

https://gist.githubusercontent.com/RManLuo/8b7b913298608d47778447012a6b8438/raw/69ba50bdc836e6140cdd8ae5f170b82767d950d7/music.conf

MAC

MacOS和IOS类似,需要安装证书,同时可以用Clash等软件分流。

安卓

安卓推荐用Clash设置代理并进行分流,可用规则如下

https://github.com/DesperadoJ/Rules-for-UnblockNeteaseMusic/tree/master/Clash

其他参考资料

Linux 客户端食用指南https://github.com/nondanee/UnblockNeteaseMusic/issues/208

iOS配置经验分享https://github.com/nondanee/UnblockNeteaseMusic/issues/368

iOS 食用指南#65https://github.com/nondanee/UnblockNeteaseMusic/issues/65

一个可以使用的教程#444https://github.com/nondanee/UnblockNeteaseMusic/issues/444

教學:如何修正 UnblockNeteaseMusic 的「播放失敗」問題(酷我、QQ、周杰倫)#746https://github.com/nondanee/UnblockNeteaseMusic/issues/746

UnblockNeteaseMusic - 解锁网易云音乐客户端变灰歌曲https://redn3ck.github.io/2020/06/23/UnblockNeteaseMusic-解锁网易云音乐客户端变灰歌曲