18.6. 手工配置网络连接

应该始终将手工配置网络软件作为最后的选择。建议使用 YaST。但是,对网络配置背景信息的了解将对您使用 YaST 有所帮助。

可以通过热插拔检测并配置所有内置网卡及热插拔网卡(PCMCIA、USB 和某些 PCI 卡)。系统以两种不同的方式处理网卡:首先将其作为物理设备对待,其次将其作为接口对待。设备的插入或检测将触发一个热插拔事件。此热插拔事件通过脚本 hwup 触发设备的初始化。当将网卡作为新网络接口进行初始化时,内核将生成另一个热插拔事件,该事件触发通过 ifup 设置接口的操作。

内核按照接口注册的时间顺序对接口名进行编号。对于名称的指派,初始化顺序是决定性的。如果多个网卡中的一个失败,则所有随后初始化的网卡的编号将发生变化。对于真正的可热插拔网卡,连接设备的顺序非常重要。

为了实现灵活的配置,设备(硬件)的配置和接口的配置是分开进行的,配置到设备和接口的映射不再以接口名为基础进行管理。设备配置位于 /etc/sysconfig/hardware/hwcfg-* 中。接口配置位于 /etc/sysconfig/network/ifcfg-* 中。指派配置名的方式使这些名称可以描述所关联的设备和接口。因为以前从驱动程序到接口名的映射需要静态接口名,所以 /etc/modprobe.conf 中不再进行此映射。在新概念中,此文件中的别名项可能导致不希望出现的副作用。

配置名(hwcfg-ifcfg- 后的任何内容)可以通过插槽、设备特定的 ID 或接口名对设备进行描述。例如,某个 PCI 卡的配置名可能是 bus-pci-0000:02:01.0(PCI 插槽)或 vpid-0x8086-0x1014-0x0549(厂商和产品 ID)。关联接口的名称可能是 bus-pci-0000:02:01.0wlan-id-00:05:4e:42:31:7a (MAC 地址)。

若要将某个网络配置指派给某种类型的任何一个卡(一次只插入一个该类型的卡)而不是某个特定的卡,请选择不是非常特定的配置名。例如,可以将 bus-pcmcia 用于所有 PCMCIA 卡。另一方面,可以通过在前面加上接口类型对名称进行限制。例如,可以为连接在 USB 端口上的 WLAN 卡指派 wlan-bus-usb

系统始终使用对接口或提供接口的设备描述最清楚的配置。搜索最合适的配置是由 getcfg 处理的。getcfg 的输出提供可用于描述设备的所有信息。getcfg 的手册页中介绍了有关指定配置名的详细信息。

使用上面介绍的方法,即使不总是以相同的顺序初始化网络设备,也可以用正确的配置对网络接口进行配置。但是,接口的名称仍取决于初始化顺序。有两种方法可以确保对特定网卡的接口进行可靠的访问:

ifup 需要现有的接口,因为它不初始化硬件。硬件的初始化是由命令 hwup 处理的(由 hotplugcoldplug 执行)。当初始化设备时,将通过 hotplug 为新接口自动执行 ifup,如果启动方式是 onboothotplugauto 并且启动了 network 服务,则将设置接口。以前,命令 ifupinterfacename 触发硬件初始化。目前的过程与以前的过程相反。首先初始化硬件部件,随后执行所有其它操作。这样,使用现有的这组配置,总能以可能的最佳方式配置数目不固定的设备。

表 18.5 “手工网络配置脚本” 总结了网络配置中所涉及的最重要的脚本。只要有可能,硬件和接口将对脚本进行区分。

表 18.5. 手工网络配置脚本

配置阶段

命令

功能

硬件

hw{up,down,status}

热插拔子系统执行此 hw* 脚本来初始化设备、撤消初始化或查询设备的状态。hwup 的手册页中提供了详细信息。

接口

getcfg

getcfg 可用于查询与配置名或硬件描述关联的接口名。getcfg 的手册页中提供了详细信息。

接口

if{up,down,status}

if* 脚本启动现有的网络接口或返回指定接口的状态。ifup 的手册页中提供了详细信息。

有关热插拔和持久性设备名的详细信息在第 12 章 使用 udev 进行动态内核设备管理中有所介绍。

18.6.1. 配置文件

本节对网络配置文件进行了概述并解释了它们的作用和所使用的格式。

18.6.1.1. /etc/syconfig/hardware/hwcfg-*

这些文件包含网卡和其它设备的硬件配置。它们包含所需的参数,例如内核模块、启动方式和脚本关联。有关详细信息,请参见 hwup 的手册页。不管现有硬件如何,都会在启动冷插拔时应用 hwcfg-static-* 配置。

18.6.1.2. /etc/sysconfig/network/ifcfg-*

这些文件包含网络接口的配置。它们包含启动方式和 IP 地址等信息。可能的参数在 ifup 的手册页中有所介绍。另外,如果应将常规设置只用于一个接口,则文件 dhcpwirelessconfig 中的所有变量都可用于 ifcfg-* 文件。

18.6.1.3. /etc/sysconfig/network/config, dhcp, wireless

文件 config 包含 ifupifdownifstatus 行为的常规设置。dhcp 包含用于无线 LAN 卡的 DHCP 和 wireless 设置。对所有这三个配置文件中的变量都进行了注释,它们还可用于 ifcfg-* 文件中,该文件将以较高的优先级处理这三个配置文件。

18.6.1.4. /etc/sysconfig/network/routes,ifroute-*

在这里确定 TCP/IP 包的静态路由。可以在 /etc/sysconfig/network/routes 文件中输入各项系统任务要求的所有静态路由:连接主机的路由、通过网关连接主机的路由和连接网络的路由。需要单独路由的各个接口要定义附加配置文件:/etc/sysconfig/network/ifroute-*。用接口名称替换 *。路由选择配置文件中的项如下所示:

# Destination     Dummy/Gateway     Netmask            Device
#
127.0.0.0         0.0.0.0           255.255.255.0      lo
204.127.235.0     0.0.0.0           255.255.255.0      eth0
default           204.127.235.41    0.0.0.0            eth0
207.68.156.51     207.68.145.45     255.255.255.255    eth1
192.168.0.0       207.68.156.51     255.255.0.0        eth1

路由目标位于首列。此列可以包含网络或主机的 IP 地址,或者在有可访问名称服务器时,包含完全限定的网络或主机名。

第二列包含默认网关或通过其可访问主机或网络的网关。第三列包含网关后的网络或主机的子网掩码。例如,网关后主机的掩码为 255.255.255.255

第四列只与本地主机连接的网络有关,如回路、Ethernet、ISDN、PPP 和虚拟设备。必须在此输入设备名。

(可选)可以使用第五列来指定路由的类型。不需要的列中应该包含一个减号 -,这样才能确保分析程序正确解析命令。关于详细信息,请参见 routes(5) 手册页。

18.6.1.5. /etc/resolv.conf

在此文件中指定主机所属的域(关键字 search)。同时列出的还有要访问的名称服务器地址的状态(关键字 nameserver)。可以指定多个域名。当解析不是完全限定的名称时,将尝试通过附加单独的 search 项生成一个完全限定的名称。通过输入多行可以输入多个名称服务器,每行都以 nameserver 开头。注释符号 # 开头。YaST 在此文件中输入指定的名称服务器。例 18.5 “/etc/resolv.conf显示 /etc/resolv.conf 的内容。

例 18.5. /etc/resolv.conf


# Our domain
search example.com
#
# We use sun (192.168.0.20) as nameserver
nameserver 192.168.0.20

某些服务(例如 pppd (wvdial)、ipppd (isdn)、dhcpdhcpcddhclient)、pcmciahotplug 通过脚本 modify_resolvconf 修改文件 /etc/resolv.conf。如果文件 /etc/resolv.conf 已被此脚本临时修改,则它将包含预定义的注释,给出有关修改它的服务的信息、备份原始文件的位置以及如何关闭自动修改机制。如果 /etc/resolv.conf 被多次修改,则该文件以嵌套的形式包括修改。即使还原的顺序不同于进行修改的顺序,也可以以一种彻底的方式进行还原。可能需要这种灵活性的服务包括 isdnpcmciahotplug

如果未以正常、彻底的方式终止服务,则可以使用 modify_resolvconf 恢复原始文件。另外,在系统引导时,将检查是否有由未彻底终止产生的、经修改的 resolv.conf(例如,系统崩溃后),如果有,则将恢复原始(未经修改的)resolv.conf

YaST 使用命令 modify_resolvconf check 检查 resolv.conf 是否已被修改并将随后警告用户这些更改将在恢复文件后丢失。除此之外,YaST 将不使用 modify_resolvconf,这意味着通过 YaST 更改 resolv.conf 的效果与任何手工更改的效果相同。在两种情况下,更改都具有永久效果。上述服务请求的修改只是临时的。

18.6.1.6.  /etc/hosts

在此文件中,如 例 18.6 “/etc/hosts 中所示,将为主机名指派 IP 地址。如果未实施名称服务器,则将与其建立 IP 连接的所有主机必须列在此处。在此文件中为每个主机输入一行,包含 IP 地址、完全限定的主机名和主机名。IP 地址必须在每行的开头,各项用空格和制表符隔开。注释总是以 # 符号开头。

例 18.6. /etc/hosts


127.0.0.1 localhost
192.168.0.20 sun.example.com sun
192.168.0.0 earth.example.com earth

18.6.1.7. /etc/networks

在这里,网络名称被转换为网络地址。格式类似于 hosts 文件的格式,只是网络名称在地址的前面。请参见 例 18.7 “/etc/networks

例 18.7. /etc/networks


loopback     127.0.0.0
localnet     192.168.0.0

18.6.1.8. /etc/host.conf

此文件控制名称解析,即通过解析程序库转换主机名和网络名称。此文件只用于链接到 libc4 或 libc5 的程序。对于当前的 glibc 程序,请参见 /etc/nsswitch.conf 中的设置。参数必须始终单独在一行上。注释以 # 符号开头。表 18.6 “/etc/host.conf 的参数” 显示了可用的参数。例 18.8 “ /etc/host.conf中显示了 /etc/host.conf 的示例。

表 18.6. /etc/host.conf 的参数

order hostsbind

指定访问服务以进行名称解析的顺序。可用参数有(使用空格或逗号隔开):

hosts:搜索 /etc/hosts 文件

bind:访问名称服务器

nis:使用 NIS

multi on/off

定义 /etc/hosts 中输入的主机是否可以具有多个 IP 地址。

nospoof on spoofalert on/off

这些参数影响名称服务器 spoofing,但除此之外,它们对网络配置没有任何影响。

trim domainname

在主机名解析后,指定的域名与主机名分开(只要主机名包括域名)。如果只有本地域的名称在 /etc/hosts 文件中,但仍应通过附带的域名进行识别,则可以使用此选项。

例 18.8.  /etc/host.conf


# We have named running
order hosts bind
# Allow multiple addrs
multi on

18.6.1.9. /etc/nsswitch.conf

GNU C Library 2.0 的引入与 名称服务转换 (NNS) 的引入是同时进行的。有关详细信息,请参见 nsswitch.conf(5) 手册页和 GNU C Library 参见手册

查询的顺序是在文件 /etc/nsswitch.conf 中定义的。例 18.9 “/etc/nsswitch.conf中显示了 nsswitch.conf 的示例。注释以 # 符号开头。在本例中,hosts 数据库下的项意味着通过 DNS(请参见 第 20 章 域名系统)将请求发送到 /etc/hosts (files)。

例 18.9. /etc/nsswitch.conf


passwd:     compat
group:      compat

hosts:      files dns
networks:   files dns

services:   db files
protocols:  db files

netgroup:   files
automount:  files nis

表 18.7 “通过 /etc/nsswitch.conf 可用的数据库” 中列出了 NSS 上可用的“数据库”。另外,近期将推出 automountbootparamsnetmaskspublickey表 18.8 “NSS“数据库”的配置选项”中列出了 NSS 数据库的配置选项。

表 18.7. 通过 /etc/nsswitch.conf 可用的数据库

aliases

sendmail 实施的邮件别名;请参见 man 5 aliases

ethers

Ethernet 地址。

group

getgrent 使用的用户组。另请参见 group 的手册页。

hosts

gethostbyname 和类似函数使用的主机名和 IP 地址。

netgroup

网络中用于控制访问权限的主机和用户列表,请参见 netgroup(5) 手册页。

networks

getnetent 使用的网络名称和地址。

passwd

getpwent 使用的用户口令;请参见 passwd(5) 手册页。

protocols

getprotoent 使用的网络协议;请参见 protocols(5) 手册页。

rpc

getrpcbyname 和类似函数使用的远程过程调用名称和地址。

services

getservent 使用的网络服务。

shadow

getspnam 使用的用户的影子口令;请参见 shadow(5) 手册页。

表 18.8. NSS“数据库”的配置选项

files

直接访问文件,例如 /etc/aliases

db

通过数据库访问

nisnisplus

NIS,另请参见 第 21 章 使用 NIS

dns

只能用作 hostsnetworks 的扩展

compat

只能用作 passwdshadowgroup 的扩展

18.6.1.10. /etc/nscd.conf

此文件用于配置 nscd(名称服务超速缓存守护程序)。请参见 nscd(8)nscd.conf(5) 手册页。默认情况下,passwdgroups 的系统项由 nscd 进行缓存。 这对于目录服务(例如 NIS 和 LDAP)的性能很重要,因为如果不是这样,每次访问名称或组都需要网络连接。默认情况下,不对 hosts 进行缓存,因为 nscd 中缓存主机的机制将导致本地系统无法信任正向和反向查找检查。请设置缓存 DNS 服务器,而不是让 nscd 缓存名称。

如果激活 passwd 的缓存,则通常需要 15 秒才能识别新添加的本地用户。通过使用命令 rcnscd restart 重启动 nscd 可缩短此等待时间。

18.6.1.11. /etc/HOSTNAME

此文件提供不附带域名的主机名。当引导计算机时,此文件将被多个脚本读取。它可能只包含一行,该行中设置了主机名。

18.6.2. 启动脚本

除了上面介绍的配置文件之外,还有多个脚本在引导计算机时装载网络程序。只要系统切换到某个多用户运行级别,就将启动这些脚本。表 18.9 “网络程序的一些启动脚本” 中介绍了其中的一些脚本。

表 18.9. 网络程序的一些启动脚本

/etc/init.d/network

此脚本处理网络接口的配置。硬件必须已被 /etc/init.d/coldplug(通过 hotplug)初始化。如果未启动 network 服务,当通过热插拔插入网络接口时,不实施任何网络接口。

/etc/init.d/inetd

启动 xinetd。xinetd 可用于使服务器服务在系统上可用。例如,它可以在初始化 FTP 连接时启动 vsftpd。

/etc/init.d/portmap

启动 RPC 服务器所需的端口映射器,例如 NFS 服务器。

/etc/init.d/nfsserver

启动 NFS 服务器。

/etc/init.d/sendmail

控制 sendmail 进程。

/etc/init.d/ypserv

启动 NIS 服务器。

/etc/init.d/ypbind

启动 NIS 客户机。