手动配置网络连接

应该始终将手动配置网络软件作为最后的选择。 建议使用 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 触发硬件初始化。 目前的过程与以前的过程相反。 首先初始化硬件部件,随后执行所有其他操作。 这样,使用现有的这组配置,总能以可能的最佳方式配置数目不固定的设备。

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

表 30.5. 手动网络配置脚本

配置阶段

命令

功能

硬件

hw{up,down,status}

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

接口

getcfg

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

接口

if{up,down,status}

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


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

配置文件

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

/etc/syconfig/hardware/hwcfg-*

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

/etc/sysconfig/network/ifcfg-*

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

►zseries: IBM System z 不支持 USB。接口文件的名称和网络别名包含特定于 System z 的元素,例如 qeth

/etc/sysconfig/network/{config,dhcp,wireless}

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

/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

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

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

/etc/resolv.conf

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

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

/etc/hosts

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

例 30.6. /etc/hosts



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

/etc/networks

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

例 30.7. /etc/networks



loopback     127.0.0.0
localnet     192.168.0.0

/etc/host.conf

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

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

order hosts, bind

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

hosts:搜索 /etc/hosts 文件

bind:访问名称服务器

nis:使用 NIS

multi on/off

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

nospoof on spoofalert on/off

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

trim domainname

在主机名解析后,指定的域名与主机名分开(只要主机名包括域名)。 此选项仅当来自本地域的名称在 /etc/hosts 文件中时才可用,但仍要用附加的域名进行组织。


例 30.8.  /etc/host.conf



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

/etc/nsswitch.conf

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

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

例 30.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

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

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

aliases

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

ethers

以太网地址。

group

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

hosts

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

netgroup

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

networks

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

password

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

protocols

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

rpc

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

services

getservent 使用的网络服务。

shadow

用户阴影密码,由 getspnam 使用;请参见 shadow(5) 手册页。


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

files

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

db

通过数据库访问

nisnisplus

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

dns

仅可用作 hostsnetworks 的扩展名

compat

仅可用作 passwdshadowgroup 的扩展名


/etc/nscd.conf

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

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

/etc/HOSTNAME

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

测试配置

向配置文件写配置之前,可对其进行测试。 要设置测试配置,请使用 ip 命令。 要测试连接,请使用 ping 命令。 也可使用较早的配置工具 ifconfigroute

命令 ipifconfigroute 会直接更改网络配置,而不会在配置文件中描述更改。 如果未在正确的配置文件中输入配置,重引导时将丢失已更改的网络配置。

使用 ip 配置网络接口

ip 是用来显示和配置路由选择、网络设备、策略路由选择以及隧道的工具。 它被设计为替换较早的工具 ifconfig 和 route。

ip 是非常复杂的工具。它的常用语法为 ipoptionsobjectcommand。 可使用以下对象:

link

此对象表示网络设备。

address

此对象表示设备的 IP 地址。

neighbour

此对象表示 ARP 或 NDISC 缓存项。

route

此对象表示路由选择表项。

rule

此对象表示路由选择策略数据库中的规则。

maddress

此对象表示多路广播地址。

mroute

此对象表示多路广播路由缓存项。

tunnel

此对象表示 IP 上的隧道。

如果未提供命令,则将使用默认命令,通常为 list

使用命令 ip link set device_name command 更改设备状态。 例如,要取消激活设备 eth0,请输入 ip link seteth0 down。 要重激活它,可使用 ip link seteth0 up

激活设备后,可对设备进行配置。 要设置 IP 地址,可使用 ip addr addip_address + dev device_name。 例如,要将接口 eth0 的地址设置为带标准广播(选项 brd)的 192.168.12.154/30,则输入 ip addradd 192.168.12.154/30 brd + dev eth0

要拥有活动连接,还必须配置默认网关。 要设置系统的网关,请输入 ip route getgateway_ip_address。 要将一个 IP 地址转换为另一个 IP 地址,请使用 nat: ip route add nat ip_address via other_ip_address

要显示所有设备,可使用 ip link ls。 要只显示正在运行的接口,可使用 ip link ls up。 要打印设备的接口统计信息,可输入 ip -s link lsdevice_name。 要查看设备的地址,请输入 ip addr。 在 ip addr 的输出中,还可找到有关设备 MAC 地址的信息。 要显示所有路由,可使用 ip route show

有关使用 ip 的更多信息,请输入 iphelp 或查看 ip(8) 手册页。 help 选项还可用于所有 ip 对象。例如,如果希望阅读 ipaddr 的帮助,请输入 ipaddr help。 可在 /usr/share/doc/packages/iproute2/ip-cref.pdf 中找到 ip 手册。

使用 ping 测试连接

ping 命令是用于测试 TCP/IP 连接是否有效的标准工具。 它使用 ICMP 协议来将小数据包和 ECHO_REQUEST 数据报文发送到目标主机,并请求即时答复。 如果发送有效,ping 将据此显示一条消息,指明网络链接基本有效。

ping 不仅能测试两台计算机之间的连接:它还能提供关于连接质量的基本信息。在例 30.10 “命令 ping 的输出”中,可查看 ping 输出示例。 倒数第二行包含有关已发送的包数、丢失的包和 ping 运行的总时间量的信息。

您可以使用主机名或 IP 地址(例如 pingexample.comping130.57.5.75)作为目标。 程序会一直发送包,直到您按 Ctrl+C

如果只需要检查连接功能,则可使用 -c 选项来限制包数。 例如,要将 ping 限制为三个包,请输入 ping-c 3 192.168.0

例 30.10. 命令 ping 的输出

ping -c 3 example.com
PING example.com (130.57.5.75) 56(84) bytes of data.
64 bytes from example.com (130.57.5.75): icmp_seq=1 ttl=49 time=188 ms
64 bytes from example.com (130.57.5.75): icmp_seq=2 ttl=49 time=184 ms
64 bytes from example.com (130.57.5.75): icmp_seq=3 ttl=49 time=183 ms
--- example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2007ms
rtt min/avg/max/mdev = 183.417/185.447/188.259/2.052 ms

两个包之间的默认时间间隔为一秒。 ping 提供了选项 -i 来更改时间间隔。 例如,要将 ping 时间间隔延长为十秒,则输入 ping-i 10 192.168.0

在带有多个网络设备的系统中,有时通过特定接口地址发送 ping 将会非常有用。 要执行此操作,可将 -I 选项结合选定设备名称一起使用,例如 ping-I wlan1 192.168.0

有关使用 ping 的更多选项和信息,请输入 ping-h 或查看 ping (8) 手册页。

使用 ifconfig 配置网络

ifconfig 是传统的网络配置工具。 与 ip 相比,您只能将 ifconfig 用于接口配置。 如果希望配置路由选择,可使用 route

[Note]ifconfig 和 ip

程序 ifconfig 已过时。 请使用 ip。

毫无疑问,ifconfig 可显示当前活动接口的状态。 在例 30.11 “命令 ifconfig 的输出”中可看见 ifconfig 具有非常整齐和详细的输出。 输出的第一行中还包含关于设备 MAC 地址的信息和 HWaddr 的值。

例 30.11. 命令 ifconfig 的输出

eth0      Link encap:Ethernet  HWaddr 00:08:74:98:ED:51
          inet6 addr: fe80::208:74ff:fe98:ed51/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:634735 errors:0 dropped:0 overruns:4 frame:0
          TX packets:154779 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000
          RX bytes:162531992 (155.0 Mb)  TX bytes:49575995 (47.2 Mb)
          Interrupt:11 Base address:0xec80
      
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8559 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8559 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:533234 (520.7 Kb)  TX bytes:533234 (520.7 Kb)    
      
wlan1     Link encap:Ethernet  HWaddr 00:0E:2E:52:3B:1D
          inet addr:192.168.2.4  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20e:2eff:fe52:3b1d/64 Scope:Link
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50828 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43770 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:45978185 (43.8 Mb)  TX bytes:7526693 (7.1 Mb)

有关使用 ifconfig 的更多选项和信息,请输入 ifconfig-h 或参见 ifconfig (8) 手册页。

使用 route 配置路由选择

route 是用于操作 IP 路由选择表的程序。 可使用它来查看路由选择配置和添加或删除路由。

[Note]route 和 ip

程序 route 已过时。 请使用 ip。

如果需要有关路由选择配置的快速而又易懂的信息来确定路由选择问题,则 route 将非常有用。 要查看当前路由配置,请输入 route-n 作为 root

例 30.12.  命令 -n 的输出



route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.20.0.0       *               255.255.248.0   U         0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
loopback        *               255.0.0.0       U         0 0          0 lo
default         styx.exam.com   0.0.0.0         UG        0 0          0 eth0

有关使用 route 的更多选项和信息,请输入 route-h 或参见 route (8) 手册页。

启动脚本

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

表 30.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/postfix

控制 postfix 进程。

/etc/init.d/ypserv

启动 NIS 服务器。

/etc/init.d/ypbind

启动 NIS 客户机。