带有内核 4.4 的 Ubuntu 16.04.5 曾经按预期工作: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 的原因?
将名称解析设置为首选 v4。对于 glibc 的 getaddrinfo 的用户,取消 /etc/gai.conf 中“prefer IPv4”注释后的优先行的注释。带有 IPv4 /96 的那个。
要更喜欢 IPv4 而不是 v6,您可以取消注释或在 /etc/gai.conf 文件中添加以下行:
优先级::ffff:0:0/96 100