手动配置网络连接

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

当内核检测到某个网卡并创建相应网络接口时,会根据设备发现的顺序或装载内核模块的顺序为设备指派一个名称。只有在控制程度极为简单或极为严格的硬件环境中,才能预测默认内核设备名称。允许在运行时添加或删除硬件的系统或者支持自动配置设备的系统不能期望在各个重引导之间由内核指派稳定的网络设备名称。

但是,所有系统配置工具均依赖持久性接口名称。该问题通过 udev 解决。udev 永久网络生成器 (/lib/udev/rules.d/75-persistent-net-generator.rules) 会生成匹配硬件的规则(默认情况下使用其硬件地址),并为该硬件分配永久唯一接口。网络接口的 udev 数据库储存在文件 /etc/udev/rules.d/70-persistent-net.rules 中。文件中的每一行描述一个网络接口并指定其永久名称。系统管理员可通过编辑 NAME="" 项来更改指派的名称。也可以使用 YaST 修改永久规则。

表 20.5 “手动网络配置脚本”总结了网络配置中涉及的最重要脚本。

表 20.5. 手动网络配置脚本

命令

功能

ifup、ifdown、ifstatus

if 脚本启动或停止网络接口,或者返回指定接口的状态。有关更多信息,请参见 ifup 手册页。

rcnetwork

rcnetwork 脚本可用于启动、停止或重启动所有网络接口(或某个指定接口)。使用 rcnetwork stoprcnetwork startrcnetwork restart 可分别停止、启动和重启动网络接口。如果要停止、启动或重启动一个接口,请在命令后加上该接口名称,例如 rcnetwork restart eth0rcnetwork status 命令显示接口的状态、其 IP 地址以及 DHCP 客户端是否正在运行。通过 rcnetwork stop-all-dhcp-clientsrcnetwork restart-all-dhcp-clients,您可停止或重启动运行在网络接口上的 DHCP 客户端。


有关 udev 和永久设备名称的更多信息,请参见第 13 章 使用 udev 进行动态内核设备管理

配置文件

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

/etc/sysconfig/network/ifcfg-*

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

有关 ifcfg.template 的信息,请参见第 20.6.1.2 节 “/etc/sysconfig/network/config/etc/sysconfig/network/dhcp/etc/sysconfig/network/wireless

/etc/sysconfig/network/config/etc/sysconfig/network/dhcp/etc/sysconfig/network/wireless

文件 config 包含 ifupifdownifstatus 行为的常规设置。dhcp 包含用于无线 LAN 卡的 DHCP 和 wireless 设置。所有三个配置文件中的变量均已注释掉。/etc/sysconfig/network/config 中的一些变量也可用于 ifcfg-* 文件,在这些文件中它们具有更高优先级。/etc/sysconfig/network/ifcfg.template 文件列出可以按接口指定的变量。但是,/etc/sysconfig/network/config 中的多数变量是全局变量,不能在 ifcfg-files 中覆盖。例如,NETWORKMANAGERNETCONFIG_* 变量是全局变量。

/etc/sysconfig/network/routes/etc/sysconfig/network/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 开始。注释以 # 符号开头。例 20.5 “/etc/resolv.conf显示 /etc/resolv.conf 的内容。

但是,/etc/resolv.conf 不应手动编辑。而是由 netconfig 脚本生成。要不使用 YaST 而定义静态 DNS 配置,请手动编辑 /etc/sysconfig/network/config 文件中的相应变量:NETCONFIG_DNS_STATIC_SEARCHLIST(用于主机名查询的 DNS 域名列表)、NETCONFIG_DNS_STATIC_SERVERS(用于主机名查询的名称服务器 IP 地址列表)和 NETCONFIG_DNS_FORWARDER(定义必须要配置的 DNS 转发器的名称)。要使用 netconfig 禁用 DNS 配置,请设置 NETCONFIG_DNS_POLICY=''。有关 netconfig 的更多信息,请参见 man 8 netconfig

例 20.5. /etc/resolv.conf

# Our domain
search example.com
#
# We use dns.example.com (192.168.1.116) as nameserver
nameserver 192.168.1.116

/sbin/netconfig

netconfig 是一个用于管理附加网络配置设置的模块化工具。它合并了静态定义的设置和自动配置机制根据预定义策略以 dhcp 或 ppp 形式提供的设置。通过调用负责修改配置文件和重启动服务或相似操作的 netconfig 模块将所需更改应用于系统。

netconfig 识别三种主要操作。netconfig modifynetconfig remove 由诸如 dhcp 或 ppp 的守护程序在 netconfig 中提供或删除设置。仅 netconfig update 命令可用于用户:

modify

netconfig modify 命令修改特定于当前接口和服务的动态设置并更新网络配置。Netconfig 从标准输入或使用 --lease-file filename 选项指定的文件中读取设置,并将其储存在内部,直到系统重引导(或者执行下一个修改或删除操作)。已存在的相同接口和服务组合设置将会重写。该接口由 -i interface_name 参数指定。该服务由 -s service_name 参数指定。

remove

netconfig remove 命令为指定接口和服务组合删除由修改操作提供的动态设置并更新网络配置。该接口由 -i interface_name 参数指定。该服务由 -s service_name 参数指定。

update

netconfig update 命令使用当前设置更新网络配置。当策略或静态配置更改时,这非常有用。如果要仅更新指定服务(dnsnisntp),请使用 -m module_type 参数。

netconfig 策略和静态配置设置可手动定义或者使用 YaST 在 /etc/sysconfig/network/config 文件中定义。由自动配置工具作为 hdcp 或 ppp 提供的动态配置设置通过 netconfig modifynetconfig remove 操作由这些工具直接传递。NetworkManager 也使用 netconfig modifynetconfig remove 操作。启用 NetworkManager 时,netconfig(在策略模式 auto 中)仅使用 NetworkManager 设置,忽略任何其他接口使用传统 ifup 方法配置的设置。如果 NetworkManager 不提供任何设置,也将静态设置用作备份。不支持混合使用 NetworkManager 和传统 ifup 方法。

有关 netconfig 的更多信息,请参见 man 8 netconfig

/etc/hosts

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

例 20.6. /etc/hosts

127.0.0.1 localhost
192.168.2.100 jupiter.example.com jupiter
192.168.2.101 venus.example.com venus

/etc/networks

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

例 20.7. /etc/networks

loopback     127.0.0.0
localnet     192.168.0.0

/etc/host.conf

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

表 20.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 文件中时才有用,但仍应通过附带的域名进行识别。


例 20.8. /etc/host.conf

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

/etc/nsswitch.conf

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

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

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

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

表 20.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) 手册页。


表 20.8. NSS数据库的配置选项

files

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

db

通过数据库访问

nisnisplus

NIS,另请参见 第 3 章 Using 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 是用来显示和配置路由选择、网络设备、策略路由选择以及隧道的工具。

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

link

此对象表示网络设备。

address

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

neighbour

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

route

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

rule

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

maddress

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

mroute

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

tunnel

此对象表示 IP 上的隧道。

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

使用命令 ip link set device_name command 更改设备状态。 例如,要取消激活设备 eth0,请输入 ip link set eth0 down。要重激活它,可使用 ip link set eth0 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 addgateway_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 不仅能测试两台计算机之间的连接:它还能提供关于连接质量的基本信息。在例 20.10 “命令 ping 的输出”中,可查看 ping 输出示例。 倒数第二行包含有关已发送的包数、丢失的包和 ping 运行的总时间量的信息。

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

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

例 20.10. 命令 ping 的输出

ping -c 3 example.com
PING example.com (192.168.3.100) 56(84) bytes of data.
64 bytes from example.com (192.168.3.100): icmp_seq=1 ttl=49 time=188 ms
64 bytes from example.com (192.168.3.100): icmp_seq=2 ttl=49 time=184 ms
64 bytes from example.com (192.168.3.100): 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 example.com

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

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

使用 ifconfig 配置网络

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

[Note]ifconfig 和 ip

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

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

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

例 20.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) 手册页。

启动脚本

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

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

/etc/init.d/network

此脚本处理网络接口的配置。如果 network 服务未启动,则不实施任何网络接口。

/etc/init.d/xinetd

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

/etc/init.d/rpcbind

启动用于将 RPC 程序号转换为通用地址的 rpcbind 实用程序。它是 RPC 服务所必需的,如 NFS 服务器。

/etc/init.d/nfsserver

启动 NFS 服务器。

/etc/init.d/postfix

控制 postfix 进程。

/etc/init.d/ypserv

启动 NIS 服务器。

/etc/init.d/ypbind

启动 NIS 客户机。