Debian13 IPv4优先 IPv6优先 curl api.myip.la

需求

群友反馈在Deiban13下不能设置IPv4优先


1. 核实问题

a. 判断是否Debian13
cat /etc/os-release

b. 判断是否同时有 ipv4 和 ipv6 出站
curl -4 api.myip.la 
curl -6 api.myip.la 

c. 判断当前是什么出站优先
curl api.myip.la 

d. 设置为 IPv4 优先
bash <(curl -sL https://raw.githubusercontent.com/crazypeace/warp.sh/main/ipv4v6.sh) 4
* 本质上是
echo "precedence ::ffff:0:0/96  100" >> /etc/gai.conf

e. 检测效果
curl api.myip.la 
Debian12 环境下 curl 返回 IPv4
Debian13 环境下 curl 返回 IPv6

2. curl的版本不同

在与各大GPT交流一番后, GPT提示我用 curl -v 来获取更详细的信息.
curl -v api.myip.la 

可以发现 
Debian12 使用的是 curl/7.88.1
Debian13 使用的是 curl/8.14.1
并且 Debian13 的 curl/8.14.1 在一开始多了2行 解析IP的结果

我们可以尝试在 Debian12 环境下测试 curl/8.14.1

3. Debian12 用C编译 curl v8.14.1


4. Debian12环境下测试 curl/8.14.1 

Debian12 的 curl/8.14.1 的结果是 返回 IPv6 

5. Debian13环境下测试 curl/7.88.1

可以看到 Debian13 的 curl/7.88.1 的结果是返回 IPv4

所以可以确定是代码的变化导致结果发生了变化. 而不是Debian12与13的环境差异.

6. 从哪个版本发生的变化

我们可以编译不同版本的 curl 观察是从哪个版本开始出现这个变化.
从 7.88.1 到 8.4.0 行为是一致的.

8.5.0 在开头出现了解析IP结果. 不过只有 IPv4

8.6.0 在开头出现了IPv4 和 IPv6的解析结果. 使用 IPv4的结果.

8.10.0 在开头有IPv4 和 IPv6的解析结果. 使用 IPv6的结果.
这也就是Debian13自带的 版本8.14.1 的行为.

7. 翻阅 8.10.0 的change log



我对此的阅读理解是, 从这个版本开始, curl 的行为是:
优先使用 IPv6, 不管 gai.conf 中定义了怎样的解析顺序.

提供的信息源
(原文是英文, 用浏览器插件翻译)

结论

从 curl/8.10.0 开始, curl 是不能用来测试 VPS 是 IPv4优先还是IPv6优先的.

进一步地, 我猜测, 未来更多的系统和软件都会使用 Happy Eyeballs 策略, 总是优先使用 IPv6, 与系统的 gai.conf 没有关系.

评论

The Hot3 in Last 7 Days

酒馆SillyTavern 玩英文角色卡 也能以中文输出 设置世界书Lorebooks

搭 Docker版 Sub-Store 带 http-meta 实现 集合订阅 测延迟 排序 筛选 生成新订阅 定时任务上传Gist