Ubuntu 16.04.5 的内核为 4.4,以前运行正常:默认使用 IPv4。自从更改为内核 (hwe) 4.15 后,它默认使用 IPv6。
它具有通过 Tunnelbroker 提供的 IPv6,由路由器广播。
现在默认为 IPv6:curl ifconfig.co
返回机器的 IPv6。仅curl -4 ifconfig.co
返回所需的 IPv4 地址。(curl -6 ifconfig.co
如预期的那样返回 IPv6)
$ ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip -6 rule list
0: from all lookup local
32766: from all lookup main
$ ip route list
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.x
$ ip -6 route list
2001:470:x:999::9999:f6a dev eth0 proto kernel metric 256 pref medium
2001:470:x:999::/64 dev eth0 proto kernel metric 256 expires 42905sec pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via fe80::2ac6:8eff:fe65:d117 dev eth0 proto ra metric 1024 expires 1505sec hoplimit 64 pref medium
PS:例如,某些提供商仍报告 IPv4 curl ipinfo.io/ip
。我使用 ifconfig.co 已有很长时间了,因此我不确定他们是否更改了设置(可能性较小)或者内核升级是否使 Ubuntu 更喜欢 IPv6。
我如何找出导致 IPv6 成为首选的原因?
答案1
将名称解析设置为首选 v4。对于 glibc 的 getaddrinfo 用户,请取消注释 /etc/gai.conf 中“首选 IPv4”注释后的优先行。带有 IPv4 /96 的那个。
答案2
要优先使用 IPv4 而不是 v6,您只需在 /etc/gai.conf 文件中删除注释或添加以下行即可:
优先级 ::ffff:0:0/96 100