# Debian 13 \`curl\`不按优先级连接 求助

**URL:** <https://idcflare.com/t/topic/60454>\
**Category:** 求助\
**Created:** [2026 年2 月 16 日 03:28 UTC](https://idcflare.com/t/topic/60454 "2026-02-16T03:28:50Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sakura](https://idcflare.com/user_avatar/idcflare.com/sakura/32/732_2.png) [@Sakura](https://idcflare.com/u/Sakura)\
**Post date:** [2026 年2 月 16 日 03:28 UTC](https://idcflare.com/t/topic/60454/1 "2026-02-16T03:28:50Z")

</div>

遇到了网络优先级问题

按照搜索的教程将 gai.conf 里的那行#删除保存后

使用curl ip.sb后 显示结果还是v6

然后搜索了下其他人说的，有人说13默认v6优先改不了，还有人说要去内核里改

有没有懂的大佬帮忙解惑一下

---

<div class="post-metadata">

**Author:** ![Sakura](https://idcflare.com/user_avatar/idcflare.com/sakura/32/732_2.png) [@Sakura](https://idcflare.com/u/Sakura)\
**Post date:** [2026 年2 月 16 日 03:36 UTC](https://idcflare.com/t/topic/60454/2 "2026-02-16T03:36:02Z")

</div>

我去隔壁发一贴吧 这边看的人少

---

<div class="post-metadata">

**Author:** ![5long](https://idcflare.com/user_avatar/idcflare.com/5long/32/35455_2.png) [@5long](https://idcflare.com/u/5long)\
**Post date:** [2026 年2 月 16 日 04:32 UTC](https://idcflare.com/t/topic/60454/3 "2026-02-16T04:32:35Z")

</div>

对 IPv6 不是很熟。但应用具体会优先用哪个 IP 栈，这个事是由应用 / 库自身决定的吧。gai.conf 这里的配置只能影响不在乎这个事的应用 / 库。curl 是按 happy eyeballs 算法来选的，总是优先 v6：[Happy Eyeballs - everything curl](https://everything.curl.dev/usingcurl/connections/happy.html) 如果你要强制让 curl 走 v4 可以加 `-4` 参数

再就是如果应用不走 getaddrinfo 的解析 / 有自己的配置，那么 gai.conf 这里的配置也影响不到应用的行为。

gai.conf 的配置可以用命令 `getent ahosts example.com` 来验证

---

<div class="post-metadata">

**Author:** ![k9990009](https://idcflare.com/user_avatar/idcflare.com/k9990009/32/15020_2.png) [@k9990009](https://idcflare.com/u/k9990009)\
**Post date:** [2026 年2 月 16 日 15:51 UTC](https://idcflare.com/t/topic/60454/4 "2026-02-16T15:51:24Z")

</div>

我把系统DD的debian13，用的科技lion的脚本改的，刚才看了下没问题，你可以试试，在系统工具里面

---

<div class="post-metadata">

**Author:** ![030](https://idcflare.com/user_avatar/idcflare.com/030/32/60246_2.png) [@030](https://idcflare.com/u/030)\
**Post date:** [2026 年2 月 16 日 17:11 UTC](https://idcflare.com/t/topic/60454/5 "2026-02-16T17:11:08Z")

</div>

/etc/resolv.conf 文件 加行 `options no-aaaa` 就行

---

<div class="post-metadata">

**Author:** ![linying23333](https://idcflare.com/user_avatar/idcflare.com/linying23333/32/19673_2.png) [@linying23333](https://idcflare.com/u/linying23333)\
**Post date:** [2026 年2 月 27 日 09:38 UTC](https://idcflare.com/t/topic/60454/6 "2026-02-27T09:38:08Z")

</div>

> [@5long](#):
>
> curl 是按 happy eyeballs 算法来选的，总是优先 v6

稍微补充一点点? 最近有在折腾这个. (因为套了`he-ipv6`隧道, 不想被v6优先太影响速度)

问了一下`claude`说  
`Happy Eyeballs RFC 8305 says: try IPv6 first, wait ~250ms, then start IPv4 in parallel — whichever connects first wins. It doesn't measure throughput or latency beyond the initial TCP handshake. Since your HE tunnel still connects within 250ms, IPv6 "wins" even though it's 60-70x slower in practice.`  
zh-cn:  
`《Happy Eyeballs RFC 8305》规定：优先尝试IPv6，等待约250毫秒后并行启动IPv4——先成功建立连接的协议获胜。该标准不评估TCP握手后的吞吐量或延迟。由于您的HE隧道仍能在250毫秒内完成连接，因此IPv6获胜，尽管实际性能比IPv4慢60-70倍。`

实测新版`curl`的`Happy Eyeballs`算法确实会在默认值`250ms-`时优先使用`IPv6`?

```console
root@localhost:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 xdp/id:128 qdisc mq state UP group default qlen 1000
    link/ether 8a:30:59:00:0d:3a brd ff:ff:ff:ff:ff:ff
    altname enp0s17
    altname enx8a3059000d3a
    inet 1.1.1.1/24 brd 1.1.1.255 scope global ens17
       valid_lft forever preferred_lft forever
    inet6 fe80::8830:59ff:fe00:d3a/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/sit 1.1.1.1 peer 216.218.221.6
    inet6 2001:470::/48 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::74cc:111/64 scope link 
       valid_lft forever preferred_lft forever
root@localhost:~# curl ip.sb
2001:470::
root@localhost:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=1.73 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=1.74 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 1.731/1.735/1.740/0.004 ms
root@localhost:~# ping 2001:4860:4860::8888
PING 2001:4860:4860::8888 (2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=119 time=135 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=119 time=135 ms
^C
--- 2001:4860:4860::8888 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 134.830/134.854/134.878/0.024 ms
root@localhost:~# curl -V
curl 8.14.1 (x86_64-pc-linux-gnu) libcurl/8.14.1 OpenSSL/3.5.4 zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.2 libssh2/1.11.1 nghttp2/1.64.0 nghttp3/1.8.0 librtmp/2.3 OpenLDAP/2.6.10
Release-Date: 2025-06-04, security patched: 8.14.1-2+deb13u2
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd
root@localhost:~# curl --happy-eyeballs-timeout-ms 0 ip.sb
1.1.1.1
root@localhost:~# curl --happy-eyeballs-timeout-ms 300 ip.sb
2001:470::

```

手动调整了一下默认值走回更快的原生`IPv4`了

* * *

要测试`/etc/gai.conf`有没有生效可以用`ping`或者`wget`等等还没有遵从`Happy Eyeballs`算法且默认值以下`IPv6`优先的工具(我调高 `he-ipv6`隧道的 **路由 Metric** 值, 不过好像没这个有用就忽略叭)

> **wget 方式**
>
> ```console
> root@localhost:~# cat /etc/gai.conf | head -c 67
> precedence ::ffff:0:0/96 100
> # Configuration for getaddrinfo(3).
> root@localhost:~# 
> root@localhost:~# wget -qO- ip.sb
> Prepended http:// to 'ip.sb'
> 116.204.135.152
> root@localhost:~# nano /etc/gai.conf
> root@localhost:~# cat /etc/gai.conf | head -c 68
> #precedence ::ffff:0:0/96 100
> # Configuration for getaddrinfo(3).
> root@localhost:~# 
> root@localhost:~# wget -qO- ip.sb
> Prepended http:// to 'ip.sb'
> 2001:470::
> 
> ```

> **ping 方式**
>
> ```console
> root@localhost:~# cat /etc/gai.conf | head -c 67
> precedence ::ffff:0:0/96 100
> # Configuration for getaddrinfo(3).
> root@localhost:~# 
> root@localhost:~# ping -c 2 ip.sb
> PING ip.sb (172.67.75.172) 56(84) bytes of data.
> 64 bytes from 172.67.75.172: icmp_seq=1 ttl=57 time=1.28 ms
> 64 bytes from 172.67.75.172: icmp_seq=2 ttl=57 time=1.23 ms
> 
> --- ip.sb ping statistics ---
> 2 packets transmitted, 2 received, 0% packet loss, time 1002ms
> rtt min/avg/max/mdev = 1.228/1.255/1.282/0.027 ms
> root@localhost:~# nano /etc/gai.conf
> root@localhost:~# cat /etc/gai.conf | head -c 68
> #precedence ::ffff:0:0/96 100
> # Configuration for getaddrinfo(3).
> root@localhost:~# 
> root@localhost:~# ping -c 2 ip.sb
> PING ip.sb (2606:4700:20::681a:c1f) 56 data bytes
> 64 bytes from 2606:4700:20::681a:c1f: icmp_seq=1 ttl=59 time=143 ms
> 64 bytes from 2606:4700:20::681a:c1f: icmp_seq=2 ttl=59 time=141 ms
> 
> --- ip.sb ping statistics ---
> 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
> rtt min/avg/max/mdev = 140.645/141.593/142.541/0.948 ms
> root@localhost:~# 
> 
> ```

> **getent 方式**
>
> ```console
> root@localhost:~# cat /etc/gai.conf | head -c 67
> precedence ::ffff:0:0/96 100
> # Configuration for getaddrinfo(3).
> root@localhost:~# 
> root@localhost:~# getent ahosts ip.sb
> 172.67.75.172 STREAM ip.sb
> 172.67.75.172 DGRAM  
> 172.67.75.172 RAW    
> 104.26.12.31 STREAM 
> 104.26.12.31 DGRAM  
> 104.26.12.31 RAW    
> 104.26.13.31 STREAM 
> 104.26.13.31 DGRAM  
> 104.26.13.31 RAW    
> 2606:4700:20::ac43:4bac STREAM 
> 2606:4700:20::ac43:4bac DGRAM  
> 2606:4700:20::ac43:4bac RAW    
> 2606:4700:20::681a:c1f STREAM 
> 2606:4700:20::681a:c1f DGRAM  
> 2606:4700:20::681a:c1f RAW    
> 2606:4700:20::681a:d1f STREAM 
> 2606:4700:20::681a:d1f DGRAM  
> 2606:4700:20::681a:d1f RAW    
> root@localhost:~# nano /etc/gai.conf
> root@localhost:~# cat /etc/gai.conf | head -c 68
> #precedence ::ffff:0:0/96 100
> # Configuration for getaddrinfo(3).
> root@localhost:~# 
> root@localhost:~# getent ahosts ip.sb
> 2606:4700:20::ac43:4bac STREAM 
> 2606:4700:20::ac43:4bac DGRAM  
> 2606:4700:20::ac43:4bac RAW    
> 2606:4700:20::681a:c1f STREAM 
> 2606:4700:20::681a:c1f DGRAM  
> 2606:4700:20::681a:c1f RAW    
> 2606:4700:20::681a:d1f STREAM 
> 2606:4700:20::681a:d1f DGRAM  
> 2606:4700:20::681a:d1f RAW   
> 172.67.75.172 STREAM ip.sb
> 172.67.75.172 DGRAM  
> 172.67.75.172 RAW    
> 104.26.12.31 STREAM 
> 104.26.12.31 DGRAM  
> 104.26.12.31 RAW    
> 104.26.13.31 STREAM 
> 104.26.13.31 DGRAM  
> 104.26.13.31 RAW    
> 
> ```

> ****
>
> 搞点暴力的(如果不支持`.curlrc`的话), 劫持一下`curl`(PS:执行需要`which`,`bash`,`chattr`,支持-e的`echo`)
> 
> ```auto
> bash -c 'export file_path="$(which curl)";mv -i "${file_path}" "${file_path}.real";echo -e "#!/bin/env bash\n#Do not reserve default 250ms perfer time for IPv6\nexec \"${file_path}.real\" --happy-eyeballs-timeout-ms 0 \"\$@\"" > "${file_path}";chmod +x "${file_path}" "${file_path}.real";chattr +i "${file_path}" "${file_path}.real";'
> 
> ```

~~可能有用的第三方参考内容:~~ (算了, 杀掉了. 感觉有点给第三方引流不符合论坛观念, 真要的话再dd我)

偷懒关闭`IPv6`我觉得很不负责… 用`IPv6`不就是为了尽可能点对点连接, 人人都不用`IPv6`那ta造了干嘛… 你不用(服务商不提供`IPv6`)我不用(我关闭`IPv6`),`IPv6`永远发展不了(虽然happy eyeballs这种强制ipv6优先而不是并发连接然后留质量好的,以推广ipv6也是挺坏的…)

---

<div class="post-metadata">

**Author:** ![5long](https://idcflare.com/user_avatar/idcflare.com/5long/32/35455_2.png) [@5long](https://idcflare.com/u/5long)\
**Post date:** [2026 年2 月 27 日 10:58 UTC](https://idcflare.com/t/topic/60454/7 "2026-02-27T10:58:40Z")

</div>

没啥可补充的。就，看我链接到的那个文档就行。
