跳转到主要内容

在IPV6+IPV4双栈下优先使用IPV4

最近服务器引入了 IPV6 ,但是就出现了一个问题:

如果访问的域名同时拥有 A 和 AAAA 解析,那么系统会优先使用 AAAA 解析,也就是 IPV6 地址,同时网络出口的优先级都会比 IPV4高。

而且还有更牛的,IPV6+IPV4 双栈下,DNS查询会同时发送 AAAA 和 A 解析,无论访问域名有没有 AAAA 解析都会浪费一定时间去查询。

但是现在 IPV6 网络还不理想

举一个栗子

wget https://papermc.io/api/v1/paper/1.15.2/385/download
--2020-08-14 00:21:05--  https://papermc.io/api/v1/paper/1.15.2/385/download
正在解析主机 papermc.io (papermc.io)... 2606:4700:20::ac43:4580, 2606:4700:20::681a:202, 2606:4700:20::681a:302, ...
正在连接 papermc.io (papermc.io)|2606:4700:20::ac43:4580|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:44783881 (43M) [application/java-archive]
正在保存至: “download”

 2% [=>                                                                             ] 1,317,487   9.59KB/s 剩余 35m 23s
wget https://papermc.io/api/v1/paper/1.15.2/385/download
--2020-08-14 00:26:40--  https://papermc.io/api/v1/paper/1.15.2/385/download
正在解析主机 papermc.io (papermc.io)... 172.67.69.128, 104.26.3.2, 104.26.2.2, ...
正在连接 papermc.io (papermc.io)|172.67.69.128|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:44783881 (43M) [application/java-archive]
正在保存至: “download”

 1% [                                                                               ] 466,050      105KB/s 剩余 6m 51s

 

结果很 amazing 啊 ,这 IPV4 不知道快到那里去了。

 

好,说正事

优先 IPV4 非常简单

只要在 /etc/gai.conf 文件里面添加一行(这个文件默认不存在,手动生成吧)

precedence  ::ffff:0:0/96  100

保存就立即生效了

 

那么这行代码意味着什么呢

/etc/gai.conf 这个文件默认里面写了 (我知道你的是刚创建的,里面什么都没写也等于写了下面的内容)

label  ::1/128       0
label  ::/0          1
label  2002::/16     2
label ::/96          3
label ::ffff:0:0/96  4
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10

这些是什么地址?看下表:

前缀 优先级 标签 用途
::1/128 50 0 本地主机
::/0 40 1 Default unicast
::ffff:0:0/96 35 4 IPv4-mapped IPv6 address
2002::/16 30 2 6to4
2001::/32 5 5 Teredo tunneling
fc00::/7 3 13 Unique local address
::/96 1 3 IPv4-compatible addresses (deprecated)
fec0::/10 1 11 Site-local address (deprecated)
3ffe::/16 1 12 6bone (returned)