温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linux下如何解决IPV6模块加载失败问题

发布时间:2022-02-17 14:20:28 来源:亿速云 阅读:183 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“Linux下如何解决IPV6模块加载失败问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何解决IPV6模块加载失败问题”这篇文章吧。

同事一个SUSE Linux Enterprise Server 11 SP3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载。

Linux下如何解决IPV6模块加载失败问题

主要检查内容:

ipv6地址是否存在

 ifconfig |grep inet6

没有默认inet6地址

ipv6模块是否存在

# modinfo -n ipv6   /lib/modules/3.0.101-0.47.90-default/kernel/net/ipv6/ipv6.ko
   # modinfo -n ipv6_lib   /lib/modules/3.0.101-0.47.90-default/kernel/net/ipv6/ipv6_lib.ko

系统是否加载IPv6相关模块

lsmod |grep ipv6
   # lsmod |grep ipv6   ipv6_lib              341467  0

只有ipv6_lib模块,没有主模块ipv6

从上面信息得知,ipv6模块是存在的,只是加载出现了问题,由此想到可能是配置导致的。

首先检查模块的依赖关系是否正确:

# cat /lib/modules/`uname -r`/modules.dep |grep -w ipv6.ko:   /lib/modules/3.0.101-0.47.90-default/kernel/net/ipv6/ipv6.ko: /lib/modules/3.0.101-0.47.90-default/kernel/net/ipv6/ipv6_lib.ko

没有问题

其次检查modprobe配置,是否屏蔽了ipv6模块加载:

# cat /etc/modprobe.conf |grep -i ipv6   alias sit0 ipv6

最后检查了/etc/modprobe.d/目录下文件

发现一个50-ipv6.conf文件,内容如下:

# cat /etc/modprobe.d/50-ipv6.conf   install ipv6 /bin/true

这句话是什么含义呢?通过modprobe.conf(5)文档,有如下内容:

install modulename command...
     This  is the most powerful primitive: it tells modprobe to run your command instead of inserting the module in the kernel as normal.
     The command can be any shell command: this allows you to do any kind of complex processing you might wish.
     For example, if the module "fred" works better with the module "barney" already  installed (but  it  doesn't  depend  on  it, so modprobe won't automatically load it), you could say "install fred /sbin/modprobe barney; /sbin/modprobe --ignore-install fred", which would do what you wanted.
     Note the --ignore-install, which stops the second modprobe from running the same install command again. See also remove below.

     You can also use install to make up modules which don't otherwise exist.
     For example: "install probe-ethernet /sbin/modprobe e100 || /sbin/modprobe  eepro100",  which
     will first try to load the e100 driver, and if it fails, then the eepro100 driver when you do "modprobe probe-ethernet".

     If  you  use  the  string  "$CMDLINE_OPTS" in the command, it will be replaced by any options specified on the modprobe command line. This can be useful because users expect "modprobe fred opt=1" to pass the "opt=1" arg to the module, even if there's an install command in  the  configuration  file.  So  our  above  example  becomes "install fred /sbin/modprobe barney; /sbin/modprobe --ignore-install fred $CMDLINE_OPTS"

比较长,关键的第一句我们来解释一下: This is the most powerful primitive: it tells modprobe to run your command instead of inserting the module in the kernel as normal. 这句话的意思是它让modprobe命令执行命令行里的command命令,而不是一般情况下去加载指定的内核模块。

该怎么理解这句话呢?我们通过两个命令的执行来说明:

# modprobe -v -n ipv6   insmod /lib/modules/3.0.101-0.47.90-default/kernel/net/ipv6/ipv6_lib.ko
   install /bin/true

-n –dry-run –show 表明不做真正的插入模块的操作 -v: 打印有关程序所做事情的信息 所以上述输出表明modprobe只做了加载ipv6_lib.ko模块和install /bin/true的动作, 而没有做加载ipv6.ko模块

# modprobe --show-depends ipv6   insmod /lib/modules/3.0.101-0.47.90-default/kernel/net/ipv6/ipv6_lib.ko
   install /bin/true

–show-depends 只列出模块依赖关系,以insmod开头; install命令也不做实际的加载操作,只列出要做的加载动作 从以上信息可以看出,也不会做ipv6.ko模块加载。

去掉/bin/true之后,重新执行modprobe ipv6命令后检查模块加载情况:

# modprobe -v ipv6   # lsmod |grep ipv6   ipv6                  12758  1
   ipv6_lib              341467  71 ipv6
   
   # ifconfig |grep inet6     inet6 addr: fe80::9af5:37ff:fe00:9527/64 Scope:Link
     inet6 addr: fe80::9af5:37ff:fee3:3ac4/64 Scope:Link
     inet6 addr: ::1/128 Scope:Host

综上,可以认为是50-ipv6.conf文件的配置导致了ipv6加载不完整。

以上是“Linux下如何解决IPV6模块加载失败问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI