nondanee / UnblockNeteaseMusic

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

docker-compose 懒人搭建指南 (整合 v2ray) #401

Open 8Hq7e opened 4 years ago

8Hq7e commented 4 years ago

测试环境:macOS Docker 2.2.0.3

(Docker容器只暴露55555这一个端口,连接方式为Shadowsocks,更安全)

一、签发证书并信任CA:

进阶配置 #48:https://github.com/nondanee/UnblockNeteaseMusic/issues/48

二、准备文件:

Finder方式:前往-前往文件夹(⇧⌘G):~/ ,依次新建Docker、unblock、cert、v2ray文件夹,并放入相应文件。

~/Docker/unblock/docker-compose.yml

~/Docker/unblock/v2ray/config.json

~/Docker/unblock/cert/server.key

~/Docker/unblock/cert/server.crt

docker-compose.yml 内容:

version: "3"

services:

  unblockmusic:
    container_name: unblockmusic
    restart: always
    image: nondanee/unblockneteasemusic:latest
    environment:
      NODE_ENV: production
    expose:
      - 8080
      - 8081
    volumes:
      - ~/Docker/unblock/cert/server.key:/usr/src/app/server.key
      - ~/Docker/unblock/cert/server.crt:/usr/src/app/server.crt
    command: -p 8080:8081 -s -e https://music.163.com

  unblockv2ray:
    container_name: unblockv2ray
    restart: always
    image: v2fly/v2fly-core:latest
    ports:
      - "55555:55555"
    volumes:
      - ~/Docker/unblock/v2ray/config.json:/etc/v2ray/config.json
    depends_on:
      - unblockmusic

config.json 内容:

{
  "log": {
    "loglevel": "warning"
  },

  "inbounds": [
    {
      "port": 55555,
      "protocol": "shadowsocks",
      "settings": {
        "method": "chacha20-ietf-poly1305",
        "ota": false,
        "password": "PPPPPPPPPPP"
      }
    }
  ],

  "outbounds": [
    {
      "protocol": "http",
      "settings": {
        "servers": [
          {
            "address": "unblockmusic",
            "port": 8080
          }
        ]
      }
    }
  ]
}

三、启动Docker:

$ cd ~/Docker/unblock
$ docker-compose up -d

完工,以下为参考配置:

Shadowsocks连接信息:

类型:shadowsocks
端口:55555
加密方式:chacha20-ietf-poly1305
密码:PPPPPPPPPPP

Surge 配置:

[Proxy]
🔰 Direct = direct
⛺️ V2ray = ss, 127.0.0.1, 55555, encrypt-method=chacha20-ietf-poly1305, password=PPPPPPPPPPP, udp-relay=false, tfo=false

[Proxy Group]
🔊 Netease = select, 🔰 Direct, ⛺️ V2ray

[Rule]
PROCESS-NAME,com.docker.vpnkit,🔰 Direct
PROCESS-NAME,NeteaseMusic,🔊 Netease
USER-AGENT,NeteaseMusic*,🔊 Netease
USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,🔊 Netease

DOMAIN-SUFFIX,music.163.com,🔊 Netease
DOMAIN-SUFFIX,music.126.net,🔊 Netease
DOMAIN-SUFFIX,api.iplay.163.com,🔊 Netease

# IP-CIDR,59.111.181.60/32,🔊 Netease
# IP-CIDR,223.252.199.66/32,🔊 Netease
# IP-CIDR,223.252.199.67/32,🔊 Netease
# IP-CIDR,59.111.160.195/32,🔊 Netease
# IP-CIDR,59.111.160.197/32,🔊 Netease
# IP-CIDR,59.111.181.35/32,🔊 Netease
# IP-CIDR,59.111.181.38/32,🔊 Netease
# IP-CIDR,39.105.63.80/32,🔊 Netease
# IP-CIDR,47.100.127.239/32,🔊 Netease
# IP-CIDR,118.24.63.156/32,🔊 Netease
# IP-CIDR,193.112.159.225/32,🔊 Netease
# IP-CIDR,59.111.181.155/32,🔊 Netease
# IP-CIDR,115.236.118.33/32,🔊 Netease
# IP-CIDR,59.111.128.0/17,🔊 Netease
# IP-CIDR,115.236.112.0/20,🔊 Netease
# IP-CIDR,223.252.192.0/19,🔊 Netease
# IP-CIDR,101.71.154.241/32,🔊 Netease

PS:网易云音乐,专辑 Dreaming (白日梦),艺术家:Daydream 匹配到好多奇怪的同名歌,希望匹配歌曲可以同时满足 曲名和艺术家。

nondanee commented 4 years ago

PS:网易云音乐,专辑 Dreaming (白日梦),艺术家:Daydream 匹配到好多奇怪的同名歌,希望匹配歌曲可以同时满足 曲名和艺术家。

搜索关键词里一直都有曲名和艺术家 https://github.com/nondanee/UnblockNeteaseMusic/blob/436046c63b1d985c62e6695beaa21672423a747a/src/provider/find.js#L27

默认搜索结果取第一条,没有匹配算法,你可以自己加 https://github.com/nondanee/UnblockNeteaseMusic/issues/372#issuecomment-583751043

rsyanting commented 4 years ago

尝试在 V2Ray 的路由里面做设置,希望 music.163.com 的域名请求全部给 unblock 的代理接收转发掉,但是似乎 安卓的网易云 请求远端服务器的域名不是这个??(不会抓包。会抓包,把请求的域名放到 V2Ray 的路由中应该就可以了)log 里面没有看见。 docker 部署的话,地址得换成 容器 的IP地址,我尝试 127.0.0.1 的环回地址不行。没 log 。 最后在 V2Ray 重新写了一个 SS 配置,全部转发到 unblock 的 代理端口,虽然不优雅,但是可以用……

nondanee commented 4 years ago

试试 interface.music.163.com interface3.music.163.com

nondanee commented 4 years ago

@dingjianhub 我看了下 pac 里还有 223.252 开头的 ip,应该也要加到规则里 可以先全局代理,然后关闭其他应用只开网易云(控制变量)看 unblock 的 log,再加规则

iOS 的话也是上述域名,不过也有 ip 直连的问题,只转发域名应该不够的 有建议说用 UA 的规则很方便,你可以试试看 #368

rsyanting commented 4 years ago

@dingjianhub 我看了下 pac 里还有 223.252 开头的 ip,应该也要加到规则里 可以先全局代理,然后关闭其他应用只开网易云(控制变量)看 unblock 的 log,再加规则

iOS 的话也是上述域名,不过也有 ip 直连的问题,只转发域名应该不够的 有建议说用 UA 的规则很方便,你可以试试看 #368

嗯嗯,issue #368 写的非常好,检查 UA ,是一个非常好的思路! 我刚刚打开 wireshake 看了一下,UWP 版本的似乎没有 UA ,如果我没看错的话。假设安卓是有 UA 的话,还需要解决 V2Ray 的路由设定 ,V2Ray官方那边没有 UA 的 demo ,但是有个 attrs 参数,目前还没研究出来,还得继续看一下。 如果选择 IP 的方式做云端分流,其稳定性有待考量。

经过 log 排查有几个 IP 为 网易云 香港 的IP,这个就很奇怪了,不清楚是否为 ipip.net 的误判? 还有几个阿里云 新加坡 的IP,这个也不清楚是做啥的。测试时仅保持手机端测试,其余设备全部下线,其余软件也全部关闭。仅保留了 网易云 和 shadowsocks。

目前我的解决方案是,在 V2Ray 设置一个单独的 shadowsocks 的 inbound ,通过该 inbound 的流量全部转发到 unlockNetease 的代理端口。

{             
                "type": "field",
                "inboundTag": "shadowsocks-for-music163",
                "outboundTag": "music163-proxy"
                // "ip": [
                //     "geoip:cn",
                //     "59.111.128.0/17"  // ipip.net 给出的网易数据中心 IP 段,谨慎使用,可能有游戏业务使用该 IP 段。
                // ],
}

然后在安卓端的 shadowsocks 开启全局模式,同时设置 “分应用 VPN ”,选择“启用”,勾选 “网易云音乐”,这样的话,可以做到正常使用 unblockNetease ,同时不影响其他的软件,比如看bilibili视频,不会将流量转发到云端服务器(这样看视频不会卡…云服务器带宽有限),可以保证其他应用不受影响。 如果对上面的 V2Ray 的路由规则启用 IP 规则,将上面 IP 规则的注释取消掉,是没法开启 unblockNetease 的,unblockNetease log 那边正常收到请求,但是 V2Ray 的日志出现了一些国外 IP 转发到国外 V2Ray Server 的情况。(我个人原因,我云端的 V2Ray 是做了一个中转,对非 CN 的 IP,将其转发到境外,用于科学上网。) 个人希望继续优化到能做到使用 unblockNetease ,国内请求直接跳过 shadowsocks,其次是经过云服务器直接在境内转发,同时保持科学上网。(有点“异想天开”了哈哈哈哈哈,目前这个设置还是够够的了)。 谢谢 @nondanee @8Hq7e @Xun66 的分享,谢谢~😄😊

nondanee commented 4 years ago

@dingjianhub 要分流的话只能用策略代理,安卓上有 clash 可用,可以在 issue 里搜一下有人分享的

8Hq7e commented 4 years ago

@dingjianhub 要分流的话只能用策略代理,安卓上有 clash 可用,可以在 issue 里搜一下有人分享的

我的安卓设备可以解锁和播放,但是无法加载图片...

8Hq7e commented 4 years ago

docker 部署的话,地址得换成 容器 的IP地址,我尝试 127.0.0.1 的环回地址不行。没 log 。

不知道我有没有理解错你这句话,其实不需要更改"address": "unblockmusic"

nondanee commented 4 years ago

@8Hq7e 是说用这个 v2ray 配置吗?还是别人的 clash 配置?你这个引用回复有点迷 😂 代理本身应该是没问题的,因为用 WLAN 手动代理可以正常显示图片 应该是协议转化的其中一环有问题(策略等),建议先去掉策略全局测试一步一步找原因

8Hq7e commented 4 years ago

应该是协议转化的其中一环有问题(策略等),建议先去掉策略全局测试一步一步找原因

确认了一下,用这个v2ray配置,安卓全局模式,依旧没有办法加载封面图片,但是播放音乐是没有问题的,docker的log里面也有输出这首歌。而且,iOS使用相同的服务器,没有无法加载封面图片这样的问题。搞不懂。

nondanee commented 4 years ago

@8Hq7e 把 -s 去掉试一下

8Hq7e commented 4 years ago

@8Hq7e 把 -s 去掉试一下

去掉 -s就可以了,打开App就是开屏广告估计就可以了...正常播放周杰伦的 床边故事 没有问题。建议你可以顺便把网易云音乐去广告一起做了,哈哈

nondanee commented 4 years ago

@8Hq7e 如果愿意留在网易云的话,那充个黑胶不过分吧 😉 (不考虑做)

rsyanting commented 4 years ago

docker 部署的话,地址得换成 容器 的IP地址,我尝试 127.0.0.1 的环回地址不行。没 log 。

不知道我有没有理解错你这句话,其实不需要更改"address": "unblockmusic"

是的,应该是可以的。 但是我这边是不行的,run 了个 busybox 去ping容器名,没法ping到,但是直接用 172 网段的 ip 是可以 ping 到的。 起先我配置了端口映射,127.0.01:54648:8080,这样子,然后在 V2Ray 那边没有 log ,换到容器的 172 网段IP 就好了。是这个情况。 查阅了下,docker 容器默认都是互通的。

eromoe commented 4 years ago

有没有android 客户端的 v2rayNG 能用的配置? 感觉装一堆 vpn软件 切来切去也挺累的。。

tanst commented 3 years ago

v2rayNG

兄弟找到没,分享一下

dcncy commented 3 years ago

给力,按照这个终于搞定了。IOS14系统最新版8.0.21可用。

感谢感谢。