文章

纯ipv6环境下配置B站代理解析

  编辑于:2024-01-15
文章目录

介绍

通过哔哩漫游解除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

发表回复