美文网首页
如何解决CentOS网卡不能自动联网的问题

如何解决CentOS网卡不能自动联网的问题

作者: 叶迎宪 | 来源:发表于2018-08-25 17:52 被阅读0次

    手上有个技嘉的迷你pc,安装了CentOS 6.6,通过ifcfg配置了静态ip。但是这个pc有个很奇怪的现象,就是如果开机的时候网线没有插上,等开机以后再插网线,或者开机以后拔出网线再插上,这个静态IP就无效了,表现为其他电脑无法ping通这个ip,这台pc也无法ping通网关。这时必须手动ifdown再ifup重启网卡,还要过很久一会才能重新联网。开始以为是网卡配置问题,google了很久,试了各种各样的办法例如修改ifcfg的配置,安装NetworkManager,安装netplug,总之各种折腾,依然没有解决问题。通过tcpdump抓包,发现在重新插上网线的时候,网卡接收不到来自局域网的ARP、组播等数据包,ping网关之前主机会发送ARP咨询网关对应的MAC地址,但是没有收到响应导致无法ping出去。于是开始怀疑是网卡驱动有问题。百度了一下,也说CentOS自带的r8169驱动太古老了,问题多多。

    先用lspci查看网卡的型号

    03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

    8168和8169型号不要弄错了。CentOS默认只有8169的驱动,所以用来驱动8168的网卡总是怪怪的

    http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false

    在realtek官网下载r8168的linux驱动0010-r8168-8.045.08.tar.bz2。安装步骤参考里面的readme文件

    不过,realtek官网的说明实际上还是省略了一些步骤。要编译驱动,首先要安装内核源码和gcc、perl

    yum install perl gcc

    内核源码不要用yum安装。因为yum安装的是内核的最新版本,可能会比系统当前的内核版本高,导致驱动无法运行。如果要用yum安装kernel-devel,要先yum update把内核升级到最新版本。否则,从centos光盘的Packages目录找到kernel-devel的rpm包,用rpm -ivh安装进去。

    r8168的驱动代码在centos 6.6之中会有一个编译错误。编辑src/r8168.h,把eth_hw_addr_random的定义注释掉

    #if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
    
    static inline void eth_hw_addr_random(struct net_device *dev)
    
    {
    
            random_ether_addr(dev->dev_addr);
    
    }
    
    #endif
    

    安装完r8168驱动之后,把原来的r8169驱动改个名字,避免下次重启的时候又加载到错误的驱动

    cd /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net
    mv r8169.ko r8169.ko.bak
    depmod -a

    相关文章

      网友评论

          本文标题:如何解决CentOS网卡不能自动联网的问题

          本文链接:https://www.haomeiwen.com/subject/kimgiftx.html