Debian13 IPv4优先 IPv6优先 curl api.myip.la
需求
群友反馈在Deiban13下不能设置IPv4优先

1. 核实问题
a. 判断是否Debian13
cat /etc/os-release
b. 判断是否同时有 ipv4 和 ipv6 出站
curl -4 api.myip.lacurl -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 中定义了怎样的解析顺序.
感谢 Debian中文群中的热心群友(https://t.me/c/1039975886/766739)
提供的信息源
(原文是英文, 用浏览器插件翻译)结论
从 curl/8.10.0 开始, curl 是不能用来测试 VPS 是 IPv4优先还是IPv6优先的.
进一步地, 我猜测, 未来更多的系统和软件都会使用 Happy Eyeballs 策略, 总是优先使用 IPv6, 与系统的 gai.conf 没有关系.











评论
发表评论