1.2.3 配置网络接口
1.网卡的选择
一般来说,2.4版本以后的Linux可以支持的网卡芯片组数量已经很完备了,包括著名厂商,如Intel,以及使用广泛的RealTek、Via等网卡芯片都已经被支持,所以使用者可以很轻松地设定好他们的网卡。但是由于Linux发行版本众多(目前超过188个),使用前最好先查看Linux发行版本的文档。以RHEL 4.0为例,这个设备列表在Ethernet-HOWTO文档中。另外最直接的方法是查看目录/lib/modules/ release/kernel/drivers/net,其中release是内核版本,可以使用命令"uname-r"获得,对于RHEL 4.0内核版本是2.6.9-5EL。
#ls /lib/modules/2.6.9-5EL/kernel/drivers/net/
3c59x.ko bonding fealnx.ko netdump.ko pppox.ko
starfire.ko tun.ko 8139cp.ko dl2k.ko forcedeth.ko
ns83820.ko ppp_synctty.ko sungem.ko typhoon.ko8139too.ko
dummy.ko hp100.ko pcmcia r8169.ko sungem_phy.ko
via-rhine.ko82596.ko e1000 ixgb pcnet32.ko s2io.ko
sunhme.ko via-velocity.ko8390.ko e100.ko mii.ko
ppp_async.ko sis900.ko tg3.ko wirelessacenic.ko
eepro100.ko natsemi.ko ppp_deflate.ko sk98lin tlan.koamd8111e.ko
epic100.ko ne2k-pci.ko ppp_generic.ko slhc.ko tokenringb44.ko
ethertap.ko netconsole.ko pppoe.ko smc9194.ko tulip
可以看到这个目录列出所有Linux内核支持的网络设备驱动程序。其中大部分是以太网卡(8139、3COM、Intel),也有一些是其他类型的设备。对于初学者应当尽量选择目录中已经列出的网卡。
注意 以.o后缀结束的文件就是驱动程序,而没有后缀的是驱动程序目录。
2.检查网卡是否加载
驱动硬件是操作系统最基本的功能,操作系统通过各种驱动程序来驾驭硬件设备,和Windows系统不同,Linux内核目前采用可加载的模块化设计(LKMs Loadable Kernel Modules),就是将最基本的核心代码编译在内核中,网卡驱动程序是作为内核模块动态加载的,可以使用命令"lsmod"查看加载情况:
## lsmod
Module Size Used by
dm_mod 54741 0
button 6481 0
battery 8901 0
ac 4805 0
md5 4033 1
joydev 10241 0
uhci_hcd 31065 0
ehci_hcd 30917 0
snd_via82xx 26437 0
snd_ac97_codec 63889 1 snd_via82xx
snd_pcm_oss 49017 0
soundcore 9889 1 snd
tulip 45025 1
via_rhine 23113 2
mii 4673 1 via_rhine
ext3 116809 2
jbd 71257 1 ext3
对每行而言,第一列是模块名称;第二列是模块大小;第三列是调用数。调用数后面的信息对每个模块而言都有所不同。如果(unused)被列在某模块的那行中,说明该模块当前未被使用。如果(autoclean)被列在某模块的那行中,说明该模块可以被rmmod-a命令自动清除,当这个命令被执行后,所有自从上次被自动清除后未被使用的且标记了"autoclean"的模块都会被卸载。从以上粗体字符可以看到Linux计算机中两块网卡模块tulip和via_rhine已经加载。对应的网卡商业型号分别是:
- tulip Lite-On Communications Inc LNE100TX [Linksys EtherFast 10/100]。
- via_rhine Via VT6102[Rhine-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网卡为例(一款具有安全特性的网卡)看看如何进行模块编译。首先在其网站http://www.3com.com/infodeli/tools/nic/linuxdownload.htm下载适合你使用内核版本的相关驱动程序,这里以2.4内核为例。
#wegt http://www.3com.com/infodeli/tools/nic/3c990-1.0.0a.tar.gz
另外在开始编译核心模块之前,因为驱动程序需要配合核心来编译,所以会使用到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.conf
3.为新网卡设定IP地址
Linux网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为0,其他设备依次被编号为1,2,3等。但是网卡并不是作为裸设备出现在/dev目录下,而是存在内存中。eth0、eth1是以太网卡接口,它们用于大多数的以太网卡,包括许多并行端口以太网卡。本节主要讨论这类网卡。为Linux以太网卡设定IP地址的方式非常灵活,你可以选择适合你工作情况的方法。
(1)使用ip或ifconfig命令
ifconfig命令是最重要的Linux网络命令,它最主要的用途是设定、修改网卡的IP地址:
#ifconfig eth0 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和更高版本的Linux内核上显得有些落伍。使用iproute2前,你应该确认已经安装了这个工具。这个包的名字在Red Hat 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:Alias
(2)使用netconfig命令
netconfig命令可以设置网络设备的IP地址,netconfig命令可以永久保存设置。使用方法是:"netconfig ethX"。使用命令"netconfig eth0"后,会在命令行下弹出一个对话框,这时即可进行设定,如图1-4所示。
图1-4 netconfig配置界面
设定结束后,用"Tab"键选择"OK",即可保存设置并且退出,然后使用命令"service network restart"激活,即可生效。
(3)使用neat命令
使用neat命令需要配置好X Window系统,在命令行下运行neat命令后,添加IP地址和其他相关参数后保存设置,重新启动网络和网络服务或计算机,如图1-5所示。
图1-5 图形界面添加IP地址
另外,neat命令还有一个等价命令"redhat-config-network",二者完全相同。neat和redhat-config- config命令可以永久保存设置。
(4)修改TCP/IP网络配置文件
除非另行指定,Red Hat Linux网卡相关的TCP/IP网络配置文件是/etc/sysconfig/network-scripts/ ifcfg-ethX,其中X从0开始,第一个以太网配置文件即/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器可以修改这个文件,也可以修改网卡IP地址。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=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。一般基于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 demand
4.调整网卡工作模式
现在的网卡大多是自适应工作模式,在配置网卡参数时,我们很少考虑它的工作模式,有时发现一些网卡模块已经加载,但是在某些模式工作不稳定。如一块XXX品牌的杂牌RTL-8139C芯片10/100自适应网卡,在100M全双工状态下极其不稳定(在Qcheck的TCP和UDP的测试过程中,数据包遗失率9.12%)。在Linux环境下,我们可以使用系统自带的工具mii-tool命令来配置网卡工作模式。显示Linux服务器网卡支持的所有以太网卡类型,使用命令:
# mii-tool -v
eth0: negotiated 100baseTx-FD, link ok
product info: vendor 00:00:00, model 0 rev 0
basic mode: autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
从以上信息中可以看出,这块网卡工作在100M全双工自适应模式下,"100baseTx-FD"表示100M Full Duplex。这里可以强制网卡工作在100M半双工模式下,输入命令:
#mii-tool -F 100baseTx-HD eth0
然后恢复网卡的自适应工作模式,输入命令:
#mii-tool -r eth0
另外,在路由器、交换机、代理服务器等通信量比较大的关键设备上,应该为它指定正确的工作模式,这样可以提高通信效率。
5.DHCP客户端的网卡设定
DHCP是动态主机配置协议,这个协议用于向计算机自动提供IP地址、子网掩码和路由信息。当设备接入这个局域网时,它们会向DHCP服务器请求一个IP地址。然后DHCP服务器为每个请求的设备分配一个地址,直到分配完该范围内的所有IP地址为止。已经分配的IP地址必须定时地延长借用期。这个延期的过程称做leasing,确保了当客户机设备在正常释放IP地址之前,突然从网络断开时被分配的地址可以归还给服务器。Linux下配置DHCP客户端有两种方法:图形界面和手工配置。使用图形界面可以使用neat命令界面(如图1-5所示),选中"自动获得IP地址设置使用DHCP"即可。
选择手工配置DHCP的客户,需要修改/etc/sysconfig/network文件来启用联网,并修改/etc/ sysconfig/network-scripts目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做ifcfg-ethX的配置文件,ethX是网络设备的名称,如eth0等。如果你想在引导时启动联网,NETWORKING变量必须被设为yes。除此之外,/etc/sysconfig/network文件应该包含以下行:
NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
6.在Linux下安装无线网卡
随着Linux网络技术的快速增长,硬件厂商大大提高了硬件产品对Linux的技术支持。使得Linux 支持的无线网卡的数量在过去的一两年里增长显著。一旦在计算机中安装好了无线局域网卡,首先要做的就是安装驱动来让网卡工作。无线网卡实现了IEEE 802.11系列协议中的一种或多种的物理层(PHY)和媒质访问控制子层(MAC)的功能,而驱动是用来控制无线网卡,向上提供与以太网一致的接口和其他一些无线局域网特定的管理接口的。对于不同厂商的不同网卡,还没有一种统一的方法可以驱动所有的网卡。首先必须确保内核配置中启动了无线局域网,如果没有无线局域网支持,你应该重新配置、编译内核来启动"Wireless LAN (non-hamradio) Drivers and Wireless Extensions"。
设置无线网络相关步骤如下。
用"iwconfig"命令来显示无线网卡(eth0、eth1)的信息。在以下步骤中,用ethX表示无线网卡的名称。
设置无线网卡的操作模式为Managed:
#iwconfig ethX mode Managed
如果采用了WEP加密,需要设置WEP密码:
#iwconfig ethX key password XXXXXX
对应40位和128位加密,password分别为6位和10位的十六进制数字。
设置SSID,其中ESSID为无线接入(Access Point)的SSID:
# iwconfig ethX essid ESSID
创建/etc/sysconfig/network/ifcfg-ethX配置文件,使得机器每次启动时,无线网卡都会自动获得IP地址。该文件内容如下:
BOOTPROTO='dhcp'
MTU=''
REMOTE_IPADDR=''
STARTMODE='onboot'
UNIQUE=''
启动无线网卡:
#ifconfig ethX up