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

手上有个技嘉的迷你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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们说的Linux其实指的就是 内核(kernel)而已。这个内核控制你主机的所有硬件并提供系统所有的功能,所以它...
    Zhang21阅读 7,502评论 0 18
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,254评论 2 33
  • pipework的做法是通过网桥使容器,宿主机在同一个网段中进行通信 实验环境: 一、基础环境配置,三台服务器均执...
    向上的路阅读 3,041评论 1 2
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,939评论 0 5
  • 一个人,一杯咖啡,一个导航,两天,暴雨,拥堵,音乐,到了千里之外。 2日早晨,查了一下,能买到南京的火车票,于是,...
    临在一刻阅读 190评论 0 0