介绍
通过哔哩漫游和解除B站区域限制两个项目可以访问B站其他区域的视频,但是为实现这个功能,需要一个目标区域的代理,但是如果代理仅具有IPV6地址,是无法访问bilibili的,解决这个问题的方案之一是通过cloudflare warp获取IPV4,并通过其访问B站,当然这个方案也会存在如果cloudflare将代理的IPV6区域识别出错,分配了其他区域的IPV4导致不能访问B站其他区域的视频的问题。
操作
这里以debian11和nginx为例,其他系统需进行相应的修改。
cloudflare warp
通过以下命令安装cloudflare warp,其他系统参考:https://pkg.cloudflareclient.com/
如果以root
用户登录,以下命令中不需要sudo
sudo apt update && sudo apt install -y curl gnupg lsb-release # Add cloudflare gpg key curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg # Add this repo to your apt repositories echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list # Install sudo apt-get update && sudo apt-get install cloudflare-warp
接下来需要注册warp,并设置为代理模式
#注册warp,注册成功会显示Success warp-cli register #设置为代理模式 warp-cli set-mode proxy #设置代理端口 warp-cli set-proxy-port 1080 #连接到warp warp-cli connect #开启开机自启 warp-cli enable-always-on
注册时如果显示Error: Failed to contact the WARP API
,可通过以下命令开启nat64(详细内容可查看:https://nat64.net/),临时访问cloudflare warp的IPV4 API地址。
cp /etc/resolv.conf /etc/resolv.conf.bak echo -e "nameserver 2a01:4f8:c2c:123f::1\nnameserver 2a00:1098:2c::1\nnameserver 2a01:4f9:c010:3f02::1" > /etc/resolv.conf
再次运行warp-cli register
,进行注册,注册成功后恢复原有设置。
rm /etc/resolv.conf cp /etc/resolv.conf.bak /etc/resolv.conf
socat
由于nginx无法直接利用warp的代理,这里需要使用socat中转一下。
debian11上的socat已经支持socks代理了,如果是老版本需要参考:https://gist.github.com/miyouzi/3e3d57cde402b829aeb1d865b14eaa1a 进行编译安装。
apt install socat
利用systemd
设置socat开机启动
创建配置文件:vi /etc/systemd/system/socat-hk.service
,并将以下内容添加进去
[Unit] Description=socat-hk After=network.target [Service] Restart=on-failure RestartSec=5s ExecStart=/usr/bin/socat TCP4-LISTEN:1081,reuseaddr,fork SOCKS:127.0.0.1:api.bilibili.com:443,socksport=1080 [Install] WantedBy=multi-user.target
启动该配置,并设置开机自启动
systemctl start socat-hk systemctl enable socat-hk
nginx
安装nginx:apt install nginx
配置nginx:vi /etc/nginx/sites-enabled/你的域名.conf
server { server_name example.com # 填写自己的域名 listen [::]:80; # 监听IPv6,根据需要取舍 client_max_body_size 128M; location /pgc/player/api/playurl { # 用于 APP 解析 proxy_set_header Host api.bilibili.com; proxy_pass https://127.0.0.1:1081; # 通过代理连接到 api.bilibili.com # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断 # 这里还需要给油猴脚本使用,因此不启用了 # if ($http_x_from_biliroaming ~ "^$") { # return 403; # } } location /pgc/player/web/playurl { # 为油猴脚本做准备 proxy_set_header Host api.bilibili.com; proxy_pass https://127.0.0.1:1081; } }
配置完成后需要重新加载nginx配置:sudo nginx -s reload
。
如果欲使用ssl可采用certbot(在debian11中可直接使用 apt install certbot进行安装),安装完成后用sudo certbot --nginx
来运行certbot。
也可以使用acme.sh(若安装acme.sh失败,也可临时开启nat64)进行设置,不过需要自行配置nginx,以下是一份参考用配置文件
server { listen [::]:443 ssl http2; server_name 你的域名; ssl_certificate 证书文件路径; ssl_certificate_key key文件路径; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; client_max_body_size 128M; location /pgc/player/api/playurl { proxy_set_header Host api.bilibili.com; proxy_pass https://127.0.0.1:1081;# 通过代理连接到 api.bilibili.com # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断 # 这里还需要给油猴脚本使用,因此不启用了 # if ($http_x_from_biliroaming ~ "^$") { # return 403; # } } location /pgc/player/web/playurl {# 为油猴脚本做准备 proxy_set_header Host api.bilibili.com; proxy_pass https://127.0.0.1:1081; } }
参考链接:
https://gist.github.com/miyouzi/3e3d57cde402b829aeb1d865b14eaa1a
https://github.com/Lynn-Becky/v6_only