在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) |