IPV6 的使用指南

如何设置 IPV4 或 IPV6 的优先级?

检查系统是否支持IPv6

可以通过以下步骤来检查你的系统是否支持IPv6:

  1. 查看网络接口配置:在大多数系统中,你可以通过ifconfig(需要net-tools包)或者ip addr命令(推荐,属于iproute2包)来查看网络接口的配置。IPv6地址通常以"inet6"标签标记。

例如,使用ip addr命令:

ruby
1$ ip addr show

如果你的网络接口配置显示了inet6条目,那么你的系统就支持IPv6。

  1. 查看内核设置:在Linux系统中,你还可以通过查看/proc/sys/net/ipv6/conf/all/disable_ipv6文件来检查IPv6是否被禁用。如果这个文件的值为1,那么IPv6被禁用;如果为0,那么IPv6已启用。

例如,使用cat命令:

shell
1$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
  1. 尝试ping一个IPv6地址:你可以尝试使用ping6命令(或在某些系统中使用ping -6)来向一个IPv6地址发送ICMP请求。

例如:

ruby
1$ ping6 google.com

或者:

ruby
1$ ping -6 google.com

如果你的系统成功地向这个地址发送了ICMP请求并接收到了回应,那么你的系统就支持IPv6。

  1. 使用网络工具:还有很多在线的网络工具可以帮助你测试你的系统是否支持IPv6,例如测试你的IPv6

以上所有命令可能需要管理员权限(例如使用sudo)。同时,具体命令的使用和结果可能会因为系统和网络配置的不同而不同。

/etc/gai.conf 配置文件

确认你的gai.conf文件被正确地解析也很重要。注意,这个文件中的任何注释或格式错误都可能导致整个文件被忽略。你可以通过以下命令来测试你的getaddrinfo配置:

php
1getent ahosts <hostname>

这个命令将会列出getaddrinfo为给定的主机名返回的所有地址,并按照他们的优先级排序。

配置文件解读

bash
1# For sites which prefer IPv4 connections change the last 1ine to 
2precedence ::ffff:0:0/96 100

/etc/gai.conf 中取消这一行配置的注释就是ipv4优先,否则是ipv6优先(默认)。

/etc/gai.conf文件中,precedence行定义了在获取地址信息时用于排序返回的地址列表的规则。

具体来说,precedence ::ffff:0:0/96 100的含义如下:

  • ::ffff:0:0/96是一个IPv6地址前缀,表示所有的IPv4-mapped IPv6地址。IPv4-mapped IPv6地址是一种特殊类型的IPv6地址,用于表示IPv4地址。具体来说,一个IPv4地址a.b.c.d可以被表示为::ffff:a.b.c.d的IPv6地址。
  • 100是这个地址前缀的优先级。在返回的地址列表中,优先级高的地址会被优先选择。这个数字可以是任何整数,优先级高的值具有更高的优先级。

因此,precedence ::ffff:0:0/96 100这一行的含义就是将优先级为100设置给所有IPv4-mapped IPv6地址。这意味着,如果一个程序请求一个地址,而getaddrinfo函数返回了IPv4和IPv6的地址,那么IPv4地址(在IPv6空间中表示)将被优先选择,只要它们的优先级没有比100更高的。

注意,gai.conf文件中的设置只影响使用getaddrinfo函数的程序。不是所有的程序都使用这个函数,因此这个设置可能不会影响所有的网络连接。