19 基本联网知识 #
Linux 提供集成进各类网络结构中所需的联网工具和功能。可以通过 YaST 配置使用网络卡进行的网络访问。也可以手动进行配置。在本章中,仅描述基础机制和相关网络配置文件。
Linux 和其他 Unix 操作系统均使用 TCP/IP 协议。该协议不是单个网络协议,而是提供多种服务的一系列网络协议。TCP/IP 系列协议中的若干协议中所列的协议专用于在两台计算机之间通过 TCP/IP 交换数据。由 TCP/IP 连接而成的网络构成了全球网络,也称作“因特网”。
RFC 指注释请求 (Request for Comments)。RFC 由一些文档组成,用来描述各种因特网协议和操作系统及其应用程序的实施过程。RFC 文档用来描述如何设置因特网协议。有关 RFC 的更多信息,请参见 http://www.ietf.org/rfc.html。
- TCP
传送控制协议:面向连接的安全协议。要传输的数据首先由应用程序作为数据流发送,然后由操作系统转换为相应的格式。数据到达目标主机上的相应应用程序时采用最初发送时的原始数据流格式。TCP 确定在传输过程中是否有任何数据丢失或发生混乱。只要涉及到数据序列就会实施 TCP。
- UDP
用户数据报协议:无连接、不安全的协议。要传送的数据以应用程序生成的数据包的形式发送。不能保证数据以正确的顺序到达接收方,也可能丢失数据。UDP 适用于面向记录的应用程序。它的等待时间比 TCP 稍短。
- ICMP
因特网控制消息协议:这不是面向最终用户的协议,而是用来发出错误报告的特殊控制协议,能够控制参与 TCP/IP 数据传送的计算机的行为。此外,它还提供一种特殊的回应方式,可以通过 ping 程序查看该方式。
- IGMP
因特网组管理协议:此协议控制实施 IP 多路广播时的计算机行为。
如图 19.1 “TCP/IP 的简化层次模型” 中所示,数据交换在不同的层中进行。实际的网络层是通过 IP(因特网协议)的不安全数据传送。IP 的上面是 TCP(传送控制协议),它能够确保一定程度的数据传送安全性。IP 层由底层硬件相关协议(例如以太网)提供支持。
该图为每一层都提供了一到两个示例。层次按照抽象程度排序。最底层非常接近硬件。最上层则几乎就是硬件的完全抽象化。每一层都有自己的特殊功能。每一层的特殊功能多隐含在其描述中。数据链路层和物理层表示所用的物理网络(如以太网)。
几乎所有硬件协议都在面向数据包的基础上发挥作用。要传送的数据收集在包中(一次无法发送所有数据)。TCP/IP 包最大约为 64 KB。包通常要小得多,因为可能受到网络硬件的限制。以太网上的数据包最大约为 1500 个字节。通过以太网发送数据时,TCP/IP 包的大小不能超过这个限额。如果传送更多数据,操作系统需要发送更多的数据包。
为使层实现其指定功能,必须在数据包中保存与每层相关的附加信息。这些信息保存在数据包的报头中。每一层都在每个新包的开头附加一小块称为协议报头的数据。图 19.2 “TCP/IP 以太网包”中演示了一个通过以太网电缆传送的 TCP/IP 数据包示例。校验和位于包的末尾而不是开头,这样更便于网络硬件处理。
当应用程序通过网络发送数据时,数据会穿越每个层次,所有传递都在 Linux 内核中实施(只有物理层除外)。每一层都负责准备好数据,以便传递到下一层。最底层最后负责发送数据。接收数据时则逆向执行整个过程。正像剥洋葱皮那样,在每一层中都要从传输数据中删除协议报头。最后,传输层负责使数据可供目标上的应用程序使用。通过这种方式,每一层只与其上一层或下一层通讯。对于应用程序而言,数据是通过无线连接还是有线连接传输都无关紧要。同样,只要数据包的格式正确,传送哪种数据对数据线也无关紧要。
19.1 IP 地址和路由 #
各节的论述仅限于 IPv4 网络。有关 IPv6 协议(IPv4 的后续协议)的信息,请参见第 19.2 节 “IPv6 — 下一代的因特网”。
19.1.1 IP 地址 #
因特网上的每台计算机都有一个唯一的 32 位地址。这些 32 位(或 4 字节)地址通常按例 19.1 “编写 IP 地址”的第二行所示的格式书写。
IP Address (binary): 11000000 10101000 00000000 00010100 IP Address (decimal): 192. 168. 0. 20
在十进制格式中,四字节以十进制数书写,其间以句点分隔。IP 地址被指派给主机或网络接口。它在全球只能使用一次。这条规则也有例外,但这些例外与下文无关。
IP 地址中的点表示分级系统。直到 20 世纪 90 年代,IP 地址仍然有严格的分类。但是,此系统经证实太过死板,已经废止。现已改为使用无类别路由 - (CIDR,无类别域间路由)。
19.1.2 网络掩码和路由 #
网络掩码用于定义子网的地址范围。如果两台主机位于同一子网中,它们可直接相互访问。如果它们位于不同子网中,则需要用于处理此子网的所有通讯的网关地址才能相互访问。要检查两个 IP 地址是否位于同一个子网中,只需分别将两个地址与网络掩码进行“AND”操作。如果结果相同,则两个 IP 地址在同一个本地网络中。如果结果不同,则仅能通过网关连接远程 IP 地址和远程接口。
要了解网络掩码如何工作,可查看例 19.2 “将 IP 地址链接到网络掩码”。网络掩码有 32 位,它确定 IP 地址有多少属于网络。对于所有为 1
的位,将它们在 IP 地址中的相应位标记为属于网络。对于所有值为 0
的位,标记其属于子网内。这意味着值为 1
的位越多,子网就越小。因为网络掩码总是由多个连续的 1
位组成,所以也可通过计算网络掩码中的位数来确定。在例 19.2 “将 IP 地址链接到网络掩码”中,第一个 24 位的网络也可写作 192.168.0.0/24
。
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(存活时间)。
- 基础网络地址
这是网络掩码和该网络中的任意地址,如例 19.2 “将 IP 地址链接到网络掩码” 中的
Result
(结果)所示。不能将此地址指派给任何主机。- 广播地址
这可以解释为:“访问此子网中的所有主机”。要生成此地址,需要将网络掩码反转为二进制格式,并使用逻辑 OR 链接到基本网络地址。因此,以上示例会生成 192.168.0.255。该地址无法指派给任何主机。
- 本地主机
地址
127.0.0.1
指派给每台主机的“回路设备”。可以使用此地址以及通过 IPv4 定义的完整127.0.0.0/8
回写网络中的所有地址为您自己的计算机设置一个连接。对于 IPv6,仅存在一个回写地址 (::1
)。
由于 IP 地址必须在全球范围内唯一,您不能随机选择地址。共有三个地址域可用于建立基于 IP 的专用网络。这些地址无法与因特网上的其他地址建立任何连接,因为它们不能通过因特网传送。这些地址域在 RFC 1597 中指定,并且列在表 19.1 “专用 IP 地址域” 中。
网络/网络掩码 |
域 |
---|---|
|
|
|
|
|
|
19.2 IPv6 — 下一代的因特网 #
IBM Z 硬件的 CTC 和 IUCV 网络连接不支持 IPv6。
由于万维网 (WWW) 的出现,过去十五年内,越来越多的计算机通过 TCP/IP 进行通讯,因特网的规模发生了爆炸性的增长。自从 1990 年在 CERN (http://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 带来的改进和优点,以及如何从旧协议过渡到新协议。
19.2.1 优点 #
新协议中最为重要同时也最为显著的改进在于对可用地址空间的极大扩容。IPv6 地址由 128 位值而不是传统的 32 位值组成,它提供的 IP 地址数目多达 10 的 15 次方的若干倍。
不过,IPv6 与以前的不同不仅限于长度,其内部结构也发生了变化,这种结构可以包含更多的有关系统和系统所属网络的具体信息。有关详细信息,请参见第 19.2.2 节 “地址类型和结构”。
下面列出了新协议的其他优点:
- 自动配置
IPv6 使网络可以支持“即插即用”,这意味着无需任何手动配置即可将新安装的系统集成到(本地)网络中。新主机可以使用其自动配置机制,依赖名为邻居发现 (ND) 的协议从邻近的路由器提供的信息中得到自己的地址。这种方法不要求管理员参与,并且无需维护用于分配地址的中央服务器,这是 IPv4 无法媲美的(IPv4 中需要使用 DHCP 服务器来自动分配地址)。
不过,如果路由器已连接到交换机,则路由器应发送带标志的定期通告,告知网络中的主机彼此应如何交互。有关更多信息,请参见 RFC 2462 和
radvd.conf(5)
手册页以及 RFC 3315。- 移动能力
利用 IPv6,为一个网络接口同时指派多个地址成为可能。这使得用户能方便地访问多个网络,可媲美手机公司提供的国际漫游服务。当您出国时,进入相应区域后手机会自动登录国外服务,因此无论您身在何处,别人都可以用同一个号码联系到您,您也可以像在国内一样拨打电话。
- 安全通讯
在 IPv4 中,网络安全是一项附加功能。IPv6 则将 IPsec 作为其核心功能之一,允许系统通过安全隧道通讯,避免被因特网上的外来者窃听。
- 向后兼容性
实际上,要想将整个因特网一下子从 IPv4 转换为 IPv6 是不可能的。因此,这两个协议不仅要能在因特网上共存,还应能够共存于一个系统中,这一点至关重要。要实现这一点,一方面两种地址应兼容(IPv4 地址可以轻松转换为 IPv6 地址),另一方面还要使用多个隧道。请参见第 19.2.3 节 “IPv4 与 IPv6 并存”。此外,系统可以依赖双栈 IP 技术同时支持两种协议,这意味着系统中有两种完全分开的网络堆栈,从而避免这两种版本的协议相互影响。
- 通过多路广播的自定义服务
在 IPv4 中,有些服务(如 SMB)需要向本地网络中的所有主机广播其数据包。IPv6 使服务器能够通过多路广播对主机寻址(即将多个主机作为组的一部分寻址),因而提供了更精细的方法。这种方法与通过广播对所有主机寻址,或通过单路广播单独对每个主机寻址均不同。将哪些主机作为一组来寻址可能要取决于具体的应用程序。可使用一些预定义的组来寻址,例如对所有名称服务器寻址(所有名称服务器多路广播组),或对所有路由器寻址(所有路由器多路广播组)。
19.2.2 地址类型和结构 #
如上所述,当前的 IP 协议存在两个重要限制:IP 地址日益短缺,并且配置网络、维护路由选择表的任务变得越来越复杂繁重。IPv6 通过将地址空间扩展到 128 位解决了第一个问题。通过引入分级地址结构,结合先进的网络地址分配技术和多宿主功能(将多个地址指派给同一个设备,从而支持对多个网络的访问),第二个问题也得到缓解。
使用 IPv6 时,了解三种类型的地址十分有用:
- 单路广播
这类地址只与一个网络接口关联。采用这类地址的包只传递到一个目标。因此,使用单路广播地址可以将包传送到本地网络或因特网上的单个主机。
- 多路广播
这类地址与一组网络接口相关。采用这类地址的包将传递到属于该组的所有目标。多路广播地址主要供特定网络服务使用,用于以有序的方式与特定的主机组通讯。
- 任意广播
这类地址与一组接口相关。采用这类地址的包将根据基础路由协议的原则,传递给该组中与发送方最为接近的成员。任意广播地址便于主机在特定网络区域内找到提供特定服务的服务器。同一类型的所有服务器都具有相同的任意广播地址。在请求服务时,主机会收到路由协议决定的最接近它的服务器的回复。如果出于某种原因此服务器无法回复,协议会自动选择距离稍远一些的服务器,依此类推。
IPv6 地址分为八组,每组四位数字,代表十六位,采用十六进制表示法。它们之间用冒号 (:
) 分隔。可以删除某组中的前置零字节,但不能删除组中或组末的零。另一个约定是:连续的零字节若超过四个,则可以省略为双冒号形式。不过,每个地址只允许有一个这样的 ::
。中演示了这种简写表示法,其中的三行全部表示同一地址。例 19.3 “示例 IPv6 地址”
fe80 : 0000 : 0000 : 0000 : 0000 : 10 : 1000 : 1a4 fe80 : 0 : 0 : 0 : 0 : 10 : 1000 : 1a4 fe80 : : 10 : 1000 : 1a4
IPv6 地址的每个部分都有明确的功能。前面的字节构成前缀,用于指定地址类型。中间部分是地址的网络部分,但可以不用。地址的结尾构成主机部分。在 IPv6 中,网络掩码是通过在地址末尾的斜杠后指明前缀的长度来定义的。例 19.4 “指定前缀长度的 IPv6 地址” 中的地址包含上述信息,即:前 64 位构成地址的网络部分,后 64 位构成地址的主机部分。换言之,64
表示网络掩码由左起的 64 个 1 位值构成。与 IPv4 一样,IP 地址使用 AND 结合网络掩码值,以确定主机位于同一子网中还是其他网络中。
fe80::10:1000:1a4/64
IPv6 可以识别几种预定义的前缀类型。各种 IPv6 前缀中列出了其中的一部分。
00
IPv4 地址和 IPv6 上的 IPv4 兼容地址。这些用于与 IPv4 保持兼容。要使用这些地址,仍然需要依赖路由器将 IPv6 包转换为 IPv4 包。有若干特殊地址(如用于回路设备的地址)也采用此前缀。
2
或3
作为第一个数字可聚合全局单路广播地址。类似 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 个零位组成的前缀构成。这类兼容地址用于隧道通讯进程(请参见第 19.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 环境中,这项任务由本地代理来完成,该代理可以接收要发送到本地地址的所有包,并通过隧道进行转发。另一方面,发送到转交地址的那些包可直接转发到移动主机,而不必进行任何特殊的迂回处理。
19.2.3 IPv4 与 IPv6 并存 #
将与因特网相连的所有主机从 IPv4 迁移到 IPv6 是一个逐步的过程。这两种协议将在未来一定时间内并存。通过双栈技术来实施这两种协议,可以在同一系统上同时支持这两种协议。但这仍然没有解决启用了 IPv6 的主机如何与 IPv4 主机通讯,以及应如何通过当前的网络(绝大部分都基于 IPv4)传输 IPv6 数据包的问题。最好的解决方案就是提供隧道处理功能和兼容地址(请参见 第 19.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 中对此进行了描述。
19.2.4 配置 IPv6 #
要配置 IPv6,通常无需在各个工作站上执行任何更改。默认情况下启用 IPv6。要在已安装系统上禁用或启用 IPv6,请使用 YaST root
身份输入 modprobe
-i ipv6
。装载 IPv6 模块后无法将其卸载。
由于 IPv6 使用自动配置,将给网卡指派链路-本地网络中的地址。一般不在工作站上管理路由选择表。工作站可以使用路由器广告协议查询网络路由器,了解应实施的前缀和网关。使用 radvd 程序可以设置 IPv6 路由器。此程序会通知工作站对 IPv6 地址使用哪个前缀和哪个路由器。或者,可以使用 zebra/quagga 自动配置两个地址和路由选择。
有关如何使用 /etc/sysconfig/network
文件设置各种隧道的信息,请参见 ifcfg-tunnel
的手册页 (man ifcfg-tunnel
)。
19.2.5 更多信息 #
上文的概述中并未全面论述 IPv6 这一主题。有关这种新协议的深入讨论,请参见以下联机文档和书目:
- http://www.ipv6.org/
学习 IPv6 知识的起点。
- http://www.ipv6day.org
启动您自己的 IPv6 网络所需的所有信息。
- http://www.ipv6-to-standard.org/
已启用 IPv6 的产品列表。
- http://www.bieringer.de/linux/IPv6/
在此可找到 Linux IPv6-HOWTO 以及许多与该主题有关的链接。
- RFC 2460
有关 IPv6 的基础 RFC。
- IPv6 Essentials
Silvia Hagen 所著的 IPv6 Essentials(ISBN 0-596-00125-8) 中描述了该主题的所有重要方面。
19.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 的信息,请参见 http://www.internic.net。
DNS 不仅可以解析主机名,还能够为整个域识别出负责接收电子邮件的主机,即邮件交换器 (MX)。
为解析 IP 地址,您的计算机必须了解至少一个名称服务器及其 IP 地址。使用 YaST 可轻松指定此类名称服务器。有关如何在 SUSE® Linux Enterprise Server 中配置针对名称服务器的访问,请参见第 19.4.1.4 节 “配置主机名和 DNS”。有关如何设置您自己的名称服务器,请参见第 31 章 “域名系统”。
whois
协议与 DNS 密切相关。使用此程序可以快速找出负责给定域的服务器。
.local
顶级域由解析程序视为 link-local 域。DNS 请求作为多路广播 DNS 请求(而不是常规 DNS 请求)发送。如果已在名称服务器配置中使用 .local
域,必须在 /etc/host.conf
中关闭此选项。有关更多信息,请参见 host.conf
手册页。
要在安装期间关闭 MDNS,请使用 nomdns=1
引导参数。
有关多路广播 DNS 的详细信息,请参见 http://www.multicastdns.org。
19.4 使用 YaST 配置网络连接 #
Linux 上有多个支持的联网类型。其中多数使用不同的设备名,配置文件分布在文件系统上的多个位置。关于手动网络配置方面的详细概述,请参见第 19.5 节 “手动配置网络连接”。
已建立链接的所有网络接口(已连接网络电缆)将自动进行配置。可随时在已安装系统中配置额外的硬件。以下章节将介绍 SUSE Linux Enterprise Server 支持的所有网络连接类型的网络配置。
IBM Z 平台支持可热插拔网卡,但不支持通过 DHCP 自动将它们进行网络集成(与 PC 情况相同)。检测到网卡后,您需要手动配置接口。
19.4.1 使用 YaST 配置网卡 #
要在 YaST 中配置以太网卡或 Wi-Fi/蓝牙卡,请选择
› 。启动模块后,YaST 将显示 对话框,其中包括四个选项卡: 、 、 和 。 选项卡可设置常规联网选项,例如网路设置方法、IPv6 和常规 DHCP 选项。有关详细信息,请参见第 19.4.1.3 节 “配置未检测到的网卡”。要更改所配置网卡的配置,请参见第 19.4.1.2 节 “更改网卡的配置”。
选项卡包含关于已安装网络接口和配置的信息。会列出已正确检测到的所有网卡及其名称。您可在此对话框中手动配置新卡、删除或更改其配置。要手动配置未自动检测到的网卡,请参见 选项卡可设置计算机的主机名和要使用的服务器名称。有关详细信息,请参见 选项卡用于配置路由选择。有关更多信息,请参见19.4.1.1 配置全局联网选项 #
通过 YaST
模块的 选项卡,可设置重要的全局联网选项,如使用 NetworkManager、IPv6 和 DHCP 客户端选项。这些设置适用于所有网络接口。现在,NetworkManager 由 SUSE Linux Enterprise Workstation Extension 提供。要安装 NetworkManager,请激活 Workstation Extension 储存库,然后选择 NetworkManager 包。
在nm-applet
配置网络选项,并且 模块的 、 和 选项卡会被禁用。有关 NetworkManager 的详细信息,请参见 SUSE Linux Enterprise Desktop 文档。
在
中,选择是否使用 IPv6 协议。可将 IPv6 与 IPv4 一起使用。默认情况下,会启用 IPv6。但是在不使用 IPv6 协议的网络中,如果禁用 IPv6 协议,响应时间会更快。要禁用 IPv6,请停用 。如果禁用了 IPv6,内核将不再自动装载 IPv6 模块。重启动后会应用此设置。在
中,配置 DHCP 客户端的选项。在单个网络上,每个 DHCP 客户端的 必须不同。如果保留为空,会默认为网络接口的硬件地址。但是,如果正在运行若干使用相同网络接口(即相同硬件地址)的虚拟机,则在此处指定唯一的自由格式标识符。
AUTO
,将发送当前的主机名(即 /etc/HOSTNAME
中定义的主机名)。将选项字段保留空白则不会发送任何主机名。
如果您不希望根据 DHCP 中的信息更改默认路由,请停用
。19.4.1.2 更改网卡的配置 #
要更改网卡的配置,请在 YaST
› 中已检测到的网卡列表中选择一个网卡,然后单击 。将显示 对话框,可在其中使用 、 和 选项卡调整网卡配置。19.4.1.2.1 配置 IP 地址 #
您可在
对话框的 选项卡中设置网卡的 IP 地址或 IP 地址的确定方法。同时支持 IPv4 和 IPv6 地址。网卡可设置为 (对于绑定设备很有用)、 (IPv4 或 IPv6)或通过 和/或 指派的 。如果使用
,则选择是使用 (用于 DHCPv4)、 (用于 DHCPv6)还是 。如果可能,安装期间的首个带链接的可用网卡将会通过 DHCP 自动配置为使用自动 IP 地址。
在 IBM Z 平台上,只有具备 MAC 地址的网卡才支持基于 DHCP 的地址配置。属于这种情况的只有 OSA 和 OSA Express 网卡。
如果使用的是 DSL 线路,但 ISP(因特网服务提供商)没有指派静态 IP,此时还应使用 DHCP。如果决定使用 DHCP,请打开 YaST 网卡配置模块的
对话框,在 选项卡的 中配置细节。如果您使用虚拟主机设置,其中不同的主机都通过同一接口通信,则需要用 来区分。DHCP 比较适合客户端配置,但不太适合服务器配置。要设置静态 IP 地址,请如下继续操作:
在 YaST 网卡配置模块的
选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击 。在
选项卡中,选择 。输入
。IPv4 和 IPv6 地址均可使用。在 中输入子网掩码。如果使用 IPv6 地址,则对于前缀长度使用/64
格式的 。或者,您可以为此地址输入一个完全限定的
,该主机名将写入到/etc/hosts
配置文件。单击
。要激活配置,请单击
。
在激活网络接口期间,wicked
会检查载波,并且只有在检测到链路之后,才会应用 IP 配置。如果不管链路状态为何,您都需要应用配置(例如,您要测试侦听某个地址的服务),则可以在 /etc/sysconfig/network/ifcfg
内的接口配置文件中添加变量 LINK_REQUIRED=no
来跳过链路检测。
另外,您可以使用变量 LINK_READY_WAIT=5
来指定等待链路的超时值(以秒为单位)。
有关 ifcfg-*
配置文件的详细信息,请参见第 19.5.2.5 节 “/etc/sysconfig/network/ifcfg-*
”和 man 5 ifcfg
。
如果使用静态地址,则不会自动配置名称服务器和默认网关。要配置名称服务器,请按照第 19.4.1.4 节 “配置主机名和 DNS” 中所述进行。要配置网关,请按照第 19.4.1.5 节 “配置路由选择” 中所述进行。
19.4.1.2.2 配置多个地址 #
一个网络设备可以有多个 IP 地址。
这些所谓的别名或标签只能分别用于 IPv4。对于 IPv6 则忽略它们。使用 iproute2
网络接口可以有一个或多个地址。
要使用 YaST 设置网卡的其他地址,请执行以下步骤:
在 YaST
对话框的 选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击 。在
› 选项卡中,单击 。输入
、 和 。不要在别名中包含接口名称。要激活该配置,请确认设置。
19.4.1.2.3 更改设备名称和 Udev 规则 #
可更改网卡在使用时的设备名称。还可确定 udev 是通过网卡的硬件 (MAC) 地址还是通过总线 ID 来标识网卡。后一个选项更适合大型服务器,因为便于热插拔网卡。要使用 YaST 设置这些选项,请执行以下步骤:
在 YaST
对话框的 选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击 。转到
选项卡。当前设备名称显示在 中。单击 。选择 udev 应通过网卡的
还是 来识别网卡。网卡的当前 MAC 地址和总线 ID 显示在对话框中。要更改设备名称,请选中
选项并编辑名称。要激活该配置,请确认设置。
19.4.1.2.4 更改网卡内核驱动程序 #
对于某些网卡,可能会提供某些内核驱动程序。如果网卡已配置,YaST 允许您从可用的合适驱动程序列表中选择一个要使用的内核驱动程序。还可为内核驱动程序指定选项。要使用 YaST 设置这些选项,请执行以下步骤:
在 YaST 网络设置模块的
选项卡中,于已检测到的网卡列表中选择一个网卡,然后单击 。转到
选项卡。在
中选择要使用的内核驱动程序。在 中以=
=VALUE 格式为所选驱动程序输入任何选项。如果使用多个选项,应用空格分隔这些选项。要激活该配置,请确认设置。
19.4.1.2.5 激活网络设备 #
如果使用结合 wicked
的方法,便可以将设备配置为在引导期间、连接电缆时或检测到网卡时启动、以手动方式启动或永不启动设备。要更改设备启动,请如下继续操作:
在 YaST 的
› 中,于已检测到的网卡列表中选择一个网卡,然后单击 。在
选项卡中,从 选择所希望的项。选择
可在系统引导时启动设备。使用 将对任何现有物理连接监视接口。使用 ,可在接口可用时对其进行设置。这与 选项很相似,唯一区别是如果引导时接口不存在,将不会发生错误。选择 可通过ifup
手动控制接口。选择 将不启动设备。 与 相似,区别是使用systemctl stop wicked.service
命令不会关闭接口;如果wicked
处于活动状态,则network
服务还会处理wicked
服务。如果您使用 NFS 或 iSCSI 根文件系统,则选择此选项。要激活该配置,请确认设置。
在通过网络以 NFS 共享形式装入根分区的(无磁盘)系统中,配置可供访问 NFS 共享的网络设备时需保持谨慎。
关闭或重引导系统时,默认的处理顺序是关闭网络连接,然后卸载根分区。对于 NFS 根分区,这种顺序会产生问题,因为在尚未激活与 NFS 共享的网络连接的情况下,根分区无法完全卸载。为防止系统停用相关的网络设备,请按第 19.4.1.2.5 节 “激活网络设备”中所述打开网络设备配置选项卡,然后在 窗格中选择 。
19.4.1.2.6 设置最大传输单位大小 #
您可为接口设置最大传输单位 (MTU)。MTU 是指允许的最大包大小(以字节为单位)。更高的 MTU 可带来更高的带宽效率。但是较大的包有时可能会堵塞较慢的接口,从而增加后续包的延迟。
在 YaST 的
› 中,于已检测到的网卡列表中选择一个网卡,然后单击 。在
选项卡中,从 列表中选择所需项。要激活该配置,请确认设置。
19.4.1.2.7 PCIe 多功能设备 #
系统支持对以下技术提供支持的多功能设备:LAN、iSCSI 和 FCoE。YaST FCoE 客户端 (yast2 fcoe-client
) 会在额外的列中显示私用标志,以允许用户选择用于 FCoE 的设备。YaST 网络模块 (yast2 lan
) 会针对网络配置排除“仅储存设备”。
关于 FCoE 的详细信息,请参见第 15.3 节 “使用 YaST 管理 FCoE 服务”。
19.4.1.2.8 IP-over-InfiniBand (IPoIB) 的 Infiniband 配置 #
在 YaST 的
› 中选择 InfiniBand 设备,然后单击 。在
选项卡中,选择一种 (IPoIB) 模式: (默认)或 。要激活该配置,请确认设置。
有关 InfiniBand 的更多信息,请参见 /usr/src/linux/Documentation/infiniband/ipoib.txt
。
19.4.1.2.9 配置防火墙 #
您不必按第 19.4 节 “firewalld
”中所述执行详细的防火墙设置,只需在设置设备的过程中决定设备的基本防火墙配置。按如下所示继续:
打开 YaST 的
› 模块。在 选项卡中,从已检测到的网卡列表中选择一个网卡,然后单击 。进入
对话框的 选项卡。确定要将接口指派到的
。下列选项可用:- 防火墙已禁用
此选项只有在禁用防火墙和防火墙未在运行时才可用。仅当计算机属于受外部防火墙保护的大型网络时才使用此选项。
- 自动指派区域
此选项只有在启用防火墙后才可用。防火墙正在运行且接口自动指派给防火墙区域。包含关键字
any
的区域或外部区域将用于此类接口。- 内部区域(未保护)
防火墙正在运行,但不会强制执行任何规则来保护此接口。当计算机属于受外部防火墙保护的大型网络时才使用此选项。当计算机具有多个网络接口时,此选项还可用于连接到内部网络的接口。
- 隔离区域
隔离区域是位于内部网络和(恶意)因特网之前的附加防线。可从内部网络和因特网访问指派到此区域的主机,但指派到此区域的主机无法访问内部网络。
- 外部区域
防火墙在此接口上运行,并且全面保护其抵御其他假定有害的网络流量。这是默认选项。
要激活该配置,请确认设置。
19.4.1.3 配置未检测到的网卡 #
如果未正确检测到某个网卡,该卡将不会包含在已检测到的网卡列表中。如果确定系统包含网卡的驱动程序,则可以手动对其进行配置。还可以配置特殊网络设备类型,例如网桥、绑定、TUN 或 TAP。要配置未检测到的网卡(或特殊设备),请如下操作:
在 YaST 的
› › 对话框中,单击 。在
对话框中,从可用选项中设置接口的 和 。如果网卡为 USB 设备,请激活相应的复选框,并单击 退出此对话框。或者,如果需要,您可定义要用于网卡的内核 及其 。在
中,您可以为接口设置ifup
使用的ethtool
选项。有关可用选项的信息,请参见ethtool
手册页。如果选项字符串以
-
开头(例如,-K INTERFACE_NAME rx on
),则会用当前接口名称替换字符串中的第二个词。否则(例如,autoneg off speed 10
)ifup
会在开头添加-s INTERFACE_NAME
。单击
。- 、 和 选项卡中,配置所有所需的选项,如接口的 IP 地址、设备激活或防火墙区域。有关配置选项的更多信息,请参见
如果选择
作为接口的设备类型,则在下一个对话框中配置无线连接。要激活新的网络配置,请确认设置。
19.4.1.4 配置主机名和 DNS #
如果您在安装期间未更改网络配置,并且已有以太网卡可用,则系统会自动为您的计算机生成主机名并激活 DHCP。这同样适用于主机连接到网络环境所需的名称服务信息。如果网络地址设置使用了 DHCP,则会向域名服务器列表自动填充相应数据。如果希望使用静态设置,则手动设置这些值。
要更改计算机名称并调整名称服务器搜索列表,则如下继续操作:
转到 YaST 的
› 网络设置 选项卡。输入
。请注意,主机名是全局性的,将应用到所有网络接口。如果使用 DHCP 获取 IP 地址,则计算机的主机名将由 DHCP 服务器自动设置。如果连接到不同网络,您应禁用此行为,因为其他网络可能会指派不同的主机名,而在运行时更改主机名可能会导致混淆图形桌面。要禁止使用 DHCP 获取 IP 地址,请停用
。/etc/hosts
中的127.0.0.2
(回写)IP 地址关联。如果您想让主机名即使在没有活动的网络情况下也可随时解析,则可使用该选项。在
中,请选择修改 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
)。输入
并填写 列表。名称服务器必须由 IP 地址指定(如 192.168.1.116),而非由主机名指定。 选项卡中指定的名称是用于解析主机名(未指定域)的域名。如果使用多个 ,则使用逗号或空格分隔域。要激活该配置,请确认设置。
也可以使用 YaST 从命令行编辑主机名。YaST 所做更改会立即生效(手动编辑 /etc/HOSTNAME
文件时则不是这样)。要更改主机名,请使用以下命令:
root #
yast dns edit hostname=HOSTNAME
要更改名称服务器,请使用以下命令:
root #
yast dns edit nameserver1=192.168.1.116root #
yast dns edit nameserver2=192.168.1.117root #
yast dns edit nameserver3=192.168.1.118
19.4.1.5 配置路由选择 #
要使计算机能够与其他计算机和其他网络进行通信,必须提供路由选择信息以使网络流量使用正确的路径。如果使用 DHCP,则将自动提供此信息。如果使用静态设置,则必须手动添加此数据。
在 YaST 中,转到
› 。输入
(如果需要是 IPv4 和 IPv6)的 IP 地址。默认网关与每个可能的目标匹配,但是如果存在与所需地址匹配的路由表项,则会使用此项,而不是通过默认网关使用默认路由。可在
中输入多个项。输入 网络 IP 地址、 IP 地址和 。选择将流量路由到定义的网络要经过的 (减号代表任何设备)。要忽略这些值中的任何值,请使用减号-
。要在表中输入默认网关,请在 字段中使用默认
。注意:路由优先级如果使用更多的默认路由,则可以指定用于确定具有更高优先级的路由的度量选项。要指定度量选项,请在
中输入- metric NUMBER
。默认情况下使用具有最高度量的路由。如果网络设备已断开连接,则删除其路由并使用下一个路由。但是,当前内核不在静态路由中使用度量,只有multipathd
等路由守护程序使用度量。如果系统是路由器,请根据需要在
中启用 和 。要激活该配置,请确认设置。
19.4.2 IBM Z:配置网络设备 #
SUSE Linux Enterprise Server for IBM Z 支持多种类型的网络接口。可使用 YaST 来对所有这些接口进行配置。
19.4.2.1 qeth-hsi 设备 #
要将 qeth-hsi
(Hipersocket) 接口添加到安装的系统中,请启动 YaST 中的 › 模块。选择标记为 的设备之一以用作 READ 设备地址,然后单击 。输入设备编号供读、写和控制通道(例如设备编号格式:0.0.0800
)。然后单击“下一步”。在 对话框中,为新接口指定 IP 地址和网络掩码,然后单击 和 退出网络配置。
19.4.2.2 qeth-ethernet 设备 #
要将 qeth-ethernet
(IBM OSA Express 以太网卡)接口添加到安装的系统中,请启动 YaST 中的 › 模块。选择标有 的任一设备以用作“读”设备地址并单击 。输入设备编号供读、写和控制通道(例如设备编号格式:0.0.0700
)。输入所需端口名称、端口号(如果适用)和一些附加选项(请参见 http://www.ibm.com/developerworks/linux/linux390/documentation_suse.html 上的《Linux for IBM Z: Device Drivers, Features, and Commands》(Linux for IBM Z:设备驱动程序、功能和命令)手册)、您的 IP 地址及相应的网络掩码。单击 和 退出网络配置。
19.4.2.3 ctc 设备 #
要将 ctc
(IBM 并行 CTC 适配器)接口添加到安装的系统中,请启动 YaST 中的 › 模块。选择标记为 的设备之一,用作读取通道,然后单击 。选择适合您设备的 (通常为 )。指定您的 IP 地址和远程合作伙伴的 IP 地址。如果需要,可使用 › 调整 MTU 的大小。单击 和 退出网络配置。
不建议使用此接口。未来版本的 SUSE Linux Enterprise Server 将不支持此接口。
19.4.2.4 lcs 设备 #
要将 lcs
(IBM OSA-2 适配器)接口添加到安装的系统中,请启动 YaST 中的 › 模块。选择标记为 的设备之一,然后单击 。输入所需端口号、一些附加选项(请参见 http://www.ibm.com/developerworks/linux/linux390/documentation_suse.html 上的《Linux for IBM Z: Device Drivers, Features, and Commands》(Linux for IBM Z:设备驱动程序、功能和命令)手册)、您的 IP 地址及相应的网络掩码。单击 和 退出网络配置。
19.4.2.5 IUCV 设备 #
要将 iucv
(IUCV) 接口添加到安装的系统中,请启动 YaST 中的 › 模块。选择标记为 的设备并单击 。YaST 会提示您输入 IUCV 合作伙伴( )的名称。输入该名称(此项区分大小写),然后选择 。指定您的合作伙伴的 和 。如果需要,在 选项卡上 大小。单击 和 退出网络配置。
不建议使用此接口。未来版本的 SUSE Linux Enterprise Server 将不支持此接口。
19.5 手动配置网络连接 #
应该将手动配置网络软件作为最后的选择。建议使用 YaST。但是,对网络配置背景信息的了解将对您使用 YaST 有所帮助。
19.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 接口。默认情况下,每个网络接口的类为 netif
,wickedd 将自动挂接与此类兼容的所有接口。在当前实施中,这些兼容的接口包括:
- 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
列表节点。
19.5.1.1 wicked
体系结构和功能 #
如图 19.4 “wicked
体系结构”中所述,wicked
服务由几个部分组成。
wicked
体系结构 #
wicked
目前支持以下功能:
使用配置文件后端来分析 SUSE 样式的
/etc/sysconfig/network
文件。使用内部配置后端以 XML 格式表示网络接口配置。
打开和关闭“常规”网络接口,例如以太网或 InfiniBand,VLAN、网桥、绑定、tun、tap、虚设设备、macvlan、macvtap、hsi、qeth、iucv 和无线(当前限制为一个 wpa-psk/eap 网络)设备。
内置 DHCPv4 客户端和内置 DHCPv6 客户端。
默认启动的 nanny 守护程序有助于在设备可用(接口热插入)时自动激活配置的接口,以及在检测到链路(载波)时设置 IP 配置。有关详细信息,请参见 第 19.5.1.3 节 “Nanny”。
wicked
过去是以与 systemd 集成的 DBus 服务组形式来实现的。因此,一般的systemctl
命令将会适用于wicked
。
19.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.service
到 wicked.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
中为它定义的默认配置源:
firmware:
iSCSI 引导固件表 (iBFT)compat:
ifcfg
文件 — 为兼容性而实施
将会应用 wicked
从指定接口的这些源中获取的任何设置。预期的重要性顺序为 firmware
、compat
- 将来此顺序可能会发生变化。
有关更多信息,请参见 wicked
手册页。
19.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
,从而确保支持热插拔。它将在后台等待事件或更改(例如,打开新的设备或载体)。
19.5.1.4 打开多个接口 #
对于绑定和网桥,有效的做法是在一个文件 (ifcfg-bondX) 中定义整个设备拓扑,并一次性将它激活。然后,当您指定(网桥或绑定的)顶级接口名称时,wicked 可以激活整个配置:
wicked ifup br0
此命令会按适当的顺序自动设置网桥及其依赖项,而无需分别列出依赖项(端口等)。
要在一个命令中激活多个接口:
wicked ifup bond0 br0 br1 br2
要激活所有接口:
wicked ifup all
19.5.1.5 通过 Wicked 使用隧道 #
如果您需要将隧道与 Wicked 结合使用,可以使用专门针对此用途的 TUNNEL_DEVICE
。它可让您指定一个可选的设备名称,以将隧道绑定至该设备。隧道式包将只能通过此设备路由。
有关详细信息,请参见 man 5 ifcfg-tunnel
。
19.5.1.6 处理增量变化 #
有了 wicked
,当您要重新配置某个接口时,并不需要真正将它关闭(除非内核有此要求)。例如,要将另一个 IP 地址或路由添加到静态配置的网络接口,请将该 IP 地址添加到接口定义,然后再次执行“ifup”操作。服务器会尽量做到只更新那些已更改的设置。这适用于链路级选项,例如设备 MTU 或 MAC 地址;也适用于网络级设置,例如地址、路由,甚至地址配置模式(例如,从静态配置转为 DHCP 时)。
当然,对于合并了多个实体设备(例如桥接或绑定设备)的虚拟接口,事情会变得有些棘手。对于绑定设备,当设备运行时,您无法更改某些参数,否则会导致出错。
但是,您仍可以添加或去除绑定设备或桥接的子设备,或者选择绑定设备的主接口。
19.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>
标记,并定义针对此接口的操作应执行的命令。此外,声明可以定义并初始化传递给操作的环境变量。
19.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
中收到更新时,系统更新程序例程将分析租用,并调用解析程序脚本中的适当命令(backup
、install
等)。此后便可以使用 /sbin/netconfig
或者通过手动写入 /run/netconfig/resolv.conf
(作为回退)来配置 DNS 设置。
19.5.2 配置文件 #
本节对网络配置文件进行了概述并解释了它们的作用和所使用的格式。
19.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
,然后运行以下命令以应用所有配置和策略:
tux >
sudo
wicked ifup all
如果 wickedd
、wicked
或 nanny
程序自身的配置文件不存在,则会尝试读取 /etc/wicked/common.xml
。
19.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
)。使用单独的文件可避免在维护更新期间覆盖您的更改。
19.5.2.3 /etc/wicked/client.xml
#
/etc/wicked/client.xml
供 wicked
命令使用。该文件指定发现 ibft 管理的设备时所用脚本的位置,并可配置网络接口配置的位置。
建议您将需要对此文件进行的所有更改都添加到单独的文件 /etc/wicked/client-local.xml
(/etc/wicked/server.xml
会包含该文件的内容)。使用单独的文件可避免在维护更新期间覆盖您的更改。
19.5.2.4 /etc/wicked/nanny.xml
#
/etc/wicked/nanny.xml
配置链接层的类型。建议您将特定配置添加到单独的文件 /etc/wicked/nanny-local.xml
中,以免在维护更新期间丢失更改。
19.5.2.5 /etc/sysconfig/network/ifcfg-*
#
这些文件包含网络接口的传统配置。在 SUSE Linux Enterprise 11 中,这是除 iBFT 固件以外唯一支持的格式。
wicked
和 ifcfg-*
文件
如果您指定 compat:
前缀,wicked
将读取这些文件。根据 /etc/wicked/client.xml
中 SUSE Linux Enterprise Server 的默认配置,wicked
将尝试先读取这些文件,然后再读取 /etc/wicked/ifconfig
中的 XML 配置文件。
通常,提供 --ifconfig
开关仅用于测试。如果指定该开关,则不会应用 /etc/wicked/ifconfig
中定义的默认配置源。
ifcfg-*
文件包含启动模式和 IP 地址等信息。可能的参数在 ifup
的手册页中有所介绍。此外,如果一个常规设置只能用于一个接口,则文件 dhcp
和 wireless
中的大多数变量可用于 ifcfg-*
文件。但是,/etc/sysconfig/network/config
中的大多数变量是全局变量,不能在 ifcfg-files 中被覆盖。例如,NETCONFIG_*
变量是全局变量。
要配置 macvlan
和 macvtab
接口,请参见 ifcfg-macvlan
和 ifcfg-macvtap
手册页。例如,对于 macvlan 接口,请提供使用以下设置的 ifcfg-macvlan0
:
STARTMODE='auto' MACVLAN_DEVICE='eth0' #MACVLAN_MODE='vepa' #LLADDR=02:03:04:05:06:aa
有关 ifcfg.template
的信息,请参见第 19.5.2.6 节 “/etc/sysconfig/network/config
、/etc/sysconfig/network/dhcp
和 /etc/sysconfig/network/wireless
”。
IBM Z
IBM Z 不支持 USB。接口文件的名称和网络别名包含 IBM Z 特定的元素,例如 qeth
。
19.5.2.6 /etc/sysconfig/network/config
、/etc/sysconfig/network/dhcp
和 /etc/sysconfig/network/wireless
#
文件 config
包含 ifup
、ifdown
和 ifstatus
行为的常规设置。dhcp
包含用于无线 LAN 卡的 DHCP 和 wireless
设置。所有三个配置文件中的变量均已注释掉。/etc/sysconfig/network/config
中的一些变量也可用于 ifcfg-*
文件,在这些文件中它们具有更高优先级。/etc/sysconfig/network/ifcfg.template
文件列出可以按接口指定的变量。但是,/etc/sysconfig/network/config
中的大多数变量是全局变量,不能在 ifcfg-files 中被覆盖。例如,NETWORKMANAGER
或 NETCONFIG_*
变量是全局变量。
在 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
19.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
手册页。
# --- 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
19.5.2.8 /var/run/netconfig/resolv.conf
#
主机所属的域在 /var/run/netconfig/resolv.conf
中指定(关键字 search
)。使用 search
选项最多可以指定六个域,总共 256 个字符。当解析不是完全限定的名称时,将尝试通过附加单独的 search
项生成一个完全限定的名称。使用 nameserver
选项最多可以指定三个名称服务器,每行指定一个。注释以井号或分号(#
或 ;
)开头。有关示例,请参见例 19.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 转发器名称,例如
bind
或resolver
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
)。
/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
19.5.2.9 /sbin/netconfig
#
netconfig
是一个用于管理附加网络配置设置的模块化工具。它合并了静态定义的设置和自动配置机制根据预定义策略以 DHCP 或 PPP 形式提供的设置。通过调用负责修改配置文件和重启动服务或相似操作的 netconfig 模块将所需更改应用于系统。
netconfig
识别三种主要操作。netconfig modify
和 netconfig 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
命令使用当前设置更新网络配置。当策略或静态配置更改时,这非常有用。如果只想更新指定的服务(dns
、nis
或ntp
),请使用-m MODULE_TYPE
参数。
netconfig 策略和静态配置设置可手动定义或者使用 YaST 在 /etc/sysconfig/network/config
文件中定义。自动配置工具(例如 DHCP 或 PPP)提供的动态配置设置由这些工具通过 netconfig modify
和 netconfig remove
操作直接递送。启用 NetworkManager 时,netconfig(在策略模式 auto
中)仅使用 NetworkManager 设置,忽略使用传统 ifup 方法配置的任何其他接口的设置。如果 NetworkManager 未提供任何设置,将使用静态设置作为后备设置。不支持混合使用 NetworkManager 和 wicked
方法。
有关 netconfig
的更多信息,请参见 man 8 netconfig
。
19.5.2.10 /etc/hosts
#
在此文件中,如例 19.7 “/etc/hosts
”中所示,将为主机名指派 IP 地址。如果未实施名称服务器,则将与其建立 IP 连接的所有主机必须列在此处。在此文件中为每个主机输入一行数据,包含 IP 地址、完全限定的主机名和主机名。IP 地址必须在每行的开头,各项用空格和制表符隔开。注释总是以 #
符号开头。
/etc/hosts
#127.0.0.1 localhost 192.168.2.100 jupiter.example.com jupiter 192.168.2.101 venus.example.com venus
19.5.2.11 /etc/networks
#
在这里,网络名称被转换为网络地址。格式类似于 hosts
文件的格式,只是网络名称在地址的前面。请参见例 19.8 “/etc/networks
”。
/etc/networks
#loopback 127.0.0.0 localnet 192.168.0.0
19.5.2.12 /etc/host.conf
#
此文件控制名称解析,即通过解析程序库转换主机名和网络名称。此文件只用于链接到 libc4 或 libc5 的程序。对于当前的 glibc 程序,请参见 /etc/nsswitch.conf
中的设置。每个参数都必须始终在单独的一行中输入。注释以 #
符号开头。表 19.2 “/etc/host.conf 的参数” 显示了可用的参数。例 19.9 “/etc/host.conf
” 中显示了 /etc/host.conf
的示例。
order hosts、bind |
指定访问服务以进行名称解析的顺序。可用参数有(使用空格或逗号隔开): |
hosts:搜索 | |
bind:访问名称服务器 | |
nis:使用 NIS | |
multi on/off |
定义 |
nospoof on spoofalert on/off |
这些参数影响名称服务器 spoofing,但对网络配置没有任何影响。 |
trim domainname |
在主机名解析后,指定的域名将与主机名分开(前提是主机名包含域名)。此选项仅当本地域名在 |
/etc/host.conf
## We have named running order hosts bind # Allow multiple address multi on
19.5.2.13 /etc/nsswitch.conf
#
GNU C Library 2.0 的引入与 名称服务转换 (NNS) 的引入是同时进行的。有关详细信息,请参见 nsswitch.conf(5)
手册页和《GNU C 库参考手册》。
查询的顺序是在文件 /etc/nsswitch.conf
中定义的。例 19.10 “/etc/nsswitch.conf
” 中显示了 nsswitch.conf
的示例。注释以 #
符号开头。在本例中,hosts
数据库下的项意味着通过 DNS(请参见第 31 章 “域名系统”)将请求发送到 /etc/hosts
(files
)。
/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
表 19.3 “通过 /etc/nsswitch.conf 可用的数据库” 中列出了 NSS 上可用的“数据库”。表 19.4 “NSS“数据库”的配置选项”中列出了 NSS 数据库的配置选项。
|
|
|
以太网地址。 |
|
网络及其子网掩码的列表。只有在使用子网划分时才需要。 |
|
|
|
|
|
网络中用于控制访问权限的有效主机和用户列表,请参见 |
|
|
|
NFS 和 NIS+ 使用的 Secure_RPC 的公钥和密钥。 |
|
|
|
网络协议,由 |
|
|
|
|
|
用户阴影口令,由 |
|
直接访问文件,例如 |
|
通过数据库访问 |
|
NIS,另请参见第 3 章 “使用 NIS” |
|
仅可用作 |
|
仅可用作 |
19.5.2.14 /etc/nscd.conf
#
此文件用于配置 nscd(名称服务缓存守护程序)。请参见 nscd(8)
和 nscd.conf(5)
手册页。默认情况下,passwd
、groups
和 hosts
的系统项由 nscd 进行缓存。这对 NIS 和 LDAP 等目录服务的性能而言非常重要,否则,每次访问名称、组或主机都需要网络连接。
如果激活 passwd
的缓存,则通常需要 15 秒才能识别新添加的本地用户。使用以下命令重启动 nscd,缩短这段等待时间:
tux >
sudo
systemctl restart nscd
19.5.2.15 /etc/HOSTNAME
#
/etc/HOSTNAME
包含完全限定的主机名 (FQHN)。完全限定的主机名是附有域名的主机名。此文件只能包含一行(在此行中设置主机名)。计算机引导时会读取此文件。
19.5.3 测试配置 #
向配置文件写配置之前,可对其进行测试。要设置测试配置,请使用 ip
命令。要测试连接,请使用 ping
命令。
命令 ip
会直接更改网络配置,而不会将其保存到配置文件中。如果未在正确的配置文件中输入配置,重引导时将丢失已更改的网络配置。
ifconfig
和 route
已过时
ifconfig
和 route
工具已过时。请改为使用 ip
。例如,ifconfig
会将接口名限制为 9 个字符。
19.5.3.1 使用 ip
配置网络接口 #
ip
是用来显示和配置网络设备、路由选择、策略路由选择以及隧道的工具。
ip
是非常复杂的工具。它的常用语法为 ip
OPTIONS
OBJECT
COMMAND
。可使用以下对象:
- link
此对象表示网络设备。
- address
此对象表示设备的 IP 地址。
- neighbor
此对象表示 ARP 或 NDISC 超速缓存项。
- route
此对象表示路由选择表项。
- rule
此对象表示路由选择策略数据库中的规则。
- maddress
此对象表示多路广播地址。
- mroute
此对象表示多路广播路由缓存项。
- tunnel
此对象表示 IP 上的隧道。
如果未提供命令,则将使用默认命令(通常为 list
)。
使用以下命令更改设备的状态:
tux >
sudo
ip link set DEV_NAME
例如,要停用设备 eth0,请输入
tux >
sudo
ip link set eth0 down
要再次激活该设备,请使用
tux >
sudo
ip link set eth0 up
如果使用以下命令停用某个设备
tux >
sudo
ip link set DEV_NAME down
该命令会在软件级别禁用网络接口。
如果您想要模拟拔下以太网网线或关闭所连接的交换机之类的链接丢失,请运行
tux >
sudo
ip link set DEV_NAME carrier off
例如,ip link set DEV_NAME down
会丢弃使用 DEV_NAME 的所有路由,而 ip link set DEV carrier off
则不会。请注意,carrier off
需要网络设备驱动程序的支持。
要将设备再次连接回物理网络,请运行
tux >
sudo
ip link set DEV_NAME carrier on
激活设备后,可对设备进行配置。要设置 IP 地址,请使用
tux >
sudo
ip addr add IP_ADDRESS + dev DEV_NAME
例如,要将接口 eth0 的地址设置为带标准广播(选项 brd
)的 192.168.12.154/30,请输入
tux >
sudo
ip addr add 192.168.12.154/30 brd + dev eth0
要拥有活动连接,还必须配置默认网关。要设置系统的网关,请输入
tux >
sudo
ip route add default via gateway_ip_address
要显示所有设备,请使用
tux >
sudo
ip link ls
要只显示正在运行的接口,请使用
tux >
sudo
ip link ls up
要输出设备的接口统计信息,请输入
tux >
sudo
ip -s link ls DEV_NAME
要查看其他有用信息(特别是有关虚拟网络设备的信息),请输入
tux >
sudo
ip -d link ls DEV_NAME
另外,要查看设备的网络层(IPv4、IPv6)地址,请输入
tux >
sudo
ip addr
在输出中,可以找到有关设备 MAC 地址的信息。要显示所有路由,请使用
tux >
sudo
ip route show
有关使用 ip
的详细信息,请输入 ip
help
或参见 man 8 ip
手册页。help
选项还可用于所有 ip
子命令,例如:
tux >
sudo
ip addr help
可在 /usr/share/doc/packages/iproute2/ip-cref.pdf
中找到 ip
手册。
19.5.3.2 使用 ping 测试连接 #
ping
命令是用于测试 TCP/IP 连接是否有效的标准工具。它使用 ICMP 协议来将小数据包和 ECHO_REQUEST 数据报文发送到目标主机,并请求即时答复。如果成功,ping
将显示表示这一结果的消息。这表示网络链路正在运作。
ping
不仅能测试两台计算机之间的连接功能:它还能提供关于连接质量的一些基本信息。在例 19.11 “命令 ping 的输出” 中,可查看 ping
输出示例。倒数第二行包含有关已传输的包数、丢失的包和 ping
的总运行时间的信息。
因此,您可以使用主机名或 IP 地址(例如 ping
example.com
或 ping
192.168.3.100
)。程序会一直发送包,直到您按 Ctrl–C。
如果只需要检查连接功能,则可使用 -c
选项来限制包数。例如,要将 ping 限制为三个包,请输入 ping
-c 3 example.com
。
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)
手册页。
对于 IPv6 地址,请使用 ping6
命令。请注意,要 ping 本地链路地址,必须用 -I
指定接口。如果通过 eth1
可获取地址,则以下命令有效:
ping6 -I eth1 fe80::117:21ff:feda:a425
19.5.4 单元文件和启动脚本 #
除了上面介绍的配置文件之外,还存在一些负责在引导计算机时装载网络服务的 systemd 单元文件和多个脚本。系统切换到 multi-user.target
目标后,即会启动这些文件和脚本。网络程序的一些单元文件和启动脚本中介绍了其中的部分单元文件和脚本。有关 systemd
的更多信息,请参见第 15 章 “systemd
守护程序”;有关 systemd
目标的更多信息,请参见 systemd.special
的手册页 (man systemd.special
)。
network.target
network.target
是网络的 systemd 目标,但其具体含义取决于系统管理员提供的设置。有关详细信息,请参见 http://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 进程。
19.6 路由器基本设置 #
路由器是一种联网设备,可收发往来于多个网络的数据(网络包)。路由器常用于将本地网络连接到远程网络(因特网)或连接多个本地网段。通过 SUSE Linux Enterprise Server,您可以构建一个具备 NAT(网络地址转换)或高级防火墙等功能的路由器。
下面是将 SUSE Linux Enterprise Server 转变为路由器的基本步骤。
例如,在
/etc/sysctl.d/50-router.conf
中启用转发net.ipv4.conf.all.forwarding = 1 net.ipv6.conf.all.forwarding = 1
然后提供接口的静态 IPv4 和 IPv6 IP 设置。启用转发会禁用多种机制,例如,IPv6 不再接受 IPv6 RA(路由器广告),这也会阻止创建默认路由。
在许多情况下,例如,当您可以通过多个接口连接同一个网络,或者通常使用的是 VPN(已位于“常规多宿主主机”上)时,必须禁用 IPv4 反向路径过滤(此功能当前不适用于 IPv6):
net.ipv4.conf.all.rp_filter = 0
您也可以改为通过防火墙设置进行过滤。
要从外部、上行或 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 prefered 1/2 h } }
配置防火墙,以通过 NAT 掩蔽从 LAN 进入 WAN 的通讯,并在 WAN 接口上阻止入站通讯:
tux >
sudo
firewall-cmd
--permanent --zone=external --change-interface=WAN_INTERFACEtux >
sudo
firewall-cmd
--permanent --zone=external --add-masqueradetux >
sudo
firewall-cmd
--permanent --zone=internal --change-interface=LAN_INTERFACEtux >
sudo
firewall-cmd
--reload
19.7 设置绑定设备 #
对于某些系统,需要实施高于典型以太网设备的标准数据安全性或可用性要求的网络连接。在这些情况下,可以将多个以太网设备聚合到单个绑定设备。
绑定设备的配置通过绑定模块选项来完成。其行为主要受绑定设备模式的影响。默认情况下是 active-backup
,即如果活动从属设备发生故障,则另一个从属设备将变成活动从属设备。可以使用以下绑定模式:
- (balance-rr)
数据包依次通过第一个到最后一个可用接口传输。提供容错和负载平衡。
- (active-backup)
只有一个网络接口处于活动状态。如果它发生故障,另一个接口将变成活动状态。此设置是 SUSE Linux Enterprise Server 的默认设置。提供容错。
- (balance-xor)
根据以下策略在所有可用接口间拆分通讯:
[(source MAC address XOR'd with destination MAC address XOR packet type ID) modulo slave count]
需要交换机的支持。提供容错和负载平衡。- (broadcast)
在所有接口上广播所有通讯。需要交换机的支持。提供容错。
- (802.3ad)
将接口聚合成共享相同速度和双工设置的组。需要接口驱动程序中的
ethtool
支持,以及支持 IEEE 802.3ad 动态链路聚合并进行了相应配置的交换机。提供容错和负载平衡。- (balance-tlb)
自适应传输负载平衡。需要接口驱动程序中的
ethtool
支持,但不需要交换机支持。提供容错和负载平衡。- (balance-alb)
自适应负载平衡。需要接口驱动程序中的
ethtool
支持,但不需要交换机支持。提供容错和负载平衡。
有关各种模式的详细说明,请参见https://www.kernel.org/doc/Documentation/networking/bonding.txt。
绑定设备只对于有多个真实网卡可用的计算机有效。这意味着在大多数配置中,您仅应在 Dom0 中使用绑定配置。换言之,只有当您将多个网卡指派给一个 VM Guest 系统时,在 VM Guest 中设置绑定才有效。
tlb/alb 绑定配置与 Power 固件之间存在冲突。简单而言,处于 tlb/alb 模式的绑定驱动程序会发送同时包含源和目标 MAC 地址(列作虚拟以太网 MAC 地址)的以太网回写包。Power 固件并不支持这些包。因此,ibmveth 不支持绑定模式 5 和 6。
要配置绑定设备,请使用以下过程:
19.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=hotplug
和 BOOTPROTO=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 热插拔去除为 true),内核会自动从绑定中将其去除。当向系统添加新网卡时(替换插槽中的硬件),udev
会使用基于总线的网卡设备名称规则将其重命名为从属接口的名称,并为其调用 ifup
命令。ifup
命令会自动调用以将新网卡加入绑定。
19.8 设置小组设备以进行网络协作 #
“链路聚合”属于通用术语,指组合(或聚合)网络连接以提供逻辑层。有时,您还会看到“通道聚合”、“以太网绑定”、“端口汇聚”等术语,这些同义词都是指同一个概念。
这个概念通常被称为“绑定”,最初是集成到 Linux 内核中的(请参见第 19.7 节 “设置绑定设备”了解最初的实现方式)。网络协作一词用来指代这个概念的新实现方式。
绑定和网络协作之间的主要差别在于,协作提供一组小型内核模块,由它们负责提供用于 teamd 实例的接口。其他一切都在用户空间中处理。这一点与最初的绑定实现方式不同,后者是将自己的所有功能都专门包含在内核中。如需两者的比较,请参见表 19.5 “绑定与组合的功能比较”。
特性 | 绑定 | 组合 |
---|---|---|
广播、循环 TX 策略 | 是 | 是 |
活动备份 TX 策略 | 是 | 是 |
LACP (802.3ad) 支持 | 是 | 是 |
基于哈希的 TX 策略 | 是 | 是 |
用户可以设置哈希函数 | 否 | 是 |
TX 负载平衡支持 (TLB) | 是 | 是 |
针对 LACP 的 TX 负载平衡支持 | 否 | 是 |
Ethtool 链接监视 | 是 | 是 |
ARP 链接监视 | 是 | 是 |
NS/NA (IPV6) 链接监视 | 否 | 是 |
针对 TX/RX 路径的 RCU 锁定 | 否 | 是 |
端口优先级和粘性 | 否 | 是 |
单独的按端口链接监视设置 | 否 | 是 |
多链接监视设置 | 有限制 | 是 |
VLAN 支持 | 是 | 是 |
多设备堆叠 | 是 | 是 |
源: http://libteam.org/files/teamdev.pp.pdf |
绑定和网络协作这两种实现方式可以并行使用。可将网络协作作为现有绑定实现方式的备选。它不会取代绑定。
网络协作可用于不同使用情况。稍后将会介绍其中两种最重要的使用情况,它们涉及:
不同网络设备之间的负载平衡。
从一个网络设备到另一个网络设备的故障转移(当其中一个设备出现故障时)。
目前没有用于支持创建协作设备的 YaST 模块。您需要手动配置网络协作。以下是适用于所有网络协作配置的一般过程:
确保已安装所有必需的包。安装包 libteam-tools、 libteamdctl0 和 python-libteam。
在
/etc/sysconfig/network/
下创建一个配置文件,通常为ifcfg-team0
。如果您需要多个网络协作设备,请为它们指定依次递增的编号。该配置文件包含若干变量,手册页中对这些变量做了说明(请参见
man ifcfg
和man ifcfg-team
)。系统内的/etc/sysconfig/network/ifcfg.template
文件中提供了示例配置。去除将用于协作设备的接口的配置文件(通常为
ifcfg-eth0
和ifcfg-eth1
)。建议您先备份这两个文件,然后再将其去除。Wicked 将会使用协作的必要参数重新创建配置文件。
(可选)检查 Wicked 的配置文件中是否已包含所有内容:
tux >
sudo
wicked show-config
启动网络协作设备
team0
:tux >
sudo
wicked ifup all team0
如果您需要其他调试信息,请在
all
子命令后面使用--debug all
选项。检查网络协作设备的状态。通过执行以下命令可以完成该操作:
从 Wicked 获取 teamd 实例的状态:
tux >
sudo
wicked ifstatus --verbose team0
获取整个实例的状态:
tux >
sudo
teamdctl team0 state
获取 teamd 实例的 systemd 状态:
tux >
sudo
systemctl status teamd@team0
以上各命令将根据您的需要分别显示稍有不同的视图。
如果您之后需要对
ifcfg-team0
文件中的内容进行更改,请使用以下命令重新装载其配置:tux >
sudo
wicked ifreload team0
请勿使用 systemctl
来启动或停止协作设备!而是使用如上所示的 wicked
命令。
要彻底去除组合设备,请执行以下过程:
停止网络组合设备
team0
:tux >
sudo
wicked ifdown team0
将文件
/etc/sysconfig/network/ifcfg-team0
重命名为/etc/sysconfig/network/.ifcfg-team0
。在文件名前面插入一个点,以使 wicked“看不到”它。如果您确实不再需要该配置,也可以去除该文件。重新装载配置:
tux >
sudo
wicked ifreload all
19.8.1 使用案例:网络协作间的负载平衡 #
负载平衡用于提高带宽。使用下面的配置文件可创建具有负载平衡功能的网络协作设备。继续过程 19.1 “一般过程”以设置设备。使用 teamdctl
检查输出。
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
控制协作设备的启动。
如果您需要自己来控制设备(并阻止其自动启动),请将 | |
设置静态 IP 地址(此处对于 IPv4 指定
如果网络协作设备应该使用动态 IP 地址,请设置 | |
将 | |
指定应聚合以创建网络协作设备的一个或多个设备。 | |
定义链路监视器,以监视从属设备的状态。只有当设备已启动并可访问时,默认值
如果您需要确保连接的可信度更高,请使用 | |
定义链路启动(或关闭)与运行程序收到通知之间的延迟(以毫秒为单位)。 |
19.8.2 使用案例:使用网络协作实现故障转移 #
故障转移用于确保关键网络协作设备的高可用性,方法是纳入并行的备用网络设备。备用网络设备时刻都在运行,并在主设备出现故障时接替主设备。
使用以下配置文件可创建具有故障转移功能的网络协作设备。继续过程 19.1 “一般过程”以设置设备。使用 teamdctl
检查输出。
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
控制协作设备的启动。
如果您需要自己来控制设备(并阻止其自动启动),请将 | |
设置静态 IP 地址(此处对于 IPv4 指定
如果网络协作设备应该使用动态 IP 地址,请设置 | |
将 | |
指定应聚合以创建网络协作设备的一个或多个设备。 | |
定义链路监视器,以监视从属设备的状态。只有当设备已启动并可访问时,默认值
如果您需要确保连接的可信度更高,请使用 | |
定义链路启动(或关闭)与运行程序收到通知之间的延迟(以毫秒为单位)。 |
19.8.3 用例:组合设备上的 VLAN #
VLAN 是虚拟局域网 (Virtual Local Area Network) 的缩写。它允许在单个物理以太网上运行多个逻辑(虚拟)以太网。它以逻辑方式将网络分为不同的广播域,以便数据包仅在为同一 VLAN 指定的端口之间交换。
下面的用例会在组合设备的基础上创建两个静态 VLAN:
vlan0
,绑定到 IP 地址192.168.10.1
vlan1
,绑定到 IP 地址192.168.20.1
按如下所示继续:
在交换机上启用 VLAN 标记。要针对组合设备使用负载平衡,交换机需要支持链接聚合控制协议 (LACP) (802.3ad)。有关细节,请查阅硬件手册。
确定是否要针对组合设备使用负载平衡或故障转移。按第 19.8.1 节 “使用案例:网络协作间的负载平衡”或第 19.8.2 节 “使用案例:使用网络协作实现故障转移”中所述设置组合设备。
在
/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'
将
/etc/sysconfig/network/ifcfg-vlan0
文件复制到/etc/sysconfig/network/ifcfg-vlan1
,并更改以下值:IPADDR
,从192.168.10.1/24
更改为192.168.20.1/24
。VLAN_ID
,从0
更改为1
。
启动两个 VLAN:
root #
wicked
ifup vlan0 vlan1检查
ifconfig
的输出:root #
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)
19.9 采用 Open vSwitch 的软件定义网络 #
软件定义网络 (SDN) 指的是将控制流量发送来源的系统(控制面)与将流量转发到选定目标的底层系统(数据面,也称为转发面)分离开来。这意味着先前由单一且通常不灵活的交换机执行的功能,现在可在交换机(数据面)与它的控制器(控制面)之间分离。在此模式下,控制器可以编程且具有极高的灵活性,并且能够快速适应多变的网络条件。
Open vSwitch 是一款可实施与 OpenFlow 协议兼容的分布式虚拟多层交换机的软件。OpenFlow 允许控制器应用程序修改交换机的配置。OpenFlow 构建于 TCP 协议之上,并且广泛实施于各种硬件和软件中。如此,单个控制器便可驱动多个大不相同的交换机。
19.9.1 Open vSwitch 的优点 #
采用 Open vSwitch 的软件定义网络具备多项优点,尤其在与虚拟机配合使用时:
可轻松识别联网状态。
网络及其实时状态可从一个主机移到另一个主机。
网络动态可跟踪,并且可允许使用外部软件对其进行响应。
您可以在网络包中应用标记并操作这些标记,以识别网络包往来的计算机并维护其他联网环境。标记规则可以配置和迁移。
Open vSwitch 实施的是 GRE 协议(通用路由封装)。例如,这可让您将专用 VM 网络相互连接起来。
Open vSwitch 可单独使用,但设计它是为了与联网硬件相集成并且能够控制硬件交换机。
19.9.2 安装 Open vSwitch #
安装 Open vSwitch 和补充包:
root #
zypper
install openvswitch openvswitch-switch如果您计划将 Open vSwitch 与 KVM 超级管理程序配合使用,请另外安装 tunctl 。如果您计划将 Open vSwitch 与 Xen 超级管理程序配合使用,请另外安装 openvswitch-kmp-xen 。
启用 Open vSwitch 服务:
root #
systemctl
enable openvswitch重启动计算机或使用
systemctl
立即启动 Open vSwitch 服务:root #
systemctl
start openvswitch要检查 Open vSwitch 是否已正确激活,请使用:
root #
systemctl
status openvswitch
19.9.3 Open vSwitch 守护程序和实用程序概述 #
Open vSwitch 包含多个组件,其中有内核模块和各种用户空间组件。内核模块用于加速数据路径,但最精简的 Open vSwitch 安装并不需要该模块。
19.9.3.1 守护程序 #
Open vSwitch 的中心可执行文件是它的两个守护程序。当您启动 openvswitch
服务时,便会间接启动它们。
Open vSwitch 的主守护程序 (ovs-vswitchd
) 提供交换机的实施。Open vSwitch 的数据库守护程序 (ovsdb-server
) 为储存 Open vSwitch 配置和状态的数据库提供服务。
19.9.3.2 实用程序 #
Open vSwitch 还自带多个协助您使用该服务的实用程序。下面的列表并不全面,只是介绍了一些重要的命令。
ovsdb-tool
创建、升级、压缩和查询 Open vSwitch 的数据库。处理 Open vSwitch 数据库相关的事务。
ovs-appctl
配置运行中的
ovs-vswitchd
或ovsdb-server
守护程序。ovs-dpctl
、ovs-dpctl-top
创建、修改、可视化及删除数据路径。使用此工具可能会干扰也负责执行数据路径管理的
ovs-vswitchd
。因此,它通常仅作诊断之用。ovs-dpctl-top
可创建类似于top
的数据路径可视化。ovs-ofctl
管理任何遵循 OpenFlow 协议的交换机。
ovs-ofctl
并非仅可用于与 Open vSwitch 交互。ovs-vsctl
提供配置数据库的高级别接口。它可用于查询和修改该数据库。实际上,它会显示
ovs-vswitchd
的状态并可对其进行配置。
19.9.4 使用 Open vSwitch 创建网桥 #
下面的配置示例使用 SUSE Linux Enterprise Server 上默认使用的 Wicked 网络服务。要了解 Wicked 的更多信息,请参见第 19.5 节 “手动配置网络连接”。
如果您已安装并启动 Open vSwitch,请执行如下操作:
要配置供虚拟机使用的网桥,请创建包含以下内容的文件:
STARTMODE='auto'1 BOOTPROTO='dhcp'2 OVS_BRIDGE='yes'3 OVS_BRIDGE_PORT_DEVICE_1='eth0'4
网络服务启动后自动设置网桥。
用于配置 IP 地址的协议。
将配置标记为 Open vSwitch 网桥。
选择应加入网桥的一个或多个设备。要添加更多设备,请在文件中另外为每个设备追加相应的行:
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
)。现在,启动网桥:
root #
wicked
ifup br0Wicked 完成后,应该会输出网桥的名称,旁边会显示状态
up
。
19.9.5 将 Open vSwitch 直接与 KVM 配合使用 #
如第 19.9.4 节 “使用 Open vSwitch 创建网桥”中所述创建网桥后,您便可使用 Open vSwitch 管理通过 KVM/QEMU 创建的虚拟机的网络访问。
为了能够最充分地利用 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 将在下一步中配置。
现在,为 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
最后,打开定义为第一个
OVS_BRIDGE_PORT_DEVICE
的设备的配置。如果其名称未更改过,则应为eth0
。因此,打开/etc/sysconfig/network/ifcfg-eth0
并确保已设置以下选项:STARTMODE='auto' BOOTPROTO='none'
如果文件尚不存在,请创建该文件。
使用 Wicked 重启动网桥接口:
root #
wicked
ifreload br0这也会触发重新装载新定义的网桥端口设备。
例如,要启动虚拟机,请使用:
root #
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有关 KVM/QEMU 用法的更多信息,请参见第 V 部分 “使用 QEMU 管理虚拟机”。
19.9.6 将 Open vSwitch 与 libvirt
搭配使用 #
如前文第 19.9.4 节 “使用 Open vSwitch 创建网桥”中所述创建网桥后,您可以将该网桥添加到通过 libvirt
管理的现有虚拟机。由于 libvirt
已对 Open vSwitch 网桥提供一定程度的支持,因此您可以使用第 19.9.4 节 “使用 Open vSwitch 创建网桥”中创建的网桥,而无需进一步更改网络配置。
为所需的虚拟机打开域 XML 文件:
root #
virsh
edit VM_NAME以所需虚拟机的名称替换 VM_NAME。这样将会打开默认的文本编辑器。
查找以
<interface type="...">
开头并以</interface>
结尾的部分,找到文档的网络部分。以如下所示的网络部分替换现有部分:
<interface type='bridge'> <source bridge='br0'/> <virtualport type='openvswitch'/> </interface>
重要:virsh iface-*
和虚拟机管理器与 Open vSwitch 的兼容性目前,在使用
virsh iface-*
工具和虚拟机管理器的情况下,Open vSwitch 与libvirt
还不兼容。如果使用以上任一工具,您的配置可能会损坏。您现在便可照常启动或重启动虚拟机。
有关 libvirt
用法的更多信息,请参见第 II 部分 “使用 libvirt
管理虚拟机”。
19.9.7 更多信息 #
- http://openvswitch.org/support/
Open vSwitch 项目网站的文档部分
- https://www.opennetworking.org/images/stories/downloads/sdn-resources/white-papers/wp-sdn-newnorm.pdf
开放网络基金会发布的关于软件定义网络和 OpenFlow 协议的白皮书