在Linux系统中判断IPv6支持情况,可以从内核模块、系统配置、网络接口、连通性测试等多个维度进行验证,下面是具体的操作方法。

查看内核是否加载IPv6模块
Linux系统的IPv6功能依赖对应的内核模块,首先可以检查ipv6模块是否已经被加载。
执行以下命令查看已加载的内核模块:
# 查看是否加载ipv6模块 lsmod | grep ipv6
如果输出结果中包含ipv6相关的模块信息,说明内核已经加载了IPv6模块。如果没有任何输出,可能是模块未加载,或者内核编译时没有开启IPv6支持。
也可以尝试手动加载模块,执行命令:
# 手动加载ipv6模块 modprobe ipv6
如果加载成功没有报错,说明模块存在且可以正常加载;如果提示模块不存在,说明内核没有编译IPv6相关功能。
检查sysctl配置参数
系统层面的IPv6开关可以通过sysctl参数查看,相关的配置项位于net.ipv6.conf路径下。
执行以下命令查看所有IPv6相关配置:
# 查看所有IPv6相关的sysctl配置 sysctl -a | grep net.ipv6.conf
重点查看net.ipv6.conf.all.disable_ipv6和net.ipv6.conf.default.disable_ipv6两个参数:
- 如果参数值为0,说明IPv6没有被全局禁用
- 如果参数值为1,说明IPv6被手动禁用了
如果需要临时开启IPv6,可以执行以下命令:
# 临时开启所有接口的IPv6 sysctl -w net.ipv6.conf.all.disable_ipv6=0 sysctl -w net.ipv6.conf.default.disable_ipv6=0
查看网络接口的IPv6地址
如果系统支持IPv6,网络接口通常会自动分配IPv6地址,可以通过ip命令查看接口状态。
执行以下命令查看所有网络接口的IPv6地址信息:
# 查看网络接口的IPv6地址 ip -6 addr show
如果输出中包含inet6开头的地址,说明对应接口已经配置了IPv6地址,系统支持IPv6。常见的IPv6地址类型包括:
- 链路本地地址:以
fe80::开头,仅在本链路有效 - 全局单播地址:通常以
2xxx:或3xxx:开头,可用于公网通信
也可以使用旧的ifconfig命令查看,不过部分新系统默认没有安装该工具:
# 使用ifconfig查看IPv6地址 ifconfig | grep inet6
测试IPv6连通性
如果前面步骤都显示支持IPv6,可以进一步测试IPv6的连通性,确认功能正常可用。
首先尝试ping本地链路本地地址,执行命令:
# ping本地回环的IPv6地址 ping6 ::1
如果可以正常收到回复,说明本地IPv6协议栈工作正常。接着可以尝试ping公网的IPv6地址,比如测试地址2001:4860:4860::8888(谷歌的公共DNS IPv6地址):
# ping公网IPv6地址 ping6 2001:4860:4860::8888
如果有正常回复,说明系统的IPv6不仅支持,还可以正常访问公网IPv6资源。
查看内核编译配置
如果需要确认内核编译时是否开启了IPv6支持,可以查看内核的编译配置文件。如果/boot目录下存在config-版本号的文件,可以执行以下命令:
# 查看内核编译时是否开启IPv6 grep IPV6 /boot/config-$(uname -r)
如果输出中包含CONFIG_IPV6=y或者CONFIG_IPV6=m,说明内核编译时已经开启了IPv6支持,y表示编译进内核,m表示编译为模块。如果显示CONFIG_IPV6=n或者没有相关输出,说明内核没有开启IPv6支持,需要重新编译内核才能使用。
| 验证维度 | 判断标准 |
|---|---|
| 内核模块 | lsmod显示ipv6模块,或modprobe可正常加载 |
| sysctl配置 | disable_ipv6参数为0,未被禁用 |
| 网络接口 | ip -6 addr show有inet6地址输出 |
| 连通性测试 | ping6本地和公网地址正常回复 |
| 内核编译 | config文件显示CONFIG_IPV6为y或m |