Busybox wget 的 User-Agent 不被 mirrors.ustc.edu.cn 接受

之前 透明代理多个镜像源 的设想是用 DNS 重定向的方式,把包管理器的 HTTP 请求转发到自己的 nginx 上,然后重新分发到中国大陆的镜像。其中一个比较稳定且快速的就是 USTC - 中国科学技术大学开源软件镜像 mirrors.ustc.edu.cn

这个方子之前还挺好的,直到几个月前,Proxmox VE Helper-Scripts 添加了一个功能 core: harden shell scripts against injection and insecure permissions 作者:MickLesk · 拉取请求 #13239 · community-scripts/ProxmoxVE,把默认的 http repository 的网址改成了 https。因为没有办法绕过 TLS 的证书验证,也就没有办法去重定向了。

好在后续还有一个 PR core: APT/APK Mirror Fallback for CDN Failures 作者:MickLesk · 拉取请求 #13316 · community-scripts/ProxmoxVE,添加了一些 HTTP 的镜像,在失败的时候使用。我们可以主动使用 Ctrl+C 来触发中断,切换到使用镜像的代码逻辑。

我发现使用 busybox 的 wget 请求中科大的镜像时会返回 403,导致这个镜像全部都没有用。而在其他系统中使用 curl 或 wget 能够正常获得 200 响应。

实际问题出现在 busybox 中,wget 使用的 User-Agent: Wget,被中科大拦截导致返回了 403。

我找到了相关的 Issue wget 返回 403 · 议题 #479 · ustclug/discussions,说是防恶意流量。
wget -U wget. 只要是非 wget 字面量就能绕过,但 Proxmox VE Helper-Scripts 的脚本改不了。

好在其它 ZJU - 浙江大学开源软件镜像站 mirrors.zju.edu.cn 没这个限制,切换过去。

另外使用 fa1seut0pia/mirror-speed-test: 一个面向开发环境的镜像源测速与配置工具,支持常见镜像的下载速度测试。 测速,发现 mirrors.aliyun.com 虽然是最快的,但 apk 安装时提示 package integrity error,mirrors.huaweicloud.com 没这毛病,估计是同步出了偏差。

Proxmox VE Helper-Scripts 的 Alpine LXC 容器安装后需要打的补丁

目前安装脚本还有些不足:

apk del bash newt curl openssh nano mc ncurses jq
 
apk add tzdata
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone

serve 的 IP 地址采用了 vEthernet (Default Switch)

vercel/serve 是个挺好用的本地测试服务器。但今天发现它识别的 IP 地址怎么是 vEthernet (Default Switch) 的(其实这个网卡根本不应该有 IP 地址)。

之前 doggo 在 IPv6 环境下有超时错误 探究过,这张网卡是 Hyper-V 创建的虚拟网卡,无法删除。

今天发现它突然有个地址,去配置里看居然是手动设置的?

以太网适配器 vEthernet (Default Switch):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::131c:314a:16f:30e5%7
   IPv4 地址 . . . . . . . . . . . . : 192.168.96.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :

改为自动获取之后,还真自动获取了一个链路本地地址,serve 也提示选用它。

以太网适配器 vEthernet (Default Switch):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::131c:314a:16f:30e5%7
   自动配置 IPv4 地址  . . . . . . . : 169.254.218.160
   子网掩码  . . . . . . . . . . . . : 255.255.0.0
   默认网关. . . . . . . . . . . . . :

   ┌─────────────────────────────────────────────┐
   │                                             │
   │   Serving!                                  │
   │                                             │
   │   - Local:    http://localhost:3000         │
   │   - Network:  http://169.254.218.160:3000   │
   │                                             │
   │   Copied local address to clipboard!        │
   │                                             │
   └─────────────────────────────────────────────┘

这非常不对,干脆把网卡的 IPv4 IPv6 协议禁用了。