跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 系统 / 基本网络知识
适用范围 SUSE Linux Enterprise Server 15 SP6

23 基本网络知识

Linux 提供集成进各类网络结构中所需的联网工具和功能。可以通过 YaST 配置使用网络卡进行的网络访问。也可以手动进行配置。本章仅介绍基础机制和相关的网络配置文件。

Linux 和其他 Unix 操作系统均使用 TCP/IP 协议。这不是单个网络协议,而是提供多种服务的一系列网络协议。TCP/IP 协议系列中的数种协议中所列的协议用于通过 TCP/IP 在两台计算机之间交换数据。由 TCP/IP 连接而成的网络构成了全球网络,也称作互联网

RFC 指注释请求 (Request for Comments)。RFC 由一些文档组成,用来描述互联网协议和操作系统及其应用程序的实施过程。RFC 文档用来描述如何设置互联网协议。有关 RFC 的更多信息,请参见 https://datatracker.ietf.org/

TCP/IP 协议系列中的数种协议
TCP

传送控制协议:面向连接的安全协议。要传输的数据首先由应用程序作为数据流发送,然后由操作系统转换为相应的格式。数据到达目标主机上的相应应用程序时采用最初发送时的原始数据流格式。TCP 确定在传输过程中是否有任何数据丢失或发生混乱。只要涉及到数据序列就会实施 TCP。

UDP

用户数据报协议:无连接、不安全的协议。要传送的数据以应用程序生成的数据包的形式发送。不能保证数据以正确的顺序到达接收方,也可能丢失数据。UDP 适用于面向记录的应用程序。它的等待时间比 TCP 稍短。

ICMP

互联网控制消息协议:这不是面向最终用户的协议,而是用来发出错误报告的特殊控制协议,能够控制参与 TCP/IP 数据传送的计算机的行为。此外,它还提供一种特殊的回应方式,可以通过 ping 程序查看该方式。

IGMP

互联网组管理协议:此协议用于在实施 IP 多广时控制计算机行为。

图 23.1 “TCP/IP 的简化层模型” 中所示,数据交换在不同的层中进行。实际的网络层是通过 IP(互联网协议)的不安全数据传送。IP 的上面是 TCP(传送控制协议),它能够确保一定程度的数据传送安全性。IP 层由底层硬件相关协议(例如以太网)提供支持。

OSI 和 TCP
图 23.1︰ TCP/IP 的简化层模型

该图为每一层都提供了一到两个示例。层按照抽象程度排序。最底层离硬件很近。最上层则几乎就是硬件的完全抽象化。每一层都有自己的特殊功能。每一层的特殊功能隐含在其描述中。数据链路层和物理层表示所用的物理网络(如以太网)。

几乎所有硬件协议都在面向数据包的基础上发挥作用。要传送的数据收集在中(一次无法发送所有数据)。TCP/IP 包最大约为 64 KB。由于网络硬件有所限制,因此包通常都很小。以太网上数据包的大小上限约为 1500 个字节。通过以太网发送数据时,TCP/IP 包的大小不能超过此限制。如果传送更多数据,操作系统需要发送更多的数据包。

为使层实现其指定功能,必须在数据包中保存与每层相关的附加信息。这些信息保存在数据包的报头中。每一层都在每个新包的开头附加一小块称为协议报头的数据。图 23.2 “TCP/IP 以太网数据包”中演示了一个通过以太网电缆传送的 TCP/IP 数据包示例。校验和位于包的末尾而不是开头,这样更便于网络硬件处理。

TCP/IP 以太网数据包
图 23.2︰ TCP/IP 以太网数据包

当应用程序通过网络发送数据时,数据会穿越每个层次,所有传递都在 Linux 内核中实施(只有物理层除外)。每一层都会进行数据准备工作,以便数据可传递到下一层。最底层最后负责发送数据。接收数据时则逆向执行整个过程。正像剥洋葱皮那样,在每一层中都要从传输数据中删除协议报头。最后,传输层会进行相应处理,以使数据可供目标位置的应用程序使用。通过这种方式,每一层只与其上一层或下一层通讯。对于应用程序而言,数据是通过无线连接还是有线连接传输都无关紧要。同样,只要数据包的格式正确,传送哪种类型的数据对数据行而言也无关紧要。

23.1 IP 地址和路由

各节的论述仅限于 IPv4 网络。有关 IPv6 协议(IPv4 的后续协议)的信息,请参见第 23.2 节 “IPv6 - 新一代互联网”

23.1.1 IP 地址

互联网上的每台计算机都有一个唯一的 32 位地址。这些 32 位(或 4 字节)地址通常按例 23.1 “编写 IP 地址”的第二行所示的格式书写。

例 23.1︰ 编写 IP 地址
IP Address (binary):  11000000 10101000 00000000 00010100
IP Address (decimal):      192.     168.       0.      20

在十进制格式中,四字节以十进制数书写,其间以句点分隔。IP 地址被指派给主机或网络接口。它在全球只能使用一次。这条规则也有例外,但这些例外与下文无关。

IP 地址中的点表示分级系统。直到 20 世纪 90 年代,IP 地址仍然有严格的分类。但是,此系统经证实太过死板,已经废止。现已改为使用无类别路由 - (CIDR,无类别域间路由)。

23.1.2 网络掩码和路由

网络掩码用于定义子网的地址范围。如果两台主机位于同一子网中,它们可直接相互访问。如果它们位于不同子网中,则需要用于处理此子网的所有流量的网关地址才能相互访问。要检查两个 IP 地址是否位于同一个子网中,只需分别将两个地址与网络掩码进行AND操作。如果结果相同,则两个 IP 地址在同一个本地网络中。如果结果不同,则仅能通过网关连接远程 IP 地址和远程接口。

要了解网络掩码如何工作,可查看例 23.2 “将 IP 地址链接到网络掩码”。网络掩码有 32 位,它确定 IP 地址有多少属于网络。对于所有为 1 的位,将它们在 IP 地址中的相应位标记为属于网络。对于所有值为 0 的位,标记其属于子网内。这意味着值为 1 的位越多,子网就越小。因为网络掩码总是由多个连续的 1 位组成,所以也可通过计算网络掩码中的位数来确定。在例 23.2 “将 IP 地址链接到网络掩码”中,第一个 24 位的网络也可写作 192.168.0.0/24

例 23.2︰ 将 IP 地址链接到网络掩码
IP address (192.168.0.20):  11000000 10101000 00000000 00010100
Netmask   (255.255.255.0):  11111111 11111111 11111111 00000000
---------------------------------------------------------------
Result of the link:         11000000 10101000 00000000 00000000
In the decimal system:           192.     168.       0.       0

IP address (213.95.15.200): 11010101 10111111 00001111 11001000
Netmask    (255.255.255.0): 11111111 11111111 11111111 00000000
---------------------------------------------------------------
Result of the link:         11010101 10111111 00001111 00000000
In the decimal system:           213.      95.      15.       0

再举个例子:通过同一以太网电缆连接的所有计算机通常都位于同一子网中,可以直接访问。即使用交换机或网桥物理分隔该子网,这些主机仍然可以直接访问。

仅在网关是为目标网络配的时,才能访问本地子网外部的 IP 地址。通常情况下,只有一个网关处理所有外部流量。然而,也可能为不同的子网配置多个网关。

如果配置了网关,所有的外部 IP 包将发送到相应的网关。此网关随后会尝试以相同的方式转发该包(从主机到主机)直到到达目标主机或超过该包的 TTL(存活时间)。

特定地址
基础网络地址

这是网络掩码和该网络中的任意地址,如例 23.2 “将 IP 地址链接到网络掩码”中的 Result 所示。不能将此地址指派给任何主机。

广播地址

这可以解释为:访问此子网中的所有主机。要生成此地址,需要将网络掩码反转为二进制格式,并使用逻辑 OR 链接到基本网络地址。因此,以上示例会生成 192.168.0.255。该地址无法指派给任何主机。

本地主机

地址 127.0.0.1 指派给每台主机的回路设备。使用此地址以及通过 IPv4 定义的整个 127.0.0.0/8 回写网络中的所有地址,可以设置与您自己的计算机之间的连接。如果使用 IPv6,则只有一个回写地址 (::1)。

由于 IP 地址必须在全球范围内唯一,您不能随机选择地址。共有三个地址域可用于建立基于 IP 的专用网络。这些地址无法与互联网上的其他地址建立任何连接,因为它们不能通过互联网传送。这些地址域在 RFC 1597 中指定,并且列在表 23.1 “专用 IP 地址域” 中。

表 23.1︰ 专用 IP 地址域

网络/网络掩码

10.0.0.0/255.0.0.0

10.x.x.x

172.16.0.0/255.240.0.0

172.16.x.x172.31.x.x

192.168.0.0/255.255.0.0

192.168.x.x

23.2 IPv6 - 新一代互联网

重要
重要:IBM Z:IPv6 支持

IBM Z 硬件的 CTC 和 IUCV 网络连接不支持 IPv6。

由于万维网 (WWW) 的出现,过去十五年内,越来越多的计算机通过 TCP/IP 进行通讯,互联网的规模发生了爆炸性的增长。自从 1990 年在 CERN (https://public.web.cern.ch) 任职的 Tim Berners-Lee 开创了 WWW,互联网主机的数量已从几千台猛增至上亿台。

如上所述,IPv4 地址只有 32 位。而且还损失了少许 IP 地址,它们因网络组织方式的原因而无法使用。子网中可用的地址数量是位数的平方减 2。举例来说,一个子网可能有 2 个、6 个或 14 个可用地址。如果要将 128 台主机连接到互联网,您的子网要提供 256 个 IP 地址,其中只有 254 个可用,因为有两个 IP 地址需要供该子网本身的结构使用:广播和基础网络地址。

在当前的 IPv4 协议下,DHCP 或 NAT(网络地址转换)是用来避免出现地址短缺的典型机制。这些方法与用来分隔专用地址空间和公用地址空间的规定相结合,肯定能够缓解短缺状况;要在 IPv4 网络中设置主机,您需要数个地址项,如主机本身的 IP 地址、子网掩码、网关地址,可能还要提供名称服务器地址。所有这些项都是必需的,而且无法从其他任何地方得到这些项。

利用 IPv6,地址的短缺和复杂的配置都将成为过去。以下各节进一步描述了 IPv6 带来的改进和优点,以及如何从旧协议过渡到新协议。

23.2.1 优点

IPv6 协议带来的最为重要同时也最为显著的改进是极大地扩展了可用的地址空间。IPv6 地址由 128 位值而不是传统的 32 位值组成,它提供的 IP 地址数目多达 10 的 15 次方的若干倍。

不过,IPv6 与以前的不同不仅限于长度,其内部结构也发生了变化,这种结构可以包含更多的有关系统和系统所属网络的具体信息。有关详细信息,请参见第 23.2.2 节 “地址类型和结构”

下面列出了 IPv6 协议的其他优点:

自动配置

IPv6 使网络能够即插即用,这意味着无需进行任何手动配置即可将新配置的系统集成到(本地)网络中。新主机可以使用其自动配置机制,依赖名为邻居发现 (ND) 的协议从邻近的路由器提供的信息中得到自己的地址。这种方法不要求管理员参与,并且无需维护用于分配地址的中央服务器,这是 IPv4 无法媲美的(IPv4 中需要使用 DHCP 服务器来自动分配地址)。

不过,如果路由器已连接到交换机,则路由器应发送带标志的定期通告,告知网络中的主机彼此应如何交互。有关详细信息,请参见 RFC 2462 和 radvd.conf(5) 手册页以及 RFC 3315。

移动能力

利用 IPv6,为一个网络接口同时指派多个地址成为可能。这样用户能够轻松访问多个网络,如同使用移动电话公司提供的国际漫游服务一样轻松自如。当您带着手机出国时,手机只要进入通信区域就会自动登录国外的服务,这样无论您身处何地,用同一个号码都可以联系到您,而且您也能像在国内一样拨打电话。

安全通讯

在 IPv4 中,网络安全是一项附加功能。IPv6 则将 IPsec 作为其核心功能之一,允许系统通过安全隧道通讯,避免被互联网上的外来者窃听。

向后兼容性

实际上,要想将整个互联网一下子从 IPv4 转换为 IPv6 是不可能的。因此,这两个协议不仅要能在互联网上共存,还应能够共存于一个系统中,这一点至关重要。要实现这一点,一方面两种地址应兼容(IPv4 地址可以轻松转换为 IPv6 地址),另一方面还要使用多个隧道。请参见第 23.2.3 节 “IPv4 与 IPv6 并存”。此外,系统可以依赖双栈 IP 技术同时支持两种协议,这意味着系统使用了两种分隔的网络堆栈,如此这两种版本的协议便不会相互影响。

通过多播自定义定制服务

使用 IPv4 时,某些服务(如 SMB)需要向本地网络中的所有主机广播其数据包。IPv6 使服务器能够通过多播对主机寻址(即将多个主机作为组的一部分寻址),因而提供了更精细的方法。这种方法与通过广播对所有主机寻址,或通过单播单独对每个主机寻址均不同。将哪些主机作为一组来寻址可能要取决于具体的应用程序。可以使用预定义的特定组来寻址,例如对所有名称服务器寻址(所有名称服务器多播组),或对所有路由器寻址(所有路由器多播组)。

23.2.2 地址类型和结构

如上所述,当前的 IP 协议存在两个重要限制:IP 地址日益短缺,并且配置网络、维护路由选择表的任务变得越来越复杂繁重。IPv6 通过将地址空间扩展到 128 位解决了第一个问题。通过引入分级地址结构,结合先进的网络地址分配技术和多宿主功能(将多个地址指派给同一个设备,从而支持对多个网络的访问),第二个问题也得到缓解。

使用 IPv6 时,了解三种类型的地址十分有用:

单播

这类地址只与一个网络接口关联。采用这类地址的包只传递到一个目标。因此,使用单播地址可以将包传送到本地网络或互联网上的单个主机。

多播

这类地址与一组网络接口相关。采用这类地址的包将传递到属于该组的所有目标。多播地址主要供特定网络服务使用,用于以有序的方式与特定的主机组通讯。

任意广播

这类地址与一组接口相关。采用这类地址的包将根据基础路由协议的原则,传递给该组中与发送方最为接近的成员。任意广播地址便于主机在特定网络区域内找到提供特定服务的服务器。同一类型的所有服务器都具有相同的任意广播地址。在请求服务时,主机会收到路由协议决定的最接近它的服务器的回复。如果此服务器无法回复,协议会自动选择第二近的服务器,然后是第三近的服务器,以此类推。

IPv6 地址分为八组,每组四位数字,代表十六位,采用十六进制表示法。它们之间用冒号 (:) 分隔。可以删除某组中的前置零字节,但不能删除组中或组末的零。另一个约定是:连续的零字节若超过四个,则可以省略为双冒号形式。不过,每个地址只允许有一个这样的 ::。中演示了这种简写表示法,其中的三行全部表示同一地址。例 23.3 “示例 IPv6 地址”

例 23.3︰ 示例 IPv6 地址
fe80 : 0000 : 0000 : 0000 : 0000 : 10 : 1000 : 1a4
fe80 :    0 :    0 :    0 :    0 : 10 : 1000 : 1a4
fe80 :                           : 10 : 1000 : 1a4

IPv6 地址的每个部分都有明确的功能。前面的字节构成前缀,用于指定地址类型。中间部分是地址的网络部分,但可以不用。地址的结尾构成主机部分。在 IPv6 中,网络掩码是通过在地址末尾的斜杠后指明前缀的长度来定义的。例 23.4 “指定前缀长度的 IPv6 地址” 中的地址包含上述信息,即:前 64 位构成地址的网络部分,后 64 位构成地址的主机部分。换言之,64 表示网络掩码由左起的 64 个 1 位值构成。与 IPv4 一样,IP 地址使用 AND 结合网络掩码值,以确定主机位于同一子网中还是其他网络中。

例 23.4︰ 指定前缀长度的 IPv6 地址
fe80::10:1000:1a4/64

IPv6 可以识别几种预定义的前缀类型。IPv6 前缀 中显示了一些前缀。

IPv6 前缀
00

IPv4 地址和 IPv6 上的 IPv4 兼容地址。这些用于与 IPv4 保持兼容。要使用这些地址,仍然需要依赖路由器将 IPv6 包转换为 IPv4 包。有若干特殊地址(如用于回路设备的地址)也采用此前缀。

23 作为第一个数字

可聚合全局单播地址。类似 IPv4 的情况,可以指定某个接口作为特定子网的一部分。目前,有以下地址空间:2001::/16(生产质量地址空间)和 2002::/16(6to4 地址空间)。

fe80::/10

链路本地地址。不应路由带有这种前缀的地址,而只能从同一子网中访问。

fec0::/10

站点本地地址。可以路由这种地址,但只局限在它们所属的组织的网络之内。实际上,这些是相当于当前的专用网络地址空间(如 10.x.x.x)的 IPv6 地址。

ff

这些是多播地址。

单播地址由三个基本部分组成:

公共拓扑结构

第一部分(也包含上述前缀之一)用于通过公共互联网路由数据包。其中包含提供互联网访问的公司或机构的相关信息。

站点拓朴结构

第二部分包含要将包传递到的子网的路由信息。

接口 ID

第三部分标识要将包传递到的接口。其中允许使用 MAC。由于 MAC 是硬件厂商编程到设备中的全球唯一的固定标识符,配置过程有所简化。事实上,前 64 个地址位共同构成 EUI-64 令牌,后 48 位从 MAC 中提取,其余的 24 位包含有关令牌类型的特殊信息。这样还可以将 EUI-64 令牌指派给没有 MAC 的接口,如基于点对点协议 (PPP) 的接口。

在这个基础架构之上,IPv6 还区分五种不同的单播地址:

:: (未指定)

在首次初始化接口时(此时尚无法通过其他方法确定地址),这类地址可被主机用作其源地址。

::1(回路)

回路设备的地址。

IPv4 兼容地址

IPv6 地址由 IPv4 地址和 96 个零位组成的前缀构成。这类兼容地址用于隧道通讯进程(请参见第 23.2.3 节 “IPv4 与 IPv6 并存”),以便 IPv4 和 IPv6 主机与在纯 IPv4 环境中操作的其他主机通讯。

映射到 IPv6 的 IPv4 地址

这类地址以 IPv6 表示法指定纯 IPv4 地址。

本地地址

有两类地址可供本地使用:

链路本地

这类地址只能在本地子网中使用。不能具有此类源地址或目标地址的包路由到互联网或其他子网。这些地址包含特殊前缀 (fe80::/10) 和网卡的接口 ID,中间部分为零字节。这类地址在自动配置过程中使用,用于与同一子网中的其他主机通讯。

站点本地

可以将采用这类地址的包路由到其他子网,但不能路由到更广阔的互联网 — 不能跨越组织自身的网络。这类地址用于内部网,相当于 IPv4 定义的专用地址空间。其中包含特殊前缀 (fec0::/10)、接口 ID,及指定子网 ID 的 16 位字段。其余部分也会填入零字节。

作为 IPv6 引入的新功能,每个网络接口通常可以获得多个 IP 地址,其优点在于可以通过同一接口访问多个网络。其中一个网络可以用 MAC 和已知前缀自动配置,这样当启用 IPv6 (使用链路本地地址)后,即可访问本地网络中的所有主机。由于其中使用了 MAC,所用的任何 IP 地址都是全球唯一的。地址中只有指定站点拓朴结构公共拓朴结构的部分才是可变部分,这取决于主机当前运行所在的实际网络。

要使主机在不同网络间切换,主机至少需要两个地址。其中之一 - 本地地址,不仅包含接口 ID 而且包含该主机通常所属的本地网络的标识符(以及相应的前缀)。本地地址是静态地址,因此一般不变。所有要发送到移动主机的包仍可以传递到该主机,不管它是在本地网络还是其他任何网络中操作。这可通过 IPv6 引入的新功能来实现,如无状态自动配置邻居发现。除本地地址之外,移动主机还获得一个或多个额外的地址,这些地址属于该主机漫游到的外地网络。这些地址称为转交地址。本地网络有一种功能,可以在主机漫游到外地时转发要发送给该主机的所有包。在 IPv6 环境中,这项任务由本地代理来完成,该代理可以接收要发送到本地地址的所有包,并通过隧道进行转发。预定要发送到转交地址的那些包会直接传送到移动主机,而不会特别绕行。

23.2.3 IPv4 与 IPv6 并存

将与互联网相连的所有主机从 IPv4 迁移到 IPv6 是一个逐步的过程。这两种协议会在未来的一段时间内并存。通过双栈技术来实施这两种协议,可以在同一系统上同时支持这两种协议。但这仍然没有解决启用了 IPv6 的主机如何与 IPv4 主机通讯,以及应如何通过当前的网络(绝大部分都基于 IPv4)传输 IPv6 数据包的问题。最好的解决方案就是提供隧道处理功能和兼容地址(请参见 第 23.2.2 节 “地址类型和结构”)。

IPv6 主机孤立于(全球)IPv4 网络,它可通过隧道通讯:IPv6 包会封装成 IPv4 包在 IPv4 网络中移动。这种在两个 IPv4 主机间的连接被称为隧道。要实现这种功能,包必须包含 IPv6 目标地址(或相应的前缀),以及隧道接收端远程主机的 IPv4 地址。根据主机管理员间的协议,可以手动配置基本的隧道。这也称作静态隧道

但是,静态隧道的配置和维护往往过于烦琐,不能适应日常通讯需要。因此,IPv6 提供了三种不同的动态隧道方法:

6over4

IPv6 包被自动封装为 IPv4 包,并通过支持多播的 IPv4 网络发送。这种方法会使 IPv6 将整个网络(互联网)视为一个局域网 (LAN)。这样即可自动确定 IPv4 隧道的接收端。不过,这种方法的可扩展性不好,而且不易推广,因为 IP 多播在互联网上尚未普及。因此,它提供的解决方案仅适用于支持多播的小型公司网络或机构网络。RFC 2529 中对这种方法作出了规定。

6to4

利用这种方法,可以从 IPv6 地址自动生成 IPv4 地址,从而支持孤立的 IPv6 主机通过 IPv4 网络进行通讯。不过,用这种方法在孤立的 IPv6 主机和互联网之间通讯时存在一些问题。RFC 3056 中对这种方法进行了描述。

IPv6 隧道中介程序

这种方法依赖特殊的服务器为 IPv6 主机提供专用隧道。RFC 3053 中对此进行了描述。

23.2.4 配置 IPv6

要配置 IPv6,通常无需在各个工作站上执行任何更改。默认情况下启用 IPv6。要在已安装系统上禁用或启用 IPv6,请使用 YaST 网络设置模块。在全局选项选项卡上,根据需要选择或取消选择启用 IPv6 选项。要暂时启用直至下次重引导,请以 root 身份输入 modprobe -i ipv6。加载 IPv6 模块后无法将其卸载。

由于 IPv6 使用自动配置,将给网卡指派链路本地网络中的地址。一般不在工作站上管理路由选择表。工作站可以使用路由器广告协议查询网络路由器,了解应实施的前缀和网关。使用 radvd 程序可以设置 IPv6 路由器。此程序会通知工作站对 IPv6 地址使用哪个前缀和哪个路由器。或者,可以使用 FRR(请访问 https://frrouting.org/)自动配置两个地址和路由。

有关如何使用 /etc/sysconfig/network 文件设置多种隧道的信息,请参见 ifcfg-tunnel 的手册页 (man ifcfg-tunnel)。

23.2.5 更多信息

上文的概述中并未全面论述 IPv6 这一主题。如果要深入了解这种较新的协议,请参考以下联机文档和书籍:

https://www.ipv6.org/

学习 IPv6 知识的起点。

http://www.ipv6day.org

启动您自己的 IPv6 网络所需的所有信息。

http://www.ipv6-to-standard.org/

已启用 IPv6 的产品列表。

https://www.bieringer.de/linux/IPv6/

Linux IPv6-HOWTO 以及许多与该主题有关的链接。

RFC 2460

有关 IPv6 的基础 RFC。

IPv6 essentials

Silvia Hagen 所著的 IPv6 Essentials(ISBN 0-596-00125-8) 中描述了该主题的所有重要方面。

23.3 名称解析

DNS 有助于将 IP 地址指派给一个或多个名称,并将名称指派给 IP 地址。在 Linux 中,这种转换通常由一种称为 bind 的特殊软件来完成。负责这种转换的计算机称为名称服务器。这些名称构成了具有层次结构的系统,各个名称组成部分之间用句点分隔。不过,这个名称层次与上述 IP 地址层次无关。

考虑以 hostname.domain 格式书写的完整名称,如 jupiter.example.com。完整名称(即完全限定的域名 (FQDN))由主机名和域名 (example.com) 组成。后者还包含顶级域或 TLD (com)。

TLD 指派由于历史原因已经变得混乱。传统的指派方法是美国所用的三字母域名,而世界其他地方采用的标准是双字母 ISO 国家/地区代码。此外,2000 年还引入了较长的 TLD 来表示特定的活动范围(例如 .info.name.museum)。

在互联网发展的早期阶段(1990 年之前),文件 /etc/hosts 用来存储互联网上表示的所有计算机名称。后来事实证明随着接入互联网的计算机与日俱增,这种方法很快就行不通了。为此人们开发了一个分散式数据库,以十分分散的方式存储主机名。这种数据库与名称服务器类似,没有有关互联网上所有主机的立即可用数据,但可以向其他名称服务器发送请求。

位于层次顶级的是 root 名称服务器。这些 root 名称服务器管理顶级域,并由网络信息中心 (NIC) 运行。每个 root 名称服务器都了解负责特定顶级域的名称服务器。有关顶级域 NIC 的信息,请参见 https://www.internic.net

DNS 不仅可以解析主机名,还能够为整个域识别出负责接收电子邮件的主机,即邮件交换器 (MX)

为解析 IP 地址,您的计算机必须了解至少一个名称服务器及其 IP 地址。使用 YaST 可轻松指定此类名称服务器。 有关如何在 SUSE® Linux Enterprise Server 中配置针对名称服务器的访问,请参见第 23.4.1.4 节 “配置主机名和 DNS”。有关如何设置您自己的名称服务器的信息,请参见第 39 章 “域名系统

whois 协议与 DNS 密切相关。使用此程序可以快速确定给定域的拥有者。

注意
注意:MDNS 和 .local 域名

解析程序会将 .local 顶级域视为链路本地域。DNS 请求作为多播 DNS 请求(而不是常规 DNS 请求)发送。如果已在名称服务器配置中使用 .local 域,必须在 /etc/host.conf 中关闭此选项。有关更多信息,请参见 host.conf 手册页。

要在安装期间关闭 MDNS,请使用 nomdns=1 引导参数。

有关多播 DNS 的详细信息,请参见 http://www.multicastdns.org

23.4 使用 YaST 配置网络连接

Linux 上有多个支持的联网类型。其中多数使用不同的设备名,配置文件分布在文件系统上的多个位置。关于手动网络配置方面的详细概述,请参见第 23.5 节 “手动配置网络连接”

已建立链接的所有网络接口(已连接网络电缆)将自动进行配置。可随时在已安装系统中配置额外的硬件。以下章节将介绍 SUSE Linux Enterprise Server 支持的所有网络连接类型的网络配置。

提示
提示:IBM Z:可热插拔网卡

IBM Z 平台支持可热插拔网卡,但不支持通过 DHCP 自动将它们进行网络集成(与 PC 情况相同)。检测到网卡后,您需要手动配置接口。

23.4.1 使用 YaST 配置网卡

要在 YaST 中配置以太网卡或 Wi-Fi/蓝牙卡,请选择系统 ›  网络设置。启动模块后,YaST 将显示网络设置对话框,其中包括四个选项卡:全局选项概述主机名/DNS路由选择

通过全局选项选项卡可设置常规联网选项,例如网路设置方法、IPv6 和常规 DHCP 选项。有关详细信息,请访问 第 23.4.1.1 节 “配置全局联网选项”

概述选项卡包含关于已安装网络接口和配置的信息。会列出已正确检测到的所有网卡及其名称。您可在此对话框中手动配置新卡、删除或更改其配置。要手动配置未自动检测到的网卡,请参见第 23.4.1.3 节 “配置未检测到的网卡”。要更改所配置网卡的配置,请参见第 23.4.1.2 节 “更改网卡的配置”

通过主机名/DNS 选项卡可设置计算机的主机名和要使用的服务器名称。有关详细信息,请访问 第 23.4.1.4 节 “配置主机名和 DNS”

路由选择选项卡用于配置路由选择。有关更多信息,请参见第 23.4.1.5 节 “配置路由”

配置网络设置
图 23.3︰ 配置网络设置

23.4.1.1 配置全局联网选项

通过 YaST 网络设置模块的全局选项选项卡,可设置重要的全局联网选项,如使用 NetworkManager、IPv6 和 DHCP 客户端选项。这些设置适用于所有网络接口。

注意
注意:NetworkManager 由 Workstation Extension 提供

现在,NetworkManager 由 SUSE Linux Enterprise Workstation Extension 提供。要安装 NetworkManager,请激活 Workstation Extension 储存库,然后选择 NetworkManager 软件包。

网络设置方法中,选择管理网络连接的方法。如果希望 NetworkManager 桌面小程序管理所有接口的连接,请选择 NetworkManager 服务。NetworkManager 非常适用于在多个有线和无线网络之间切换。如果您运行的不是桌面环境,或者您的计算机是 Xen 服务器、虚拟系统或者会在网络中提供 DHCP 或 DNS 等网络服务,请使用 Wicked 服务方法。如果使用 NetworkManager,则应使用 nm-applet 配置网络选项,并且网络设置模块的概览主机名/DNS路由选择选项卡会被禁用。有关 NetworkManager 的详细信息,请参见 SUSE Linux Enterprise Desktop 文档。

IPv6 协议设置中,选择是否使用 IPv6 协议。可将 IPv6 与 IPv4 一起使用。默认情况下,会启用 IPv6。但是在不使用 IPv6 协议的网络中,如果禁用 IPv6 协议,响应时间会更快。要禁用 IPv6,请停用启用 IPv6。如果禁用了 IPv6,内核将不再自动加载 IPv6 模块。重启动后会应用此设置。

DHCP 客户端选项中,配置 DHCP 客户端的选项。在单个网络上,每个 DHCP 客户端的 DHCP 客户端标识符必须不同。如果保留为空,会默认为网络接口的硬件地址。但是,如果正在运行若干使用相同网络接口(即相同硬件地址)的虚拟机,则在此处指定唯一的自由格式标识符。

要发送的主机名指定当 DHCP 客户端将消息发送到 DHCP 服务器时,主机名选项字段使用的字符串。某些 DHCP 服务器会根据此主机名(动态 DNS)来更新名称服务器区域(正向和反向记录)。此外,有些 DHCP 服务器要求要发送的主机名选项字段包含来自客户端的 DHCP 消息中的特定字符串。如果保留 AUTO,将发送当前的主机名(即 /etc/HOSTNAME 中定义的主机名)。将选项字段保留空白则不会发送任何主机名。

如果您不希望根据 DHCP 中的信息更改默认路由,请停用通过 DHCP 更改默认路由

23.4.1.2 更改网卡的配置

要更改网卡的配置,请在 YaST 网络设置 ›  概述中已检测到的网卡列表中选择一个网卡,然后单击编辑。将显示网卡设置对话框,可在其中使用常规地址硬件选项卡调整网卡配置。

23.4.1.2.1 配置 IP 地址

您可在网卡设置对话框的地址选项卡中设置网卡的 IP 地址或 IP 地址的确定方法。同时支持 IPv4 和 IPv6 地址。网卡可设置为无 IP 地址(对于绑定设备很有用)、静态指派的 IP 地址(IPv4 或 IPv6)或通过 DHCP和/或 Zeroconf 指派的动态地址

如果使用动态地址,则选择是使用仅 DHCP 版本 4(用于 DHCPv4)、DHCP 版本 6(用于 DHCPv6)还是 DHCP 版本 4 和 6

如果可能,安装期间的首个带链接的可用网卡将会通过 DHCP 自动配置为使用自动 IP 地址。

注意
注意:IBM Z 和 DHCP

在 IBM Z 平台上,只有具备 MAC 地址的网卡才支持基于 DHCP 的地址配置。属于这种情况的只有 OSA 和 OSA Express 网卡。

如果使用的是 DSL 线路,但 ISP(互联网服务提供商)没有指派静态 IP,此时还应使用 DHCP。如果决定使用 DHCP,请打开 YaST 网卡配置模块的网络设置对话框,在全局选项选项卡的 DHCP 客户端选项中配置细节。如果您使用虚拟主机设置,其中不同的主机都通过同一接口通信,则需要用 DHCP 客户端标识符来区分。

DHCP 比较适合客户端配置,但不太适合服务器配置。要设置静态 IP 地址,请如下继续操作:

  1. 在 YaST 网卡配置模块的概述选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 地址选项卡中,选择静态指派的 IP 地址

  3. 输入 IP 地址。IPv4 和 IPv6 地址均可使用。在子网掩码中输入子网掩码。如果使用 IPv6 地址,请以 /64 格式使用子网掩码作为前缀长度。

    或者,您可以为此地址输入完全限定的主机名,该主机名将写入 /etc/hosts 配置文件。

  4. 单击下一步

  5. 要激活配置,请单击确定

注意
注意:接口激活和链路检测

在激活网络接口期间,wicked 会检查载波,并且只有在检测到链路之后,才会应用 IP 配置。如果不管链路状态为何,您都需要应用配置(例如,您要测试侦听某个地址的服务),则可以在 /etc/sysconfig/network/ifcfg 内的接口配置文件中添加变量 LINK_REQUIRED=no 来跳过链路检测。

另外,您可以使用变量 LINK_READY_WAIT=5 来指定等待链路的超时值(以秒为单位)。

有关 ifcfg-* 配置文件的详细信息,请参见第 23.5.2.5 节 “/etc/sysconfig/network/ifcfg-*man 5 ifcfg

如果使用静态地址,则不会自动配置名称服务器和默认网关。要配置名称服务器,请按照第 23.4.1.4 节 “配置主机名和 DNS” 中所述进行。要配置网关,请按照第 23.4.1.5 节 “配置路由” 中所述进行。

23.4.1.2.2 配置多个地址

一个网络设备可以有多个 IP 地址(称为别名或标签)。

注意
注意:别名是兼容功能

别名或标签仅适用于 IPv4。利用 iproute2 网络接口,您可以使用一个或多个地址。

要使用 YaST 为网卡设置更多地址,请执行以下操作:

  1. 在 YaST 网络设置对话框的概述选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 地址 ›  附加地址 选项卡中,单击添加

  3. 输入 IPv4 地址标签IP 地址网络掩码。请注意,添加 IP 别名时必须指定 /32 网络掩码。不要在别名中包含接口名称。

  4. 要激活该配置,请确认设置。

23.4.1.2.3 更改设备名称和 udev 规则

可更改网卡在使用时的设备名称。还可确定 udev 是通过网卡的硬件 (MAC) 地址还是通过总线 ID 来标识网卡。后一个选项更适合大型服务器,因为便于热插拔网卡。要使用 YaST 设置这些选项,请执行以下步骤:

  1. 在 YaST 网络设置对话框的概述选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 转到常规选项卡。当前设备名称显示在 Udev 规则中。单击更改

  3. 选择 udev 应通过网卡的 MAC 地址还是总线 ID 来识别网卡。网卡的当前 MAC 地址和总线 ID 显示在对话框中。

  4. 要更改设备名称,请选中更改设备名称选项并编辑名称。

  5. 要激活该配置,请确认设置。

23.4.1.2.4 更改网卡内核驱动程序

对于某些网卡,可能会提供某些内核驱动程序。如果网卡已配置,YaST 允许您从可用的合适驱动程序列表中选择一个要使用的内核驱动程序。还可为内核驱动程序指定选项。要使用 YaST 设置这些选项,请执行以下步骤:

  1. 在 YaST 网络设置模块的概述选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 转到硬件选项卡。

  3. 模块名称中选择要使用的内核驱动程序。在选项中以 = = VALUE 格式为所选驱动程序输入任何选项。如果使用多个选项,应用空格分隔这些选项。

  4. 要激活该配置,请确认设置。

23.4.1.2.5 激活网络设备

如果使用结合 wicked 的方法,便可以将设备配置为在引导期间、连接电缆时或检测到网卡时启动、以手动方式启动或永不启动设备。要更改设备启动,请如下继续操作:

  1. 在 YaST 的系统 ›  网络设置中,于已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 常规选项卡中,从设备激活选择所希望的项。

    选择在引导时可在系统引导时启动设备。使用在电缆连接时将对任何现有物理连接监控接口。使用在热插拔时,可在接口可用时对其进行设置。这与在引导时选项很相似,唯一区别是如果引导时接口不存在,将不会发生错误。选择手动可通过 ifup 手动控制接口。选择从不将不启动设备。在 NFSroot 时在引导时相似,区别是使用 systemctl stop network 命令不会关闭接口;如果 wicked 处于活动状态,则 network 服务还会处理 wicked 服务。如果您使用 NFS 或 iSCSI 根文件系统,则选择此选项。

  3. 要激活该配置,请确认设置。

提示
提示:NFS 用作根文件系统

在通过网络以 NFS 共享形式挂载根分区的(无磁盘)系统中,配置可供访问 NFS 共享的网络设备时需保持谨慎。

关闭或重引导系统时,默认的处理顺序是关闭网络连接,然后卸载根分区。对于 NFS 根分区,这种顺序会产生问题,因为在尚未激活与 NFS 共享的网络连接的情况下,根分区无法完全卸载。为防止系统停用相关的网络设备,请按第 23.4.1.2.5 节 “激活网络设备”中所述打开网络设备配置选项卡,然后在设备激活窗格中选择通过 NFSroot

23.4.1.2.6 设置最大传输单元大小

您可为接口设置最大传输单元 (MTU)。MTU 是指允许的最大包大小(以字节为单位)。更高的 MTU 可带来更高的带宽效率。但是较大的包有时可能会堵塞较慢的接口,从而增加后续包的延迟。

  1. 在 YaST 的系统 ›  网络设置中,于已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 常规选项卡中,从设置 MTU 列表中选择所需项。

  3. 要激活该配置,请确认设置。

23.4.1.2.7 PCIe 多功能设备

系统支持对以下技术提供支持的多功能设备:LAN、iSCSI 和 FCoE。FCoE 客户端 (yast2 fcoe-clientyast) 会在额外的列中显示私用标志,以允许用户选择用于 FCoE 的设备。网络模块 (yast2 lanyast) 会针对网络配置排除仅存储设备

关于 FCoE 的详细信息,请参见第 16.3 节 “使用 YaST 管理 FCoE 服务”

23.4.1.2.8 IP-over-InfiniBand (IPoIB) 的 Infiniband 配置
  1. 在 YaST 的系统 ›  网络设置中选择 InfiniBand 设备,然后单击编辑

  2. 常规选项卡中,选择一种 IP-over-InfiniBand (IPoIB) 模式:已连接(默认)或数据报

  3. 要激活该配置,请确认设置。

有关 InfiniBand 的详细信息,请参见 /usr/src/linux/Documentation/infiniband/ipoib.txt

23.4.1.2.9 配置防火墙

您不必按第 23.4 节 “firewalld中所述执行详细的防火墙设置,只需在设置设备的过程中决定设备的基本防火墙配置。按如下所示继续:

  1. 打开 YaST 的系统 ›  网络设置模块。在概述选项卡中,从已检测到的网卡列表中选择一个网卡,然后单击编辑

  2. 进入网络设置对话框的常规选项卡。

  3. 确定要将接口指派到的防火墙区域。下列选项可用:

    防火墙已禁用

    此选项只有在禁用防火墙和防火墙未在运行时才可用。仅当计算机属于受外部防火墙保护的大型网络时才使用此选项。

    自动指派区域

    此选项只有在启用防火墙后才可用。防火墙正在运行且接口自动指派给防火墙区域。包含关键字 any 的区域或外部区域将用于此类接口。

    内部区域(不受保护)

    防火墙正在运行,但不会强制执行任何规则来保护此接口。当计算机属于受外部防火墙保护的大型网络时才使用此选项。当计算机具有多个网络接口时,此选项还可用于连接到内部网络的接口。

    非管制区域

    隔离区域是位于内部网络和(恶意)互联网之前的一道额外的防线。可从内部网络和互联网访问指派到此区域的主机,但指派到此区域的主机无法访问内部网络。

    外部区域

    防火墙在此接口上运行,并且全面保护其抵御其他假定有害的网络流量。这是默认选项。

  4. 要激活该配置,请确认设置。

23.4.1.3 配置未检测到的网卡

如果未正确检测到某个网卡,该卡将不会包含在已检测到的网卡列表中。如果确定系统包含网卡的驱动程序,则可以手动对其进行配置。还可以配置特殊网络设备类型,例如网桥、绑定、TUN 或 TAP。要配置未检测到的网卡(或特殊设备),请如下操作:

  1. 在 YaST 的系统 ›  网络设置 ›  概述对话框中,单击添加

  2. 硬件对话框中,从可用选项中设置接口的设备类型配置名称。如果网卡为 USB 设备,请激活相应的复选框,并单击下一步退出此对话框。或者,如果需要,您可定义要用于网卡的内核模块名称及其选项

    Ethtool 选项中,您可以为接口设置 ifup 使用的 ethtool选项。有关可用选项的信息,请参见 ethtool 手册页。

    如果选项字符串以 - 开头(例如 -K INTERFACE_NAME rx on),则会用当前接口名称替换字符串中的第二个词。否则(例如 autoneg off speed 10ifup 会在开头添加 -s INTERFACE_NAME

  3. 单击下一步

  4. 常规地址硬件选项卡中,配置所有所需的选项,如接口的 IP 地址、设备激活或防火墙区域。有关配置选项的更多信息,请参见第 23.4.1.2 节 “更改网卡的配置”

  5. 如果选择无线作为接口的设备类型,则在下一个对话框中配置无线连接。

  6. 要激活新的网络配置,请确认设置。

23.4.1.4 配置主机名和 DNS

如果您在安装期间未更改网络配置,并且已有以太网卡可用,则系统会自动为您的计算机生成主机名并激活 DHCP。这同样适用于主机连接到网络环境所需的名称服务信息。如果网络地址设置使用了 DHCP,则会向域名服务器列表自动填充相应数据。如果希望使用静态设置,则手动设置这些值。

要更改计算机名称并调整名称服务器搜索列表,则如下继续操作:

  1. 转到 YaST 的系统 › 模块中的网络设置主机名/DNS 选项卡。

  2. 输入主机名。请注意,主机名是全局性的,将应用到所有网络接口。

    如果使用 DHCP 获取 IP 地址,则计算机的主机名将由 DHCP 服务器自动设置。如果连接到不同网络,您应禁用此行为,因为其他网络可能会指派不同的主机名,而在运行时更改主机名可能会导致混淆图形桌面。要禁止使用 DHCP 获取 IP 地址,请停用通过 DHCP 更改主机名

  3. 修改 DNS 配置中,请选择修改 DNS 配置(名称服务器、搜索列表以及 /run/netconfig/resolv.conf 文件的内容)的方式。

    如果选择了使用默认策略选项,则配置由 netconfig 脚本处理,该脚本合并了静态定义的数据(通过 YaST 或在配置文件中)与动态获取的数据(来自 DHCP 客户端或 NetworkManager)。此默认策略可满足通常情况。

    如果选择了仅手动选项,系统将不允许 netconfig 修改 /run/netconfig/resolv.conf 文件。但是,此文件可手动编辑。

    如果已选择自定义策略选项,则应指定用于定义合并策略的自定义策略规则字符串。该字符串包含了接口名称的逗号分隔列表,可考虑作为设置的有效源。除完整接口名外,也可使用基本通配符来匹配多个接口。例如,eth* ppp? 首先以所有 eth 为目标,然后是 ppp0 到 ppp9 的所有接口。可以使用两个特殊策略值来指示如何应用 /etc/sysconfig/network/config 文件中定义的静态设置:

    STATIC

    静态设置需要与动态设置合并到一起。

    STATIC_FALLBACK

    仅当动态配置不可用时,才使用静态设置。

    有关详细信息,请参见 netconfig(8) 的手册页 (man 8 netconfig)。

  4. 输入名称服务器并填写域搜索列表。名称服务器必须由 IP 地址指定(如 192.168.1.116),而非由主机名指定。域搜索选项卡中指定的名称是用于解析主机名(未指定域)的域名。如果使用多个域搜索,则使用逗号或空格分隔域。

  5. 要激活该配置,请确认设置。

也可以使用 YaST 从命令行编辑主机名。YaST 进行的更改会立即生效(手动编辑 /etc/HOSTNAME 文件时则不是这样)。要更改主机名,请使用以下命令:

# yast dns edit hostname=HOSTNAME

要更改名称服务器,请使用以下命令:

# yast dns edit nameserver1=192.168.1.116
# yast dns edit nameserver2=192.168.1.117
# yast dns edit nameserver3=192.168.1.118

23.4.1.5 配置路由

要使计算机能够与其他计算机和其他网络进行通信,必须提供路由选择信息以使网络流量使用正确的路径。如果使用 DHCP,则将自动提供此信息。如果使用静态设置,则必须手动添加此数据。

  1. 在 YaST 中,转到网络设置 ›  路由选择

  2. 输入默认网关(如果需要是 IPv4 和 IPv6)的 IP 地址。默认网关与每个可能的目标匹配,但是如果存在与所需地址匹配的路由表项,则会使用此项,而不是通过默认网关使用默认路由。

  3. 可在路由选择表中输入多个项。输入目标网络 IP 地址、网关 IP 地址和网络掩码。选择将流量路由到定义的网络要经过的设备(减号代表任何设备)。 要忽略这些值中的任意一个,请使用减号 -。要在表中输入默认网关,请在目标字段中使用 default

    注意
    注意:路由优先级

    如果使用更多的默认路由,则可以指定用于确定具有更高优先级的路由的指标选项。要指定指标选项,请在选项中输入 - metric NUMBER。可能的最低指标为 0。指标最低的路由具有最高的优先级,将用作默认路由。如果网络设备已断开连接,则删除其路由并使用下一个路由。

  4. 如果系统是路由器,请根据需要在网络设置中启用 IPv4 转发IPv6 转发

  5. 要激活该配置,请确认设置。

23.4.2 IBM Z:配置网络设备

SUSE Linux Enterprise Server for IBM Z 支持多种类型的网络接口。可使用 YaST 来对所有这些接口进行配置。

23.4.2.1 qeth-hsi 设备

要将 qeth-hsi (Hipersocket) 接口添加到安装的系统中,请启动 YaST 中的系统 › 网络设置模块。选择标记为 Hipersocket 的设备之一以用作 READ 设备地址,然后单击编辑。分别输入读取、写入和控制通道的设备编号(设备编号格式示例:0.0.0800)。然后单击“下一步”。在网络地址设置对话框中,为新接口指定 IP 地址和网络掩码,然后单击下一步确定退出网络配置。

23.4.2.2 qeth-ethernet 设备

要将 qeth-ethernet(IBM OSA Express 以太网卡)接口添加到安装的系统中,请启动 YaST 中的系统 ›  网络设置模块。选择标有 IBM OSA 快速以太网卡的任一设备以用作“读”设备地址并单击编辑。分别输入读取、写入和控制通道的设备编号(设备编号格式示例:0.0.0700)。输入所需的端口名称、端口号(如适用)、一些其他选项、您的 IP 地址以及适用的网络掩码。单击下一步确定退出网络配置。

23.4.2.3 ctc 设备

要将 ctc(IBM 并行 CTC 适配器)接口添加到安装的系统中,请启动 YaST 中的系统 ›  网络设置模块。选择标记为 IBM 并行 CTC 适配器的设备之一,用作读取通道,然后单击配置。选择适合您设备的 设备设置(通常为兼容性方式)。指定您的 IP 地址和远程合作伙伴的 IP 地址。如果需要,可使用高级 › 详细设置调整 MTU 的大小。单击下一步确定退出网络配置。

警告
警告:不再支持 CTC

不建议使用此接口。未来版本的 SUSE Linux Enterprise Server 将不支持此接口。

23.4.2.4 lcs 设备

要将 lcs(IBM OSA-2 适配器)接口添加到安装的系统中,请启动 YaST 中的系统 ›  网络设置模块。选择标记为 IBM OSA-2 适配器的设备之一,然后单击配置。输入所需的端口号、一些其他选项、您的 IP 地址以及适用的网络掩码。单击下一步确定退出网络配置。

23.4.2.5 IUCV 设备

要将 iucv (IUCV) 接口添加到安装的系统中,请启动 YaST 中的系统 ›  网络设置模块。选择标记为 IUCV 的设备并单击编辑。YaST 会提示您输入 IUCV 合作伙伴(同级)的名称。输入该名称(此项区分大小写),然后选择下一步。指定您的合作伙伴的 IP 地址远程 IP 地址。如果需要,在常规选项卡上设置 MTU 大小。单击下一步确定退出网络配置。

警告
警告:不再支持 IUCV

不建议使用此接口。未来版本的 SUSE Linux Enterprise Server 将不支持此接口。

23.5 手动配置网络连接

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

23.5.1 wicked 网络配置

名为 wicked 的工具和库提供了一个用于配置网络的新框架。

传统网络接口管理面临的其中一项挑战是,各种不同的网络管理层混杂在一个脚本中,最多在两个不同的脚本中。这些脚本彼此之间如何交互没有明确的定义。这会导致出现无法预测的问题、不明确的约束和约定等情况。针对各种不同的情况部署多个特殊入侵层增加了维护负担。所用的地址配置协议是通过 dhcpcd 等守护程序实现的,而这些守护程序与基础架构中其他组件的交互很不通畅。为了持续识别接口,引入了新潮的接口命名模式,而这需要繁重的 udev 支持。

wicked 的理念是通过多种方式剖析问题。它没有采用任何全新的技术,而是尝试将不同项目中的观点集中起来,以建立一个更好的整体解决方案。

实现此目的的方法之一是使用客户端/服务器模型。wicked 可借此为地址配置等任务定义能够很好地集成到整个框架中的标准化工具。例如,使用特定的地址配置时,管理员可能要求应该通过 DHCP 或 IPv4 zeroconf 配置接口。在这种情况下,地址配置服务只会从它的服务器获得租用,并传递到安装了所请求地址和路由的 wicked 服务器进程。

剖析问题的另一种方法是强制实施分层机制。对于任何类型的网络接口,都可以定义一个 dbus 服务,用于配置网络接口的设备层 — VLAN、桥接、绑定或半虚拟化设备。地址配置等常用功能通过在这些设备特定的服务基础上分层的联合服务实现,您不必专门实施这些功能。

wicked 框架使用各种 dbus 服务来实现这两个方面的功能,这些服务将会根据其类型挂接到网络接口。本文提供了 wicked 中的当前对象层次的简要概述。

每个网络接口均以 /org/opensuse/Network/Interfaces 的子对象来表示。该子对象的名称由其 ifindex 指定。例如,通常 ifindex 为 1 的回写接口是 /org/opensuse/Network/Interfaces/1,注册的第一个以太网接口是 /org/opensuse/Network/Interfaces/2

每个网络接口都有一个关联的,该类用于选择该接口支持的 dbus 接口。默认情况下,每个网络接口的类为 netifwickedd 将自动挂接与此类兼容的所有接口。在当前实施中,这些兼容的接口包括:

org.opensuse.Network.Interface

一般网络接口功能,例如,打开或关闭链路、指派 MTU 等。

org.opensuse.Network.Addrconf.ipv4.dhcp, org.opensuse.Network.Addrconf.ipv6.dhcp, org.opensuse.Network.Addrconf.ipv4.auto

适用于 DHCP、IPv4 zeroconf 等的地址配置服务

除此之外,网络接口可能还需要或者提供特殊的配置机制。例如,对于某个以太网设备,您应该能够控制链路速度、校验和卸载等。为了实现此目的,以太网设备都有一个名为 netif-ethernet 的自己的类,该类属于 netif 的子类。因此,指派给以太网接口的 dbus 接口具有上面列出的所有服务以及 org.opensuse.Network.Ethernet 服务,后者只适用于属于 netif-ethernet 类的对象。

同样,桥接、VLAN、绑定或 infiniband 等接口类型也存在适用类。

您要如何与某个首先需要创建的接口(例如 VLAN,它实际上是位于以太网设备上的虚拟网络接口)交互呢?为此,wicked 定义了出厂接口,例如 org.opensuse.Network.VLAN.Factory。这种出厂接口只提供单一功能,就是让您创建所请求类型的接口。这些出厂接口挂接到 /org/opensuse/Network/Interfaces 列表节点。

23.5.1.1 wicked 体系结构和功能

图 23.4 “wicked 体系结构”中所述,wicked 服务由几个部分组成。

wicked 体系结构
图 23.4︰ wicked 体系结构

wicked 目前支持以下功能:

  • 使用配置文件后端来分析 SUSE 样式的 /etc/sysconfig/network 文件。

  • 使用内部配置后端以 XML 格式表示网络接口配置。

  • 打开和关闭常规网络接口,例如以太网或 InfiniBand,VLAN、网桥、绑定、tun、tap、虚设设备、macvlan、macvtap、hsi、qeth、iucv 和无线(当前限制为一个 wpa-psk/eap 网络)设备。

  • 内置 DHCPv4 客户端和内置 DHCPv6 客户端。

  • 默认启动的 nanny 守护程序有助于在设备可用(接口热插入)时自动激活配置的接口,以及在检测到链路(载波)时设置 IP 配置。有关更多信息,请参见第 23.5.1.3 节 “Nanny”

  • wicked 过去是以与 systemd 集成的 DBus 服务组形式来实现的。因此,常用的 systemctl 命令都将适用于 wicked

23.5.1.2 使用 wicked

在 SUSE Linux Enterprise 上,默认会运行 wicked。如果您要检查当前启用了哪个组件以及该组件是否正在运行,请调用:

systemctl status network

如果已启用 wicked,您将看到类似于下面的行:

wicked.service - wicked managed network interfaces
    Loaded: loaded (/usr/lib/systemd/system/wicked.service; enabled)
    ...

如果运行的是其他组件(例如 NetworkManager),而您想切换到 wicked,请先停止正在运行的组件,然后启用 wicked

systemctl is-active network && \
systemctl stop      network
systemctl enable --force wicked

如此会启用 wicked 服务、创建从 network.servicewicked.service 的别名链路,并在系统下次引导时启动网络。

启动服务器进程:

systemctl start wickedd

这将会启动 wickedd(主服务器)和关联的请求方:

/usr/lib/wicked/bin/wickedd-auto4 --systemd --foreground
/usr/lib/wicked/bin/wickedd-dhcp4 --systemd --foreground
/usr/lib/wicked/bin/wickedd-dhcp6 --systemd --foreground
/usr/sbin/wickedd --systemd --foreground
/usr/sbin/wickedd-nanny --systemd --foreground

然后激活网络:

systemctl start wicked

或者使用 network.service 别名:

systemctl start network

这些命令使用 /etc/wicked/client.xml 中定义的默认或系统配置源。

要启用调试功能,请在 /etc/sysconfig/network/config 中设置 WICKED_DEBUG,例如:

WICKED_DEBUG="all"

或者,要省略一些信息:

WICKED_DEBUG="all,-dbus,-objectmodel,-xpath,-xml"

使用客户端实用程序显示所有接口的接口信息,或者显示以 IFNAME 指定的接口的接口信息:

wicked show all
wicked show IFNAME

XML 格式的输出:

wicked show-xml all
wicked show-xml IFNAME

打开一个接口:

wicked ifup eth0
wicked ifup wlan0
...

由于未指定配置源,wicked 客户端将检查 /etc/wicked/client.xml 中为它定义的默认配置源:

  1. firmware: iSCSI 引导固件表 (iBFT)

  2. compat: ifcfg文件 — 为实现兼容性而实施

将会应用 wicked 从指定接口的这些源中获取的任何设置。预期的重要性顺序为 firmwarecompat - 将来此顺序可能会发生变化。

有关更多信息,请参见 wicked 手册页。

23.5.1.3 Nanny

Nanny 是一个事件与策略驱动的守护程序,负责热插拔设备等异步或被动性方案。因此,Nanny 守护程序可帮助启动或者重启动延迟的设备或临时消失的设备。Nanny 将监控设备和链路变化,并集成当前策略集定义的新设备。即使 ifup 已经因指定的超时约束而退出,Nanny 也会继续设置。

默认情况下,Nanny 守护程序在系统上处于活动状态。您可在 /etc/wicked/common.xml 配置文件中启用该守护程序:

<config>
  ...
  <use-nanny>true</use-nanny>
</config>

如果使用此设置,ifup 和 ifreload 会将包含有效配置的策略应用到 Nanny 守护程序;然后,Nanny 将配置 wickedd,从而确保支持热插拔。它将在后台等待事件或更改(例如,打开新的设备或载体)。

23.5.1.4 启用多个接口

对于绑定和网桥,有效的做法是在一个文件 (ifcfg-bondX) 中定义整个设备拓扑,并一次性将它激活。然后,当您指定(网桥或绑定的)顶级接口名称时,wicked 可以激活整个配置:

wicked ifup br0

此命令会按适当的顺序自动设置网桥及其依赖项,而无需分别列出依赖项(端口等)。

要在一个命令中激活多个接口:

wicked ifup bond0 br0 br1 br2

要激活所有接口:

wicked ifup all

23.5.1.5 将隧道与 wicked 配合使用

如果您需要将隧道与 Wicked 结合使用,可以使用专门针对此用途的 TUNNEL_DEVICE。它可让您指定一个可选的设备名称,以将隧道绑定至该设备。隧道式包将只能通过此设备路由。

有关详细信息,请参见 man 5 ifcfg-tunnel

23.5.1.6 处理增量变化

有了 wicked,当您要重新配置某个接口时,并不需要真正将它关闭(除非内核有此要求)。例如,要将另一个 IP 地址或路由添加到静态配置的网络接口,请将该 IP 地址添加到接口定义,然后再次执行ifup操作。服务器会尽量做到只更新那些已更改的设置。这适用于链路级选项,例如设备 MTU 或 MAC 地址;也适用于网络级设置,例如地址、路由,甚至地址配置模式(例如,从静态配置转为 DHCP 时)。

当然,对于合并了多个实体设备(例如桥接或绑定设备)的虚拟接口,事情会变得有些棘手。对于绑定设备,当设备运行时,您无法更改某些参数,否则会导致出错。

但是,您仍可以添加或去除绑定设备或桥接的子设备,或者选择绑定设备的主接口。

23.5.1.7 Wicked 扩展:地址配置

wicked 设计为使用外壳脚本扩展。这些扩展可在 config.xml 文件中定义。

目前支持多个种类的扩展:

  • 链路配置:这些脚本负责根据客户端提供的配置来设置设备的链路层,以及负责将链路层再次拆解。

  • 地址配置:这些脚本负责管理设备的地址配置。通常,地址配置和 DHCP 由 wicked 自身管理,不过您可借助扩展来实现这些功能。

  • 防火墙扩展:这些脚本可以应用防火墙规则。

通常,扩展中包含一个启动命令和一个停止命令、一个可选的pid 文件,以及传递给脚本的一组环境变量。

为了演示此扩展的工作原理,请查看 etc/server.xml 中定义的防火墙扩展:

<dbus-service interface="org.opensuse.Network.Firewall">
 <action name="firewallUp"   command="/etc/wicked/extensions/firewall up"/>
 <action name="firewallDown" command="/etc/wicked/extensions/firewall down"/>

 <!-- default environment for all calls to this extension script -->
 <putenv name="WICKED_OBJECT_PATH" value="$object-path"/>
 <putenv name="WICKED_INTERFACE_NAME" value="$property:name"/>
 <putenv name="WICKED_INTERFACE_INDEX" value="$property:index"/>
</dbus-service>

该扩展与 <dbus-service> 标记关联,定义了用于进行此接口的各项操作所需执行的命令。此外,声明可以定义并初始化传递给操作的环境变量。

23.5.1.8 Wicked 扩展:配置文件

您也可以使用脚本来扩展配置文件的处理。例如,extensions/resolver 脚本根据 server.xml 中配置的行为来最终处理租用中的 DNS 更新:

<system-updater name="resolver">
 <action name="backup" command="/etc/wicked/extensions/resolver backup"/>
 <action name="restore" command="/etc/wicked/extensions/resolver restore"/>
 <action name="install" command="/etc/wicked/extensions/resolver install"/>
 <action name="remove" command="/etc/wicked/extensions/resolver remove"/>
</system-updater>

wickedd 收到更新时,系统更新程序例程将分析租用,并调用解析程序脚本中的适当命令(backupinstall 等)。此后便可以使用 /sbin/netconfig 或者通过手动写入 /run/netconfig/resolv.conf(作为回退)来配置 DNS 设置。

23.5.2 配置文件

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

23.5.2.1 /etc/wicked/common.xml

/etc/wicked/common.xml 文件包含所有应用程序都应使用的通用定义。该文件源自/包含在此目录中的其他配置文件中。尽管您可以使用此文件允许在所有 wicked 组件间进行调试,但建议使用 /etc/wicked/local.xml 文件来实现此目的。执行维护更新后,/etc/wicked/common.xml 可能会被覆盖,因此您所做的更改可能会丢失。/etc/wicked/common.xml 文件包含默认安装中的 /etc/wicked/local.xml,因此您通常不需要修改 /etc/wicked/common.xml

如果要通过将 <use-nanny> 设置为 false 来禁用 nanny,请重启动 wickedd.service,然后运行以下命令以应用所有配置和策略:

> sudo wicked ifup all
注意
注意:配置文件

如果 wickeddwickednanny 程序自己的配置文件不存在,它们会尝试读取 /etc/wicked/common.xml

23.5.2.2 /etc/wicked/server.xml

wickedd 服务器进程会在启动时读取文件 /etc/wicked/server.xml。该文件将扩展存储到 /etc/wicked/common.xml 中。除此之外,此文件可配置解析程序的处理方式,以及从 addrconf 请求方(例如 DHCP)接收信息的方式。

建议您将需要对此文件进行的更改添加到单独的文件 /etc/wicked/server-local.xml/etc/wicked/server.xml 会包含该文件)。使用单独的文件可避免在维护更新期间覆盖您的更改。

23.5.2.3 /etc/wicked/client.xml

/etc/wicked/client.xmlwicked 命令使用。该文件指定发现 ibft 管理的设备时所用脚本的位置,并可配置网络接口配置的位置。

建议您将需要对此文件进行的所有更改都添加到单独的文件 /etc/wicked/client-local.xml/etc/wicked/server.xml 会包含该文件的内容)。使用单独的文件可避免在维护更新期间覆盖您的更改。

23.5.2.4 /etc/wicked/nanny.xml

/etc/wicked/nanny.xml 配置链接层的类型。建议您将特定配置添加到单独的文件 /etc/wicked/nanny-local.xml 中,以免在进行维护更新期间丢失所作的更改。

23.5.2.5 /etc/sysconfig/network/ifcfg-*

这些文件包含网络接口的传统配置。

注意
注意:wickedifcfg-* 文件

如果您指定 compat: 前缀,wicked 会读取这些文件。根据 /etc/wicked/client.xmlSUSE Linux Enterprise Server 的默认配置, wicked 会尝试先读取这些文件,然后再读取 /etc/wicked/ifconfig 中的 XML 配置文件。

提供的 --ifconfig 开关主要用于测试。如果指定该开关,则不会应用 /etc/wicked/ifconfig 中定义的默认配置源。

ifcfg-* 文件包含启动模式和 IP 地址等信息。可能的参数在 ifup 的手册页中有所介绍。此外,如果一个常规设置只能用于一个接口,则文件 dhcpwireless 中的大多数变量在 ifcfg-* 文件中都可以使用。但是,/etc/sysconfig/network/config 中的大多数变量是全局变量,无法在 ifcfg 文件中覆盖。例如,NETCONFIG_* 变量就是全局变量。

要配置 macvlanmacvtab 接口,请参见 ifcfg-macvlanifcfg-macvtap 手册页。例如,对于 macvlan 接口,请提供使用以下设置的 ifcfg-macvlan0

STARTMODE='auto'
MACVLAN_DEVICE='eth0'
#MACVLAN_MODE='vepa'
#LLADDR=02:03:04:05:06:aa

有关 ifcfg.template,请参见 第 23.5.2.6 节 “/etc/sysconfig/network/config/etc/sysconfig/network/dhcp/etc/sysconfig/network/wireless

IBM Z IBM Z 不支持 USB。接口文件的名称和网络别名包含 IBM Z 特定的元素,例如 qeth

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

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

注意
注意:使用 DHCPv6

在 SUSE Linux Enterprise 11 中,即使是在未正确配置 IPv6 路由器广播 (RA) 的网络中,DHCPv6 一向也能正常工作。从 SUSE Linux Enterprise 12 开始,DHCPv6 要求网络中至少有一个路由器发出 RA,用于指示此网络由 DHCPv6 管理。

对于无法在其中正确配置路由器的网络,用户可以通过在 ifcfg 文件中指定 DHCLIENT6_MODE='managed',使用 ifcfg 选项来覆盖此行为。您也可以在安装系统中使用引导参数来启用这种解决方法:

ifcfg=eth0=dhcp6,DHCLIENT6_MODE=managed

23.5.2.7 /etc/sysconfig/network/routes/etc/sysconfig/network/ifroute-*

TCP/IP 包的静态路由是由 /etc/sysconfig/network/routes/etc/sysconfig/network/ifroute-* 文件确定的。可以在 /etc/sysconfig/network/routes 中指定各种系统任务所需的所有静态路由:到主机的路由、通过网关到主机的路由以及到网络的路由。对于需要个别路由的每个接口,请定义另一个配置文件:/etc/sysconfig/network/ifroute-*。将通配符 (*) 替换为接口名称。路由选择配置文件中的项如下所示:

# Destination     Gateway           Netmask            Interface  Options

路由目标位于首列。此列可以包含网络或主机的 IP 地址,或者在有可访问名称服务器时,包含完全限定的网络或主机名。应该以 CIDR 表示法(地址加上关联的路由前缀长度)输入网络名称,例如 10.10.0.0/16(对于 IPv4 路由)或 fc00::/7(对于 IPv6 路由)。关键字 default 表示该路由是与网关位于相同地址族中的默认网关。对于没有网关的设备,请使用显式 0.0.0.0/0 或 ::/0 目标。

第二列包含默认网关或通过其可访问主机或网络的网关。

第三列已弃用;它用于包含目标的 IPv4 网络掩码。对于 IPv6 路由、默认路由,或者如果在第一列中使用了前缀长度(CIDR 表示法),请在此处输入破折号 (-)。

第四列包含接口名称。如果使用破折号 (-) 将它保留空白,可能会导致 /etc/sysconfig/network/routes 出现意外的行为。有关更多信息,请参见 routes 手册页。

第五列(可选)可用于指定特殊选项。有关详细信息,请参见 routes 手册页。

例 23.5︰ 通用网络接口和一些静态路由
# --- IPv4 routes in CIDR prefix notation:
# Destination     [Gateway]         -                  Interface
127.0.0.0/8       -                 -                  lo
204.127.235.0/24  -                 -                  eth0
default           204.127.235.41    -                  eth0
207.68.156.51/32  207.68.145.45     -                  eth1
192.168.0.0/16    207.68.156.51     -                  eth1

# --- IPv4 routes in deprecated netmask notation"
# Destination     [Dummy/Gateway]   Netmask            Interface
#
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

# --- IPv6 routes are always using CIDR notation:
# Destination     [Gateway]                -           Interface
2001:DB8:100::/64 -                        -           eth0
2001:DB8:100::/32 fe80::216:3eff:fe6d:c042 -           eth0

23.5.2.8 /var/run/netconfig/resolv.conf

主机所属的域在 /var/run/netconfig/resolv.conf 中指定(关键字 search)。使用 search 选项最多可以指定六个域,总共 256 个字符。当解析不是完全限定的名称时,将尝试通过附加单独的 search 项生成一个完全限定的名称。使用 nameserver 选项最多可以指定三个名称服务器,每行指定一个。注释以井号或分号(#;)开头。有关示例,请参见例 23.6 “/var/run/netconfig/resolv.conf

但是,您不应手动编辑 /etc/resolv.conf。此文件由 netconfig 脚本生成,是 /run/netconfig/resolv.conf 的符号链接。要定义静态 DNS 配置而不使用 YaST,请手动编辑 /etc/sysconfig/network/config 文件中的适当变量:

NETCONFIG_DNS_STATIC_SEARCHLIST

用于主机名查找的 DNS 域名列表

NETCONFIG_DNS_STATIC_SERVERS

用于主机名查找的名称服务器 IP 地址列表

NETCONFIG_DNS_FORWARDER

需要配置的 DNS 转发器名称,例如 bindresolver

NETCONFIG_DNS_RESOLVER_OPTIONS

将写入 /var/run/netconfig/resolv.conf 的任意选项,例如:

debug attempts:1 timeout:10

有关更多信息,请参见 resolv.conf 手册页。

NETCONFIG_DNS_RESOLVER_SORTLIST

最多包含 10 项的列表,例如:

130.155.160.0/255.255.240.0 130.155.0.0

有关更多信息,请参见 resolv.conf 手册页。

要使用 netconfig 禁用 DNS 配置,请设置 NETCONFIG_DNS_POLICY=''。有关 netconfig 的更多信息,请参见 netconfig(8) 手册页 (man 8 netconfig)。

例 23.6︰ /var/run/netconfig/resolv.conf
# Our domain
search example.com
#
# We use dns.example.com (192.168.1.116) as nameserver
nameserver 192.168.1.116

23.5.2.9 /sbin/netconfig

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

netconfig 可以识别三种主要操作。DHCP 或 PPP 等守护程序使用 netconfig modifynetconfig remove 命令提供或去除 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 文件中定义。自动配置工具(例如 DHCP 或 PPP)提供的动态配置设置由这些工具通过 netconfig modifynetconfig remove 操作直接递送。启用 NetworkManager 时,netconfig(在策略模式 auto 中)仅使用 NetworkManager 设置,忽略使用传统 ifup 方法配置的任何其他接口的设置。如果 NetworkManager 未提供任何设置,将使用静态设置作为后备设置。不支持将 NetworkManager 和 wicked 方法混合使用。

有关 netconfig 的详细信息,请参见 man 8 netconfig

23.5.2.10 /etc/hosts

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

例 23.7︰ /etc/hosts
127.0.0.1 localhost
192.168.2.100 jupiter.example.com jupiter
192.168.2.101 venus.example.com venus

23.5.2.11 /etc/networks

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

例 23.8︰ /etc/networks
loopback     127.0.0.0
localnet     192.168.0.0

23.5.2.12 /etc/host.conf

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

表 23.2︰ /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 文件中,但仍应通过附带的域名进行识别时,才可以使用此选项。

例 23.9︰ /etc/host.conf
# We have named running
order hosts bind
# Allow multiple address
multi on

23.5.2.13 /etc/nsswitch.conf

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

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

例 23.10︰ /etc/nsswitch.conf
passwd:     compat
group:      compat

hosts:      files dns
networks:   files dns

services:   db files
protocols:  db files
rpc:        files
ethers:     files
netmasks:   files
netgroup:   files nis
publickey:  files

bootparams: files
automount:  files nis
aliases:    files nis
shadow:     compat

表 23.3 “通过 /etc/nsswitch.conf 可用的数据库” 中列出了 NSS 上可用的数据库表 23.4 “NSS数据库的配置选项”中列出了 NSS 数据库的配置选项。

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

aliases

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

ethers

以太网地址。

netmasks

网络及其子网掩码的列表。只有在使用子网划分时才需要。

group

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

hosts

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

netgroup

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

networks

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

publickey

NFS 和 NIS+ 使用的 Secure_RPC 的公钥和密钥。

passwd

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

protocols

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

rpc

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

services

getservent 使用的网络服务。

shadow

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

表 23.4︰ NSS数据库的配置选项

files

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

db

通过数据库访问

nisnisplus

NIS,另请参见第 3 章 “使用 NIS

dns

仅可用作 hostsnetworks 的扩展

compat

仅可用作 passwdshadowgroup 的扩展

23.5.2.14 /etc/nscd.conf

此文件用于配置 nscd(名称服务缓存守护程序)。请参见 nscd(8)nscd.conf(5) 手册页。默认情况下,nscd 会缓存 passwdgroupshosts 的系统项。这对 NIS 和 LDAP 等目录服务的性能而言非常重要,否则,每次访问名称、组或主机都需要网络连接。

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

> sudo systemctl restart nscd

23.5.2.15 /etc/HOSTNAME

/etc/HOSTNAME 包含完全限定的主机名 (FQHN)。完全限定的主机名是附有域名的主机名。此文件只能包含一行(在此行中设置主机名)。计算机引导时会读取此文件。

23.5.3 测试配置

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

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

注意
注意:ifconfigroute 已过时

ifconfigroute 工具已过时。请改用 ip。例如,ifconfig 会将接口名限制为 9 个字符。

23.5.3.1 使用 ip 配置网络接口

ip 是用来显示和配置网络设备、路由选择、策略路由选择以及隧道的工具。

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

link

此对象表示网络设备。

address

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

neighbor

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

route

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

rule

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

maddress

此对象表示多播地址。

mroute

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

tunnel

此对象表示 IP 上的隧道。

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

使用以下命令更改设备的状态:

> sudo ip link set DEV_NAME

例如,要停用设备 eth0,请输入

> sudo ip link set eth0 down

要再次激活该设备,请使用

> sudo ip link set eth0 up
提示
提示:断开 NIC 设备的连接

如果使用以下命令停用某个设备

> sudo ip link set DEV_NAME down

该命令会在软件级别禁用网络接口。

如果您想要模拟拔下以太网网线或关闭所连接的交换机之类的链接丢失,请运行

> sudo ip link set DEV_NAME carrier off

例如,ip link set DEV_NAME down 会丢弃使用 DEV_NAME 的所有路由,而 ip link set DEV carrier off 则不会。请注意,carrier off 需要网络设备驱动程序的支持。

要将设备再次连接回物理网络,请运行

> sudo ip link set DEV_NAME carrier on

激活设备后,可对设备进行配置。要设置 IP 地址,请使用

> sudo ip addr add IP_ADDRESS + dev DEV_NAME

例如,要将接口 eth0 的地址设置为带标准广播(选项 brd)的 192.168.12.154/30,请输入

> sudo ip addr add 192.168.12.154/30 brd + dev eth0

要拥有活动连接,还必须配置默认网关。要设置系统的网关,请输入

> sudo ip route add default via gateway_ip_address

要显示所有设备,请使用

> sudo ip link ls

要只显示正在运行的接口,请使用

> sudo ip link ls up

要输出设备的接口统计信息,请输入

> sudo ip -s link ls DEV_NAME

要查看其他有用信息(特别是有关虚拟网络设备的信息),请输入

> sudo ip -d link ls DEV_NAME

另外,要查看设备的网络层(IPv4、IPv6)地址,请输入

> sudo ip addr

在输出中,可以找到有关设备 MAC 地址的信息。要显示所有路由,请使用

> sudo ip route show

有关使用 ip 的详细信息,请输入 ip help 或参见 man 8 ip 手册页。help 选项还可用于所有 ip 子命令,例如:

> sudo ip addr help

可在 /usr/share/doc/packages/iproute2/ip-cref.pdf 中找到 ip 手册。

23.5.3.2 使用 ping 测试连接

ping 命令是用于测试 TCP/IP 连接是否有效的标准工具。它使用 ICMP 协议来将小数据包和 ECHO_REQUEST 数据报文发送到目标主机,并请求即时答复。如果成功,ping 将显示表示这一结果的消息。这表示网络链路正在运作。

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

对于目标,您可以使用主机名或 IP 地址,例如 ping example.comping 192.168.3.100。程序会一直发送包,直到您按 CtrlC

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

例 23.11︰ 命令 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) 手册页。

提示
提示:Ping IPv6 地址

对于 IPv6 地址,请使用 ping6 命令。请注意,要 ping 链路本地地址,必须使用 -I 指定接口。如果通过 eth1 可获取地址,则以下命令有效:

ping6 -I eth1 fe80::117:21ff:feda:a425

23.5.4 单元文件和启动脚本

除了上面介绍的配置文件之外,还存在一些负责在引导计算机时加载网络服务的 systemd 单元文件和多个脚本。系统切换到 multi-user.target 目标后,即会启动这些文件和脚本。网络程序的一些单元文件和启动脚本中介绍了其中的部分单元文件和脚本。有关 systemd 的详细信息,请参见第 19 章 “systemd 守护程序;有关 systemd 目标的详细信息,请参见 systemd.special 的手册页 (man systemd.special)。

网络程序的一些单元文件和启动脚本
network.target

network.target 是网络的 systemd 目标,但其具体含义取决于系统管理员提供的设置。

有关详细信息,请访问 https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

multi-user.target

multi-user.target 是包含所有必需网络服务的多用户系统的 systemd 目标。

rpcbind

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

ypserv

启动 NIS 服务器。

ypbind

启动 NIS 客户端。

/etc/init.d/nfsserver

启动 NFS 服务器。

/etc/init.d/postfix

控制 postfix 进程。

23.6 路由器基本设置

路由器是一种联网设备,可收发往来于多个网络的数据(网络包)。路由器常用于将本地网络连接到远程网络(互联网)或连接多个本地网段。通过 SUSE Linux Enterprise Server,您可以构建一个具备 NAT(网络地址转换)或高级防火墙等功能的路由器。

下面是将 SUSE Linux Enterprise Server 转变为路由器的基本步骤。

  1. 启用转发,例如在 /etc/sysctl.d/50-router.conf 中启用

    net.ipv4.conf.all.forwarding = 1
    net.ipv6.conf.all.forwarding = 1

    然后提供接口的静态 IPv4 和 IPv6 IP 设置。启用转发会禁用多种机制,例如,IPv6 不再接受 IPv6 RA(路由器广告),这也会阻止创建默认路由。

  2. 在许多情况下,例如,当您可以通过多个接口连接同一个网络,或者通常使用的是 VPN(已位于常规多宿主主机上)时,必须禁用 IPv4 反向路径过滤(此功能当前不适用于 IPv6):

    net.ipv4.conf.all.rp_filter = 0

    您也可以改为通过防火墙设置进行过滤。

  3. 要从外部、上行或 ISP 接口上的路由器接受 IPv6 RA 并重新创建默认(或者更具特定性)的 IPv6 路由,请设置:

    net.ipv6.conf.${ifname}.accept_ra = 2
    net.ipv6.conf.${ifname}.autoconf = 0

    (注意:在以点分隔的 sysfs 路径中,eth0.42需写成 eth0/42。)

有关更多路由器行为和转发依赖项的信息,请访问 https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

要在内部 (DMZ) 接口上提供 IPv6 并将您自己通告为 IPv6 路由器,同时为客户端自动配置网络,请安装 radvd 并在 /etc/radvd.conf 中配置该程序,例如:

interface eth0
{
    IgnoreIfMissing on;         # do not fail if interface missed

    AdvSendAdvert on;           # enable sending RAs
    AdvManagedFlag on;          # IPv6 addresses managed via DHCPv6
    AdvOtherConfigFlag on;      # DNS, NTP... only via DHCPv6

    AdvDefaultLifetime 3600;    # client default route lifetime of 1 hour

    prefix 2001:db8:0:1::/64    # (/64 is default and required for autoconf)
    {
        AdvAutonomous off;         # Disable address autoconf (DHCPv6 only)

        AdvValidLifetime 3600;     # prefix (autoconf addr) is valid 1 h
        AdvPreferredLifetime 1800; # prefix (autoconf addr) is preferred 1/2 h
    }
}

配置防火墙,以通过 NAT 掩蔽从 LAN 进入 WAN 的流量,并在 WAN 接口上阻止入站流量:

> sudo firewall-cmd --permanent --zone=external --change-interface=WAN_INTERFACE
> sudo firewall-cmd --permanent --zone=external --add-masquerade
> sudo firewall-cmd --permanent --zone=internal --change-interface=LAN_INTERFACE
> sudo firewall-cmd --reload

23.7 设置绑定设备

对于某些系统,需要实施高于典型以太网设备的标准数据安全性或可用性要求的网络连接。在这些情况下,可以将多个以太网设备聚合到单个绑定设备。

绑定设备的配置通过绑定模块选项来完成。其行为主要受绑定设备模式的影响。该模式默认为 active-backup,也就是说,如果活动端口发生故障,另一个绑定端口将变成活动端口。可以使用以下绑定模式:

0 (balance-rr)

数据包依次通过第一个到最后一个可用接口传输。提供容错和负载平衡。

1 (active-backup)

只有一个网络接口处于活动状态。如果它发生故障,另一个接口将变成活动状态。此设置是 SUSE Linux Enterprise Server 的默认设置。提供容错。

2 (balance-xor)

流量会根据绑定中包含的设备数量在所有可用接口间拆分。这需要交换机的支持。提供容错和负载平衡。

3 (broadcast)

在所有接口上广播所有流量。需要交换机的支持。提供容错。

4 (802.3ad)

将接口聚合成共享相同速度和双工设置的组。需要接口驱动程序提供的 ethtool 支持,以及支持 IEEE 802.3ad 动态链路聚合并进行了相应配置的交换机。提供容错和负载平衡。

5 (balance-tlb)

自适应传输负载平衡。需要接口驱动程序中的 ethtool 支持,但不需要交换机支持。提供容错和负载平衡。

6 (balance-alb)

自适应负载平衡。需要接口驱动程序中的 ethtool 支持,但不需要交换机支持。提供容错和负载平衡。

有关各种模式的详细说明,请参见https://www.kernel.org/doc/Documentation/networking/bonding.txt

提示
提示:绑定和 Xen

绑定设备只对于有多个真实网卡可用的计算机有效。这意味着在大多数配置中,您仅应在 Dom0 中使用绑定配置。换言之,只有当您将多个网卡指派给一个 VM Guest 系统时,在 VM Guest 中设置绑定才有效。

注意
注意: IBM POWER:ibmveth 不支持绑定模式 5 和 6 (balance-tlb/balance-alb)

tlb/alb 绑定配置与 Power 固件之间存在冲突。简单而言,处于 tlb/alb 模式的绑定驱动程序会发送同时包含源和目标 MAC 地址(列作虚拟以太网 MAC 地址)的以太网回写包。Power 固件并不支持这些包。因此,ibmveth 不支持绑定模式 5 和 6。

要配置绑定设备,请使用以下过程:

  1. 运行 YaST ›  系统 ›  网络设置

  2. 使用添加并将设备类型更改为绑定。单击下一步继续。

    Image
  3. 选择如何为绑定设备指派 IP 地址。有三种方法可供选择:

    • 无 IP 地址

    • 动态地址(使用 DHCP 或 Zeroconf)

    • 静态指派的 IP 地址

    请使用最适合您环境的方法。

  4. 绑定端口选项卡中,选中相关复选框选择应加入到绑定中的以太网设备。

  5. 编辑绑定驱动程序选项并选择绑定模式。

  6. 确保将参数 miimon=100 添加到绑定驱动程序选项。如果没有此参数,则不会定期检查数据完整性。

  7. 单击下一步,然后单击确定退出 YaST 以创建设备。

23.7.1 绑定端口的热插拔

在特定网络环境(如高可用性)中,有时需要将某个绑定端口接口替换为另一个。原因可能在于网络设备持续故障。解决方案是设置绑定端口的热插拔。

按常规配置绑定(按照 man 5 ifcfg-bonding),例如:

ifcfg-bond0
          STARTMODE='auto' # or 'onboot'
          BOOTPROTO='static'
          IPADDR='192.168.0.1/24'
          BONDING_MASTER='yes'
          BONDING_SLAVE_0='eth0'
          BONDING_SLAVE_1='eth1'
          BONDING_MODULE_OPTS='mode=active-backup miimon=100'

使用 STARTMODE=hotplugBOOTPROTO=none 可指定绑定端口:

ifcfg-eth0
          STARTMODE='hotplug'
          BOOTPROTO='none'

ifcfg-eth1
          STARTMODE='hotplug'
          BOOTPROTO='none'

BOOTPROTO=none 使用 ethtool 选项(如果提供),但不会在 ifup eth0 上设置链路,这是因为绑定端口接口由绑定设备控制。

STARTMODE=hotplug 会使绑定端口接口在可用时自动加入绑定。

需要更改 /etc/udev/rules.d/70-persistent-net.rules 中的 udev 规则,以便按总线 ID(udev KERNELS 关键字等同于 hwinfo --netcard 中的“SysFS BusID”)而不是 MAC 地址匹配设备。这样将允许更换有缺陷的硬件(位于同一插槽但 MAC 不同的网卡),并避免在绑定更改其所有绑定端口的 MAC 地址时出现混淆。

例如:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
KERNELS=="0000:00:19.0", ATTR{dev_id}=="0x0", ATTR{type}=="1",
KERNEL=="eth*", NAME="eth0"

在引导时,systemd network.service 不会等待热插拔绑定端口就绪,而是等待绑定就绪,后者至少需要有一个绑定端口可用。当从系统中去除一个绑定端口接口(从 NIC 驱动程序解除绑定、执行 NIC 驱动程序的 rmmod 命令或真正去除 PCI 热插拔)时,内核会自动从将其绑定中去除。当向系统添加新网卡(更换插槽中的硬件)时,udev 会使用基于总线的永久命名规则将其重命名为绑定端口的名称,并为其调用 ifup。调用 ifup 会自动将新卡加入绑定。

23.8 设置组合设备以进行网络协作

链路聚合属于通用术语,指组合(或聚合)网络连接以提供逻辑层。有时,您还会看到通道协作以太网绑定端口截断等术语,它们是同义词,指的是同一个概念。

这个概念通常被称为绑定,最初是集成到 Linux 内核中的(请参见第 23.7 节 “设置绑定设备”了解最初的实现方式)。网络协作一词用来指代这个概念的新实现方式。

绑定和网络协作之间的主要差别在于,协作提供一组小型内核模块,由它们负责提供用于 teamd 实例的接口。其他一切都在用户空间中处理。这一点与最初的绑定实现方式不同,后者是将自己的所有功能都专门包含在内核中。如需两者的比较,请参见表 23.5 “绑定与组合的功能比较”

表 23.5︰ 绑定与组合的功能比较
功能绑定组合
广播、循环 TX 策略
活动备份 TX 策略
LACP (802.3ad) 支持
基于哈希的 TX 策略
用户可以设置哈希函数
TX 负载平衡支持 (TLB)
针对 LACP 的 TX 负载平衡支持
Ethtool 链接监控
ARP 链接监控
NS/NA (IPV6) 链接监控
针对 TX/RX 路径的 RCU 锁定
端口优先级和粘性
单独的按端口链接监控设置
多链接监控设置有限制
VLAN 支持
多设备堆叠
源:https://libteam.org/files/teamdev.pp.pdf

绑定和网络协作这两种实现方式可以并行使用。可将网络协作作为现有绑定实现方式的备选。它不会取代绑定。

网络协作可用于不同使用情况。稍后将会介绍其中两种最重要的使用情况,它们涉及:

  • 不同网络设备之间的负载平衡。

  • 从一个网络设备到另一个网络设备的故障转移(当其中一个设备出现故障时)。

目前没有用于支持创建协作设备的 YaST 模块。您需要手动配置网络协作。以下是适用于所有网络协作配置的一般过程:

过程 23.1︰ 一般过程
  1. 安装软件包 libteam-tools:

    > sudo zypper in libteam-tools
  2. /etc/sysconfig/network/ 下创建一个配置文件,通常为 ifcfg-team0。如果您需要多个网络协作设备,请为它们指定依次递增的编号。

    此配置文件包含数个变量,手册页中提供了相关说明(请参见 man ifcfgman ifcfg-team)。系统内的 /etc/sysconfig/network/ifcfg.template 文件中提供了示例配置。

  3. 去除将用于协作设备的接口的配置文件(通常为 ifcfg-eth0ifcfg-eth1)。

    建议您先备份这两个文件,然后再将其去除。Wicked 将会使用协作的必要参数重新创建配置文件。

  4. (可选)检查 Wicked 的配置文件中是否已包含所有内容:

    > sudo wicked show-config
  5. 启动网络协作设备 team0

    > sudo wicked ifup team0

    如果您需要其他调试信息,请在 all 子命令后面使用 --debug all 选项。

  6. 检查网络协作设备的状态。通过执行以下命令可以完成该操作:

    • 从 Wicked 获取 teamd 实例的状态:

      > sudo wicked ifstatus --verbose team0
    • 获取整个实例的状态:

      > sudo teamdctl team0 state
    • 获取 teamd 实例的 systemd 状态:

      > sudo systemctl status teamd@team0

    以上各命令将根据您的需要分别显示稍有不同的视图。

  7. 如果您之后需要对 ifcfg-team0 文件中的内容进行更改,请使用以下命令重新加载其配置:

    > sudo wicked ifreload team0

使用 systemctl 来启动或停止协作设备!而是使用如上所示的 wicked 命令。

要彻底去除组合设备,请执行以下过程:

过程 23.2︰ 去除组合设备
  1. 停止网络组合设备 team0

    > sudo wicked ifdown team0
  2. 将文件 /etc/sysconfig/network/ifcfg-team0 重命名为 /etc/sysconfig/network/.ifcfg-team0。在文件名前面插入一个点,以使 wicked看不到它。如果您确实不再需要该配置,也可以去除该文件。

  3. 重新加载配置:

    > sudo wicked ifreload all

23.8.1 用例:网络协作的负载平衡

负载平衡用于提高带宽。使用下面的配置文件可创建具有负载平衡功能的网络协作设备。继续过程 23.1 “一般过程”以设置设备。使用 teamdctl 检查输出。

例 23.12︰ 网络协作的负载平衡配置
STARTMODE=auto 1
BOOTPROTO=static 2
IPADDRESS="192.168.1.1/24" 2
IPADDR6="fd00:deca:fbad:50::1/64" 2

TEAM_RUNNER="loadbalance" 3
TEAM_LB_TX_HASH="ipv4,ipv6,eth,vlan"
TEAM_LB_TX_BALANCER_NAME="basic"
TEAM_LB_TX_BALANCER_INTERVAL="100"

TEAM_PORT_DEVICE_0="eth0" 4
TEAM_PORT_DEVICE_1="eth1" 4

TEAM_LW_NAME="ethtool" 5
TEAM_LW_ETHTOOL_DELAY_UP="10" 6
TEAM_LW_ETHTOOL_DELAY_DOWN="10" 6

1

控制协作设备的启动。auto 这个值表示接口将在网络服务可用时设置,并且会在系统每次重引导时自动启动。

如果您需要自行控制设备(并阻止其自动启动),请将 STARTMODE 设置为 manual

2

设置静态 IP 地址(在此处,对于 IPv4 指定 192.168.1.1,对于 IPv6 指定 fd00:deca:fbad:50::1)。

如果网络协作设备应该使用动态 IP 地址,请设置 BOOTPROTO="dhcp" 并去除(或注释掉)包含 IPADDRESSIPADDR6 的行。

3

TEAM_RUNNER 设置为 loadbalance 以激活负载平衡模式。

4

指定应聚合以创建网络协作设备的一个或多个设备。

5

定义链路监视器,以监控从属设备的状态。使用默认值 ethtool 只会检查设备是否已启动并可访问,因此,检查速度将会足够快。但是,它不会检查设备实际上是否可以发送或接收包。

如果您需要确保连接的可信度更高,请使用 arp_ping 选项。这样会向任意主机发送 ping(在 TEAM_LW_ARP_PING_TARGET_HOST 变量中配置)。仅当接收到应答时,才将网络协作设备视为正在运行。

6

定义链路启动(或关闭)与运行程序收到通知之间的延迟(以毫秒为单位)。

23.8.2 用例:使用网络协作实现故障转移

故障转移用于确保关键网络协作设备的高可用性,方法是纳入并行的备用网络设备。备用网络设备时刻都在运行,并在主设备出现故障时接替主设备。

使用以下配置文件可创建具有故障转移功能的网络协作设备。继续过程 23.1 “一般过程”以设置设备。使用 teamdctl 检查输出。

例 23.13︰ DHCP 网络协作设备的配置
STARTMODE=auto 1
BOOTPROTO=static 2
IPADDR="192.168.1.2/24" 2
IPADDR6="fd00:deca:fbad:50::2/64" 2

TEAM_RUNNER=activebackup 3
TEAM_PORT_DEVICE_0="eth0" 4
TEAM_PORT_DEVICE_1="eth1" 4

TEAM_LW_NAME=ethtool 5
TEAM_LW_ETHTOOL_DELAY_UP="10" 6
TEAM_LW_ETHTOOL_DELAY_DOWN="10" 6

1

控制协作设备的启动。auto 一值表示接口将在网络服务可用时设置,并且会在系统每次重引导时自动启动。

如果您需要自行控制设备(并阻止其自动启动),请将 STARTMODE 设置为 manual

2

设置静态 IP 地址(在此处,对于 IPv4 指定 192.168.1.2,对于 IPv6 指定 fd00:deca:fbad:50::2)。

如果网络协作设备应该使用动态 IP 地址,请设置 BOOTPROTO="dhcp" 并去除(或注释掉)包含 IPADDRESSIPADDR6 的行。

3

TEAM_RUNNER 设置为 activebackup 以激活故障转移模式。

4

指定应聚合以创建网络协作设备的一个或多个设备。

5

定义链路监视器,以监控从属设备的状态。使用默认值 ethtool 只会检查设备是否已启动并可访问,因此,检查速度将会足够快。但是,它不会检查设备实际上是否可以发送或接收包。

如果您需要确保连接的可信度更高,请使用 arp_ping 选项。这样会向任意主机发送 ping(在 TEAM_LW_ARP_PING_TARGET_HOST 变量中配置)。仅当收到答复时,网络协作设备才会被视为已启动。

6

定义链路启动(或关闭)与运行程序收到通知之间的延迟(以毫秒为单位)。

23.8.3 用例:组合设备上的 VLAN

VLAN 是虚拟局域网 (Virtual Local Area Network) 的缩写。它允许在单个物理以太网上运行多个逻辑(虚拟)以太网。它以逻辑方式将网络分为不同的广播域,以便数据包仅在为同一 VLAN 指定的端口之间交换。

下面的用例会在组合设备的基础上创建两个静态 VLAN:

  • vlan0,绑定到 IP 地址 192.168.10.1

  • vlan1,绑定到 IP 地址 192.168.20.1

按如下所示继续:

  1. 在交换机上启用 VLAN 标记。要针对组合设备使用负载平衡,交换机需要支持链接聚合控制协议 (LACP) (802.3ad)。有关细节,请查阅硬件手册。

  2. 确定是否要针对组合设备使用负载平衡或故障转移。按第 23.8.1 节 “用例:网络协作的负载平衡”第 23.8.2 节 “用例:使用网络协作实现故障转移”中所述设置组合设备。

  3. /etc/sysconfig/network 中,创建包含以下内容的 ifcfg-vlan0 文件:

    STARTMODE="auto"
    BOOTPROTO="static" 1
    IPADDR='192.168.10.1/24' 2
    ETHERDEVICE="team0" 3
    VLAN_ID="0" 4
    VLAN='yes'

    1

    定义固定的 IP 地址(在 IPADDR 中指定)。

    2

    定义 IP 地址,这里包含其网络掩码。

    3

    包含要用于 VLAN 接口的实际接口,这里是我们的组合设备 (team0)。

    4

    为 VLAN 指定唯一的 ID。文件名和 VLAN_ID 最好与名称 ifcfg-vlanVLAN_ID 对应。在本例中,VLAN_ID0,因而文件名为 ifcfg-vlan0

  4. /etc/sysconfig/network/ifcfg-vlan0 文件复制到 /etc/sysconfig/network/ifcfg-vlan1,并更改以下值:

    • IPADDR192.168.10.1/24 更改为 192.168.20.1/24

    • VLAN_ID0 更改为 1

  5. 启动两个 VLAN:

    # wicked ifup vlan0 vlan1
  6. 检查 ifconfig 的输出:

    # ifconfig -a
    [...]
    vlan0     Link encap:Ethernet  HWaddr 08:00:27:DC:43:98
              inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:fedc:4398/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:816 (816.0 b)
    
    vlan1     Link encap:Ethernet  HWaddr 08:00:27:DC:43:98
              inet addr:192.168.20.1 Bcast:192.168.20.255 Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:fedc:4398/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:816 (816.0 b)

23.9 采用 Open vSwitch 的软件定义的网络

软件定义网络 (SDN) 指的是将控制流量发送来源的系统(控制面)与将流量转发到选定目标的底层系统(数据面,也称为转发面)分离开来。这意味着先前由单一且通常不灵活的交换机执行的功能,现在可在交换机(数据面)与它的控制器(控制面)之间分离。在此模式下,控制器可以编程且具有极高的灵活性,并且能够快速适应多变的网络条件。

Open vSwitch 是一款可实施与 OpenFlow 协议兼容的分布式虚拟多层交换机的软件。OpenFlow 允许控制器应用程序修改交换机的配置。OpenFlow 构建于 TCP 协议之上,并且广泛实施于各种硬件和软件中。如此,单个控制器便可驱动多个大不相同的交换机。

23.9.1 Open vSwitch 的优点

采用 Open vSwitch 的软件定义网络具备多项优点,尤其在与虚拟机配合使用时:

  • 可轻松识别联网状态。

  • 网络及其实时状态可从一个主机移到另一个主机。

  • 网络动态可跟踪,并且可允许使用外部软件对其进行响应。

  • 您可以在网络包中应用标记并操作这些标记,以识别网络包往来的计算机并维护其他联网环境。标记规则可以配置和迁移。

  • Open vSwitch 实施的是 GRE 协议(通用路由封装)。例如,这可让您将专用 VM 网络相互连接起来。

  • Open vSwitch 可单独使用,但设计它是为了与联网硬件相集成并且能够控制硬件交换机。

23.9.2 安装 Open vSwitch

  1. 安装 Open vSwitch 和补充软件包:

    # zypper install openvswitch openvswitch-switch

    如果您计划将 Open vSwitch 与 KVM 超级管理程序配合使用,请另外安装 tunctl .如果您计划将 Open vSwitch 与 Xen 超级管理程序配合使用,请另外安装 openvswitch-kmp-xen .

  2. 启用 Open vSwitch 服务:

    # systemctl enable openvswitch
  3. 重启动计算机或使用 systemctl 立即启动 Open vSwitch 服务:

    # systemctl start openvswitch
  4. 要检查 Open vSwitch 是否已正确激活,请使用:

    # systemctl status openvswitch

23.9.3 Open vSwitch 守护程序和实用程序概述

Open vSwitch 包含多个组件,其中有内核模块和各种用户空间组件。内核模块用于加速数据路径,但最精简的 Open vSwitch 安装并不需要该模块。

23.9.3.1 守护进程

Open vSwitch 的中心可执行文件是它的两个守护程序。当您启动 openvswitch 服务时,便会间接启动它们。

Open vSwitch 的主守护程序 (ovs-vswitchd) 提供交换机的实施。Open vSwitch 的数据库守护程序 (ovsdb-server) 为存储 Open vSwitch 配置和状态的数据库提供服务。

23.9.3.2 实用程序

Open vSwitch 还自带多个协助您使用该服务的实用程序。下面的列表并不全面,只是介绍了一些重要的命令。

ovsdb-tool

创建、升级、压缩和查询 Open vSwitch 的数据库。处理 Open vSwitch 数据库相关的事务。

ovs-appctl

配置运行中的 ovs-vswitchdovsdb-server 守护程序。

ovs-dpctlovs-dpctl-top

创建、修改、可视化及删除数据路径。使用此工具可能会干扰也负责执行数据路径管理的 ovs-vswitchd。因此,它通常仅作诊断之用。

ovs-dpctl-top 可创建类似于 top 的数据路径可视化效果。

ovs-ofctl

管理任何遵循 OpenFlow 协议的交换机。ovs-ofctl 并非仅可用于与 Open vSwitch 交互。

ovs-vsctl

提供配置数据库的高级别接口。它可用于查询和修改该数据库。实际上,它会显示 ovs-vswitchd 的状态并可用于配置后者。

23.9.4 使用 Open vSwitch 创建网桥

下面的配置示例使用 SUSE Linux Enterprise Server 上默认使用的 Wicked 网络服务。要了解 Wicked 的更多信息,请参见第 23.5 节 “手动配置网络连接”

如果您已安装并启动 Open vSwitch,请执行如下操作:

  1. 要配置供虚拟机使用的网桥,请创建包含以下内容的文件:

    STARTMODE='auto'1
    BOOTPROTO='dhcp'2
    OVS_BRIDGE='yes'3
    OVS_BRIDGE_PORT_DEVICE_1='eth0'4

    1

    网络服务启动后自动设置网桥。

    2

    用于配置 IP 地址的协议。

    3

    将配置标记为 Open vSwitch 网桥。

    4

    选择应加入网桥的一个或多个设备。要添加更多设备,请在文件中另外为每个设备追加相应的行:

    OVS_BRIDGE_PORT_DEVICE_SUFFIX='DEVICE'

    SUFFIX 可以是任何字母数字字符串。不过,为了避免覆盖先前的定义,请确保每个设备的 SUFFIX 都是唯一的。

    将文件保存到 /etc/sysconfig/network 目录中并命名为 ifcfg-br0。您也可以不使用 br0,而是使用任何您喜欢的名称。但是,文件名必须以 ifcfg- 开头。

    要了解更多选项,请参见 ifcfg 的手册页 (man 5 ifcfg) 以及 ifcfg-ovs-bridge 的手册页 (man 5 ifcfg-ovs-bridge)。

  2. 现在,启动网桥:

    # wicked ifup br0

    Wicked 完成该命令后,应该会输出网桥的名称,旁边会显示状态 up

23.9.5 Open vSwitch 直接与 KVM 配合使用

第 23.9.4 节 “使用 Open vSwitch 创建网桥”中所述创建网桥后,您便可使用 Open vSwitch 管理通过 KVM/QEMU 创建的虚拟机的网络访问。

  1. 为了能够最充分地利用 Wicked 的功能,请对之前配置的网桥进行进一步的更改。打开先前创建的 /etc/sysconfig/network/ifcfg-br0,为其他端口设备追加一行:

    OVS_BRIDGE_PORT_DEVICE_2='tap0'

    此外,请将 BOOTPROTO 设置为 none。文件现在应如下所示:

    STARTMODE='auto'
    BOOTPROTO='none'
    OVS_BRIDGE='yes'
    OVS_BRIDGE_PORT_DEVICE_1='eth0'
    OVS_BRIDGE_PORT_DEVICE_2='tap0'

    新的端口设备 tap0 将在下一步中配置。

  2. 现在,为 tap0 设备添加配置文件:

    STARTMODE='auto'
    BOOTPROTO='none'
    TUNNEL='tap'

    将文件保存到 /etc/sysconfig/network 目录中并命名为 ifcfg-tap0

    提示
    提示:允许其他用户访问 Tap 设备

    若要能够从以非 root 身份的用户启动的虚拟机使用此 Tap 设备,请追加:

    TUNNEL_SET_OWNER=USER_NAME

    要为整个组授予访问权,请追加:

    TUNNEL_SET_GROUP=GROUP_NAME
  3. 最后,打开定义为第一个 OVS_BRIDGE_PORT_DEVICE 的设备的配置。如果其名称未更改过,则应为 eth0。因此,打开 /etc/sysconfig/network/ifcfg-eth0 并确保已设置以下选项:

    STARTMODE='auto'
    BOOTPROTO='none'

    如果文件尚不存在,请创建该文件。

  4. 使用 Wicked 重启动网桥接口:

    # wicked ifreload br0

    这也会触发重新加载新定义的网桥端口设备。

  5. 例如,要启动虚拟机,请使用:

    # qemu-kvm \
    -drive file=/PATH/TO/DISK-IMAGE1 \
    -m 512 -net nic,vlan=0,macaddr=00:11:22:EE:EE:EE \
    -net tap,ifname=tap0,script=no,downscript=no2

    1

    要启动的 QEMU 磁盘映像路径。

    2

    使用之前创建的 Tap 设备 (tap0)。

    有关 KVM/QEMU 用法的更多信息,请参见第 V 部分 “使用 QEMU 管理虚拟机”

23.9.6 Open vSwitchlibvirt 搭配使用

如前文第 23.9.4 节 “使用 Open vSwitch 创建网桥”中所述创建网桥后,您可以将该网桥添加到通过 libvirt 管理的现有虚拟机。由于 libvirt 已对 Open vSwitch 网桥提供一定程度的支持,因此您可以使用第 23.9.4 节 “使用 Open vSwitch 创建网桥”中创建的网桥,而无需进一步更改网络配置。

  1. 为所需的虚拟机打开域 XML 文件:

    # virsh edit VM_NAME

    以所需虚拟机的名称替换 VM_NAME。这样将会打开默认的文本编辑器。

  2. 查找以 <interface type="..."> 开头并以 </interface> 结尾的部分,找到文档的网络部分。

    以如下所示的网络部分替换现有部分:

    <interface type='bridge'>
      <source bridge='br0'/>
      <virtualport type='openvswitch'/>
    </interface>
    重要
    重要:virsh iface-* 和虚拟机管理器与 Open vSwitch 的兼容性

    目前,在使用 virsh iface-* 工具和虚拟机管理器的情况下,Open vSwitchlibvirt 还不兼容。如果使用以上任一工具,您的配置可能会损坏。

  3. 您现在便可照常启动或重启动虚拟机。

有关 libvirt 用法的更多信息,请参见第 II 部分 “使用 libvirt 管理虚拟机”

23.9.7 更多信息

有关 SDN 的详细信息,请参见 Open vSwitch 项目网站的文档部分,网址为 https://docs.openvswitch.org/en/latest/#documentation