资源描述
Linux 下网卡驱动安装及故障排除网卡是Linux服务器中最重要网络设备。据统计,Linux网络故障有35%在物理层、25% 在数据链路层、10在网络层、10在传输层、10在对话、7在表示层、3在应用层。 由此可以看出,网络故障通常发生在网络七层模型的下三层,即物理层、链路层和网络层。 对应于实际网络也就是使用的网络线缆、网卡、交换机、路由器等设备故障o Linux的网络 实现是模仿FreeBSD的,它支持FreeBSD的带有扩展的Sockets (套接字)和TCP/IP协议。 它支持两个主机间的网络连接和Sockets通讯模型,实现了两种类型的Sockets: BSD Sockets 和INET Socketso它为不同的通信模型和服务质量提供了两种传输协议,即不可靠的、基于 消息的UDP传输协议和可靠的、基于流的传输协议TCP,并且都是在IP网络协议上实现的。 INET sockets是在以上两个协议及IP协议之上实现的。由于交换机、路由器通常独立于 Linux 或者其他操作系统。网卡设置故障是造成 Linux 服务器故障最主要原因。可能因为硬件的质量或性能、磨损老化、人为误操作、不正确的网 络设置、管理问题、Linux软件的BUG、系统受到黑客攻击和Linux病毒等原因造成。Linux 服务器网卡故障排除的思路是:应当遵循先硬件后软件的方法。因为硬件如果出 现物理损坏那么如何设定网卡都不能解决故障。解决问题的方法可以从自身Linux计算机的 网卡查起,如果确定硬件没有问题了,再来考虑软件的设定。1. 网卡的选择一般来说,2.4版本以后的Linux可以支持的网卡芯片组数量已经很完备了,包括著名 厂商如: Intel 以及使用广泛的 RealTek, Via 等网卡芯片都已经被支持,所以使用者可以很 轻易的设定好他们的网络卡。但是由于Linux发行版本众多(目前超过188个),使用前最 好查看Linux发行版本的文档。以Redhat Linux 9.0为例,这个设备列表在Ethernet- HOWTO 文档中。另外最直接的方法是查看一个目录:/lib/modules/release/kernel/drivers/net,其中release 是内核版本,可以使用命令:“uname -r”获得。对于Redhat Linux 9.0是2.4.20-8。#ls /lib/modules/2.4.20-8/kernel/drivers/net/3c501.o atp.o eth16i.o ni52.o smc-ultra.o3c503.o bonding.o ethertap.o ni65.o starfire.o3c505.o cs89x0.o ewrk3.o ns83820.o strip.o3c507.o de4x5.o fc pcmcia sundance.o3c509.o de600.o fealnx.o pcnet32.o sungem.o3c515.o de620.o hamachi.o plip.o sunhme.o3c59x.o defxx.o hamradio ppp_async.o tc35815.o8139cp.o depca.o hp100.o ppp_deflate.o tg3.o8139too.o dgrs.o hp.o ppp_generic.o tlan.o82596.o dl2k.o hp-plus.o ppp_synctty.o tokenring8390.o dmfe.o irda r8169.o tulipac3200.o dummy.o lance.o rcpci.o tulip_oldacenic.o e100 lne390.o sb1000.o tun.oaironet4500_card.o e1000 lp486e.o shaper.o via-rhine.oaironet4500_core.o e2100.o mii.o sis900.o wanaironet4500_proc.o eepro100.o natsemi.o sk98lin wavelan.oamd8111e.o eepro.o ne2k-pci.o skfp wd.oappletalk eexpress.o ne3210.o slhc.o winbond-840.oarlan.o epic100.o ne.o slip.o wirelessarlan-proc.o eql.o netconsole.o smc9194.o wireless_oldat1700.o es3210.o ni5010.o smc-ultra32.o yellowfin.o可以看到这个目录列出所有Linux内核支持的网络设备驱动程序。其中大部分是以太网 卡(8139、3C0M、Intel)。也有一些是其他类型设备。对于初学者应当尽量选择目录中已 经列出的网卡。注意以.o后缀结束的文件就是驱动程序。而没有后缀的是驱动程序目录(红 色)。2.检查网卡是否加载: 驱动硬件是操作系统最基本的功能,操作系统通过各种驱动程序来驾驭硬件设备,和Windows 系统不同 Linux 内核目前采用可加载的模块化设计( LKMs Loadable Kernel Modules),就是将最基本的核心代码编译在内核中,网卡驱动程序是作为内核模块动态加载 的。可以使用命令“lsmod”看加载情况:# lsmodModule Size Used bydm_mod 54741 0button 6481 0battery 8901 0ac 4805 0md5 4033 1joydev 10241 0uhci_hcd 31065 0ehci_hcd 30917 0snd_via82xx 26437 0snd_ac97_codec 63889 1 snd_via82xxsnd_pcm_oss 49017 0soundcore 9889 1 sndtulip 45025 1via_rhine 23113 2mii 4673 1 via_rhineext3 116809 2jbd 71257 1 ext3 对每行而言,第一列是模块名称;第二列是模块大小;第三列是调用数。调用数后面的信息对每个模块而言都有所不同。如果 (unused) 被列在某模块的那行中,该模块当前就没 在使用。如果 (autoclean) 被列在某模块的那行中,该模块可以被 rmmod -a 命令自动清洗。当这个命令被执行后,所有自从上次被自动清洗后未被使用的被标记了 “autocleOn块都会被卸载。丛以上红色粗体字符可以看到笔者Linux计算机中两块网卡模块:tulip和via_rhine 已经加载。对应的网卡商业型号分别是:tulip:Lite-On Communications Inc LNE100TX Linksys EtherFast 10/100via_rhine:Via VT6102Rhine-II 常见主板集成网卡。如果没有检测到硬件,用硬件检测程序 kuduz 检测网卡,它和 Windows 中添加新硬件 差不多。kudzu程序是通过查看/usr/share/hwdata/目录下的文件识别各种硬件设备的。如果核 心支持该硬件,并且有该驱动程序就可自动装载。首先说明的是Linux下对网卡的支持往往 是只对芯片的,所以对某些不是很著名的网卡,往往需要知道它的芯片型号以配置Linux比如 我的Top link网卡,就不存在Linux的驱动,但是因为它是NE2000兼容,所以把它当NE2000 就可以在Linux下用了所以当你有一块网卡不能用,在找Linux的驱动程序之前一定搞清楚 这个网卡用的什么芯片,跟谁兼容,比如3c509,ne2000等。这样的型号一般都在网卡上最大的 一快芯片上印着,抄下来就是了。对于ISA接口的NE2000卡,先要作的一件事情,是将网卡设 定为Jumpless模式.很多现在的网卡缺省 都是PnP模式,这在Windows下的确能减少很多麻 烦,但是Linux不支持,所以Linux下必须是Jumpless模式.一般所有网卡都有带的驱动盘和 DOS下可执行的一个设定程序,用该程序将网卡设为Jumpless。对于PCI网卡,可以使用命 令来查看:lspci。在显示的列表中找到“Ethernet Controller”,记下厂商和型号。然后使用 modprobe尝试加载正确的模块,比如modprobe 3c509。如果出现错误,说明该模块不存在。 这时候你应该找到正确的模块并且重新编译。问题一般即可解决。如果很不幸的,您使用的是比较罕见的一些网卡,或者是 Linux 核心支持不够的网卡, 以致于在安装 Linux 时,并无法检测到网卡,那也不用担心,我们可以使用较为简单的核 心模块编译来支持这张网卡。下面以笔者的3Com的3CR990-TX-97网卡为例(一款具有安 全 特 性 网 卡 ) 看 看 如 何 进 行 模 块 编 译 。 首 先 在 其 网 站 下载合适你使用内核版本的相关 驱动程序,这里以 2.4 内核为例。#wegt 另外在开始编译核心模块之前,因为驱动程序需要配合核心来编译,所以会使用到 kernel source 或者是 kernel header 的数据,此外,也需要编译器 ( compiler ) 的帮助,因此, 先确定您的 Linux 系统当中已经下列软件的存在 : kernel-source 、kernel 、gcc 、make。#tar zxvf 3c990-1.0.0a.tar.gz#make此时会产生 3c990.o 驱动模块。然后使用命令拷贝到相应地方然后查看加载是否正常。#modprobe 3c990#cp 3c990.o /lib/modules/2.4.20-8/kernel/drivers/net# depmod -a然后使用 lsmod 命令检查加载情况,如果一切正常的话。可以让系统启动时自动加载 该模块:#echo “alias eth0 3c990”; /etc/modules.conf3为新网卡设定IP地址在 Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组 成。某种类型的第一个设备的编号为 0,其他设备依次被编号为 1、2、3,等。但是网卡并 不是最为裸设备出现在/dev目录下,而是存在内存中。ethO, ethl是以太网卡接口。它们用 于大多数的以太网卡,包括许多并行端口以太网卡。本文主要讨论这类网卡。 为 Linux 以 太网卡设定IP地址的方式非常灵活,你可以选择适合你工作情况的方法:(l ) 使用 ip 或 ifconfig 命令ifconfig命令是最重要的Linux网络命令,最主要的用途是设定、修改网卡的IP地址, 修改网卡 ip 地址:#ifconfig ethO 192.168.0.2 netmask 255.255.255.0默认情况下, ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所 有设备。但是ifconfig命令设置网络设备的ip地址系统重新启动后设置会自动失效。所以它 主要用于网卡状态调试。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本 中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用 ifconfig ,我们无需影响已保存的设置,就能够快速地配置网卡。Ip命令是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络 管理工具。例如:ifconfig、route等。现在,绝大多数Linux发行版和绝大多数UNIX都 使用古老的 arp, ifconfig 和 route 命令。虽然这些工具能够工作,但它们在 Linux2.2 和更高 版本的内核上显得有一些落伍。使用iproute2前你应该确认已经安装了这个工具。这个包的 名字在 RedHat Linux 9.0 叫作“iproute2”,也可以在:ftp:/ftp.inr.ac.ru/ip-routing/ 下载源代码 安装。如果希望在以太网接口 eth0上增加一个地址10.0.0.1,掩码长度为24位,标准广播地 址,标签为 eth0:Alias:#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Aliasnetconfig 命令可以设置网络设备的 ip 地址, netconfig 命令可以永久保存设置。使用方法是:“netconfig ethX”。使用命令“netconfig ethO”后会在命令行下弹出一个对话 框,这时即可进行设定。设定结束后用“tab”键选择“OK”即可保存设置并且退出。然后使用命令:“service network restart “激活即可生效。使用neat命令需要配置好X window系统,在命令行下运行“neat”命令后添加IP地址和 其他相关参数后保存设置,从新启动网络和网络服务或计算机。另外neat命令还有一个同价命令:“redhatconfignetwork,二者完全相同。Neat和 redhatconfigconfig 命令可以永久保存设置。除非另行指定, Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。网卡相关的 TCP/IP 网络配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中 x 从 0 开始,第一个 以太网配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器修改这个文件, 也可以修改网卡IP地址。#vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0#设定网卡的名称,要跟文件名称对应 #ONBOOT=yes#是否在开机的的时候启动网卡#BOOTPROTO=static#启动的时候的 IP 取得的协议,这里是固定的,如果是动态主机的话,要改成 dhcp 才行#IPADDR=192.168.1.2#IP 地址#NETMASK=255.255.255.0#子网掩吗#NETWORK=192.168.1.0#该网段的第一个 IP#BROADCAST=192.168.1.255#最后一个同网段的广播地址#GATEWAY=192.168.1.2#网关地址#GATEWAYDEV=eth0存盘后使用命令: “service network restart “激活即可生效。这个方法同样可以永久保存 设置。(5) 为网卡添加 IPV6 地址和 Windows 系统相比 Linux 对 Ipv6 的支持更好,最早的支持 Ipv6 的 Linux 内核是 2.2.xxx。一般Linux基于2.4内核的Linux发行版本都可以直接使用Ipv6,使用前要看系 统 IPv6 模块是否被加载,如果没有的话可以使用命令手工加载,这需要超级用户的权限。 然后使用命令检测,如果显示IPv6地址(inet6 addr: fe80:200:e8ff:fea0:2586/64)证明IPv6已 经加载。# modprobe IPv6; ifconfig -a如果希望Linux系统启动时自动加载Ipv6模块,可以在配置文件:/etc/modules.conf中 加入一行:alias net?pf?10 ipv6 # automatically load IPv6 module on demand4.调整网卡工作模式现在的网卡大多是自适应工作模式,在配置网卡参数时我们很少考虑它的工作模式,有 时发现一些网卡模块已经加载,但是在某些模式工作不稳定。如笔者使用的一块XXX品牌 的杂牌 RTL-8139C 芯片 10/100 自适应网卡在 100 兆全双工状态下极其不稳定(在 Qcheck 的TCP和UDP的测试过程中,数据包遗失率9.12%。)。在Linux环境下,我们可以使用系 统自带的工具mii-tool命令来配置网卡工作模式。显示Linux服务器网卡支持的所有以太网 卡类型,使用命令:# mii-tool veth0: negotiated 100baseTx-FD, link okproduct info: vendor 00:00:00, model 0 rev 0basic mode: autonegotiation enabledbasic status: autonegotiation complete, link okcapabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HDadvertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HDlink partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD从以上信息中可以看出,这块网卡工作在100全双工自适应模式下,“100aseTx-FD”意 为100M Full Duplex。这里可以强制网卡工作在100M半工模式下,输入命令:# mii-tool -F 100baseTx-HD ethO以后恢复网卡的自适应工作模式,输入命令:mii-tool -r eth0另外路由器、交换机、代理服务器等通信量比较大的关键设备上,应该为它指定正确的 工作模式,这样可以提高通信效率。5.DHCP客户端网卡设定如果希望使用 DHCP 是动态主机配置协议,这个协议用于向计算机自动提供 IP 地址, 子网掩码和路由信息。当设备接入这个局域网时,它们会向 DHCP 服务器请求一个 IP 地 址。然后 DHCP 服务器为每个请求的设备分配一个地址,直到分配完该范围内的所有 IP 地 址为止。已经分配的IP地址必须定时地延长借用期。这个延期的过程称作leasing,确保 了当客户机设备在正常地释放 IP 地址之前突然从网络断开时被分配的地址可以归还给服 务器。Linux下配置DHCP客户端有两种方法:图形界面和手工配置。使用图形界面可以使 用neat命令界面。选中“自动获得IP地址设置使用DHCP”即可。通常笔者更喜欢使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network 文件 来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该 目录中,每个设备都有一个叫做ifcfg-ethX的配置文件,ethX是网络设备的名称。如ethO 等。如果你想在引导时启动联网, NETWORKING 变量必须 被设为 yes。 除了此处之外 /etc/sysconfig/network 文件应该包含以下行:NETWORKING=yesDEVICE=ethOBOOTPROTO=dhcpONBOOT=yes6.VPN服务器网卡设置VPN 是由经过相互授权的通信双方在公网上建立的安全通信隧道,数据在隧道中进行 加密传输,用于总部与分支机构的安全通信。虚拟专用网络是一种新的网络技术,用于跨过 Internet或局域网而安全地访问企业网Redhat Linux下的VPN技术主要有CIPE (Crypto IP Encapsulation:加密IP封装)是主要为Linux而开发的VPN实现。CIPE使用加密的IP 分组,这些分组被封装或包围”在数据报(UDP)分组中。CIPE分组被给以目标头信息, 并使用默认的 CIPE 加密机制来加密。 CIPE 使用标准的 Blowfish 或 IDEA 加密算法来支 持加密。根据你所在国家的加密出口法规而定,你可以使用默认方法(Blowfish)来加密你 的专用网上的所有 CIPE 交通。 CIPE 配置可以通过文本文件、图形化的网络管理工具来完 成。这里以通过文本文件为例介绍。首先在服务器和客户端安装 CIPE 软件。官方网站: http:/sites.inka.de/ 运 行 CIPE VPN 服 务 主 要 需 要 建 立 两 个 文 件 : /etc/sysconfig/network-scripts/ifcfg-cipcbX 和/etc/cipe/options.cipcbX。X 是从 0 开始的递增数 字。( 1) VPN 服务器端网卡设置首先手工建立/etc/sysconfig/network-scripts/ifcfg-cipcb0文件,它是VPN服务器的虚拟网 络接口,主要内容:USERCTL=yes #是否允许所有用户修改配置#TYPE=CIPE #接口类型#DEVICE=cipcb0 #给 CIPE 设备命名#ONBOOT=yes #系统启动时激活设备#IPADDR=10.0.0.1 #本地虚拟地址#MYPORT=7777 #通讯端口#PTPADDR=10.0.0.2 #远程虚拟地址#PEER=0.0.0.0 #本地地址,0.0.0.0 表示接受连续监听#ME=192.168.1.9 #对端的 CIPE UDP 地址#TUNNELDEV=eth0 #隧道穿越设备#然后建立/etc/cipe/options.cipcbO文件,这个文件存放密匙,主要内容:cttl 64 #设置载体生存时间值(TTL);推荐的值是64#maxerr - #服务器错误挂起时间#key 54240266869983357939377846801171299051 #128位密匙#( 2 )客户端网卡的配置由于 CIPE 要求服务器和客户机的密匙完全相同所以,首先将密匙文件: options.cipcb 从服务器复制到客户机主机的/etc/cipe/目录中。# scp root192.168.1.9:/etc/cipe/options.cipcb0 /etc/cipe/options.cipcb0Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 192.168.1.9 (RSA) to the list of known hosts.root192.168.1.9s password:options.cipcb0 100%*1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1*rT*rT* rT* rTx61 00:00然后使用 vi 编辑器建立客户端网卡配置文件: /etc/sysconfig/network-scripts/ifcfg-cipcb0包含以下内容:USERCTL=no #不允许客户端修改配置#BOOTPROTO=noneTYPE=CIPE #接口类型#DEVICE=cipcb0 #给 CIPE 设备命名#ONBOOT=yes #系统启动时激活设备#IPADDR=10.0.0.2 #本地虚拟地址#MYPORT=7777 #通讯端口#PTPADDR=10.0.0.1 #远程虚拟地址#PEER=192.168.1.29:7777 #VPN服务器真实IP地址和端口号#ME=192.168.1.9 #对端的 CIPE UDP 地址#TUNNELDEV=eth0 #隧道穿越设备#MTU=“” #使用缺省设置#NETMASK=“” #使用缺省设置#NETWORK=“” #使用缺省设置#BROADCAST=“” #使用缺省设置#(3)使用ifup命令激活VPN网卡# ifup cipcb0这时 VPN 通道已经开启,可以使用 tcpdump 等工具检查。7.无线网卡在 Linux 下安装随着Linux网络技术的快速增长,硬件厂商大大加速对硬件产品对Linux的技术支持。 使得 Linux 支持的无线网卡的数量在过去的一两年里增长显著。一旦在计算机中安装好了 无线局域网卡,首先要做的就是安装驱动来让网卡工作。无线网卡实现了 IEEE 802.11系列 协议中的一种或多种的物理层(PHY)和媒质访问控制子层(MAC)的功能,而驱动是用来控制 无线网卡,向上提供与以太网一致的接口并提供其他一些无线局域网特定的管理接口的。对 于不同厂商的不同网卡,还没有一种统一的方法可以驱动所有的网卡。首先必须确保内核配 置中启动了无线局域网。如果没有无线局域网支持,你应该重新配置、编译内核来启动 Wireless LAN (non-hamradio) Drivers and Wireless Extensions。目前,常见的无线网卡大多为 PCMCIA、PCI 和 USB 三种类型,笔者使用最多的是 PCMCIA(Personal Computer Memory Card International Association )接口的无线网卡。 对 于有些设备,配置无线连接非常简单:只要在您使用的 Linux 发行版本,插入无线网卡, 在设置过程中单击鼠标,并输入正确的联网参数就可以了。通常基于朗讯(Lucent )芯片组的 无线网卡的安装比较简单,笔者使用的 Cisco Aironet Wireless 802.11b 在 Mandrake 8.2 Linu 安装程序可以顺利地找到设备驱动 , 使用基于 intersil PRISM2-based cards 芯片组的 PCMCIA的无线网卡安装就比较复杂了。需要一个第三方工具安装。目前经过www.Linux.org认证的PCMCIA网卡有两大类。使用基于朗讯(Lucent)芯片组 的PCIMCIA无线网卡和使用基于intersil PRISM2-based cards芯片组的PCMCIA的无线网 卡见表1。Lucent chipset-based cards intersil PRISM2-based cardsLucent Wavelan/IEEE and Orimoco Linksys(WPC11 v2.5)Cabletron/Enterays RoarmAbout SMS(2632W)Compaq(WL110、WL210、 WL215) Compaq(WL100、WL200)Apple Airport Cisco Aironet Wireless 802.11b(340、350)IBM High Rate Wireless LAN Dlink DWL-650HP 802.11bWiewless LAN NokiaDELL TrueMobile Intel PRO/Wireless 21003Com AirConnect SAMSUNG 11Mbps WLAN CardLA4111 Spectrum24 Wireless LAN PC Card PROXIM LAN PC CARD HARMONY 80211BNCR WaveLAN/IEEE Adapter总的来说Linux下无线网卡的安装顺序一般是:采取全部安装方式安装 Linux 发行版本,重新编译内核,并除去任何对内核提供的 PCMCIA 驱动程序的部分。了解网卡的规格并且下载并编译相应的 PCMCIA-CS 库和驱动程序下载、编译并安装无线网卡必需的所有驱动程序。这一步骤对于有些网卡是可选的,而对于有些网卡是必须执行的。做与不做很大程度上取决于您所选的无线网卡。修改和无线网卡的相关设定。从新启动Linux系统和网络。设置无线网络相关步骤如下:(1) 用“iwconfig命令来显示无线网卡(ethO、ethl)的信息。在以下的步骤中,用ethX 表示无线网卡的名称。(2) 设置无线网卡的操作模式为Managed:iwconfig ethX mode Managed(3) 如果采用了 WEP加密,需要设置WEP密码:iwconfig ethX key password XXXXXX对应40位和128位加密,password分别为6位和10位的十六进制数字。(4) 设置 SSID,其中 ESSID 为无线接入(Access Point)的 SSID。 iwconfig ethX essid ESSID(5) 创建/etc/sysconfig/network/ifcfg-ethX配置文件,使得机器每次启动时,无线网卡都会自动获得IP地址。该文件内容如下:BOOTPROTO=dhcpMTU=REMOTE_IPADDR=STARTMODE=onbootUNIQUE(6) 启动无线网卡:ifconfig ethX up
展开阅读全文