跳过导航链接 | |
退出打印视图 | |
系统管理指南:IP 服务 Oracle Solaris 10 8/11 Information Library (简体中文) |
1. Oracle Solaris TCP/IP 协议套件(概述)
5. 配置 TCP/IP 网络服务和 IPv4 寻址(任务)
25. Oracle Solaris 中的 IP 过滤器(概述)
本节提供了配置 IPMP 组的过程,并介绍如何将一个接口配置为待机接口。
将系统上的接口配置为 IPMP 组的一部分之前,需要进行一些配置前规划。
以下过程包括配置 IPMP 组之前要收集的规划任务和信息。不必顺序执行这些任务。
IPMP 组通常由至少两个连接到同一 IP 链路的物理接口组成。但是,如果需要,可以配置单接口 IPMP 组。有关 IPMP 组的简介,请参阅IPMP 接口配置。例如,可以在同一 IPMP 组下配置同一台以太网交换机或同一个 IP 子网。可以在同一 IPMP 组中配置任意数量的接口。
不能将 ifconfig 命令的 group 参数用于逻辑接口。例如,可以将 group 参数用于 hme0,但是不能用于 hme0:1。
有关说明,请参阅SPARC: 如何确保接口的 MAC 地址是唯一的。
任何非空的名称都适合用作组的名称。您可能希望使用一个可以标识接口所连接到的 IP 链路的名称。
同一组中的所有接口必须按相同顺序配置相同的 STREAMS 模块。
通过使用 ifconfig interface modlist 命令,可以输出 STREAMS 模块的列表。例如,以下是 hme0 接口的 ifconfig 输出:
# ifconfig hme0 modlist 0 arp 1 ip 2 hme
接口通常作为网络驱动程序直接位于 IP 模块之下,如 ifconfig hme0 modlist 的输出中所示。它们应该不需要其他配置。
但是,某些技术(如 NCA 或 IP 过滤器)会将自身作为 STREAMS 模块插入到 IP 模块和网络驱动程序之间。同一 IPMP 组的接口的行为方式可能会出现问题。
如果 STREAMS 模块是有状态的,即使将相同模块推送到组中的所有接口上,在进行故障转移时仍可能会出现意外行为。但是,假定按相同顺序将 STREAMS 模块推送到 IPMP 组中的所有接口上,则可以使用无状态 STREAMS 模块。
ifconfig interface modinsert module-name
ifconfig hme0 modinsert ip
如果为 IPv4 配置了一个接口,则必须为 IPv4 配置组的所有接口。假定有一个由多个 NIC 的接口组成的 IPMP 组。如果在一个 NIC 的接口上进行 IPv6 寻址,则必须将 IPMP 组中的所有接口配置为支持 IPv6。
组合在一起的接口应属于相同的接口类型,如 /usr/include/net/if_types.h 中定义的那样。例如,不能将以太网接口和令牌环接口组合在一个 IPMP 组中。此外,不能将令牌总线接口与异步传输模式 (asynchronous transfer mode, ATM) 接口组合在同一 IPMP 组中。
使用经典的 IP over ATM 的接口不支持 IPMP。
本节包含有关具有至少两个物理接口的典型 IPMP 组的配置任务。
有关多接口 IPMP 组的简介,请参阅IPMP 组。
有关规划任务,请参阅规划 IPMP 组。
有关如何配置仅有一个物理接口的 IPMP 组,请参阅配置具有单个物理接口的 IPMP 组。
将 VLAN 配置到 IPMP 组时,以下用于配置 IPMP 组的步骤也适用。
开始之前
需要已经配置将来的 IPMP 组中所有接口的 IPv4 地址,如果适用,还需配置 IPv6 地址。
主管理员角色拥有主管理员配置文件。要创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 "使用 Solaris Management Console(任务)"。
# ifconfig interface group group-name
例如,要将 hme0 和 hme1 放入组 testgroup1 中,应键入以下命令:
# ifconfig hme0 group testgroup1 # ifconfig hme1 group testgroup1
请避免在组名中使用空格。ifconfig 状态显示不会显示空格。因此,请勿创建两个类似的组名,其中唯一的区别是一个名称还包含空格。如果其中一个组名包含空格,则这些组名在状态显示中看起来是相同的。
在双栈环境中,如果将某个接口的 IPv4 实例放入特定组中,则 IPv6 实例会自动放入同一组中。
仅当要在特定接口上使用基于探测器的故障检测时,才需要配置测试地址。测试地址将配置为在 ifconfig 命令中指定的物理接口的逻辑接口。
如果组中的一个接口将成为待机接口,请勿在此时配置该接口的测试地址。作为如何为 IPMP 组配置待机接口的一部分,可以为待机接口配置一个测试地址。
请使用 ifconfig 命令的以下语法配置测试地址:
# ifconfig interface addif ip-address parameters -failover deprecated up
例如,可以为主网络接口 hme0 创建以下测试地址:
# ifconfig hme0 addif 192.168.85.21 netmask + broadcast + -failover deprecated up
此命令可为主网络接口 hme0 设置以下参数:
设置为 192.168.85.21 的地址
设置为缺省值的网络掩码和广播地址
设置的 -failover 和 deprecated 选项
注 - 必须将 IPv4 测试地址标记为 deprecated,才能防止应用程序使用该测试地址。
通过键入 ifconfig interface,始终可以查看接口的当前状态。有关查看接口状态的更多信息,请参阅如何获取有关特定接口的信息。
通过指定分配给测试地址的逻辑接口,可以获取有关物理接口的测试地址配置的信息。
# ifconfig hme0:1 hme0:1: flags=9000843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 inet 192.168.85.21 netmask ffffff00 broadcast 192.168.85.255
# ifconfig interface inet6 -failover
具有 IPv6 地址的物理接口会放入与接口的 IPv4 地址相同的 IPMP 组中。如果将具有 IPv4 地址的物理接口配置到 IPMP 组中,则会出现此情况。如果首先将具有 IPv6 地址的物理接口放入 IPMP 组中,则具有 IPv4 地址的物理接口也会隐式放入同一 IPMP 组中。
例如,要使用 IPv6 测试地址配置 hme0,可键入以下内容:
# ifconfig hme0 inet6 -failover
无需将 IPv6 测试地址标记为 deprecated 即可防止应用程序使用该测试地址。
# ifconfig hme0 inet6 hme0: flags=a000841<UP,RUNNING,MULTICAST,IPv6,NOFAILOVER> mtu 1500 index 2 inet6 fe80::a00:20ff:feb9:17fa/10 groupname test
IPv6 测试地址是指接口的链路本地地址。
对于 IPv4,请将以下行添加到 /etc/hostname.interface 文件:
interface-address <parameters> group group-name up \ addif logical-interface -failover deprecated <parameters> up
在此情况下,测试 IPv4 地址仅在下次重新引导时配置。如果要在当前会话中调用配置,请执行步骤 1、2 和 3(可选的)。
对于 IPv6,请将以下行添加到 /etc/hostname6.interface 文件:
-failover group group-name up
此测试 IPv6 地址仅在下次重新引导时配置。如果要在当前会话中调用配置,请执行步骤 1、2 和 5(可选的)。
可以将新接口添加到实时系统上的现有组中。但是,重新引导后更改会丢失。
示例 31-1 配置具有两个接口的 IPMP 组
假定您要执行以下操作:
将网络掩码和广播地址设置为缺省值。
使用测试地址 192.168.85.21 配置接口。
可键入以下命令:
# ifconfig hme0 addif 192.168.85.21 netmask + broadcast + -failover deprecated up
必须将 IPv4 测试地址标记为 deprecated,才能防止应用程序使用该测试地址。请参见如何配置具有多个接口的 IPMP 组。
要启用地址的故障转移属性,可使用不带连字符的 failover 选项。
IPMP 组中的所有测试 IP 地址都必须使用相同的网络前缀。测试 IP 地址必须属于单个 IP 子网。
示例 31-2 重新引导后保留 IPv4 IPMP 组配置
假定您要创建一个名为 testgroup1 的具有以下配置的 IPMP 组:
数据地址为 192.168.85.19 的物理接口 hme0
测试地址为 192.168.85.21 的逻辑接口
注 - 在本示例中,将物理接口和数据地址联系在了一起。逻辑接口和测试地址也是如此。但是,接口“类型”和地址类型之间并没有内在的关系。
设置的 deprecated 和 -failover 选项
设置为缺省值的网络掩码和广播地址
可将以下行添加到 /etc/hostname.hme0 文件:
192.168.85.19 netmask + broadcast + group testgroup1 up \ addif 192.168.85.21 deprecated -failover netmask + broadcast + up
同样,要将第二个接口 hme1 放入同一组 testgroup1 中并且配置测试地址,可添加以下行:
192.168.85.20 netmask + broadcast + group testgroup1 up \ addif 192.168.85.22 deprecated -failover netmask + broadcast + up
示例 31-3 重新引导后保留 IPv6 IPMP 组配置
要为具有 IPv6 地址的接口 hme0 创建测试组,可将以下行添加到 /etc/hostname6.hme0 文件:
-failover group testgroup1 up
同样,要将第二个接口 hme1 放入组 testgroup1 中并且配置测试地址,可将以下行添加到 /etc/hostname6.hme1 文件:
-failover group testgroup1 up
故障排除
在 IPMP 组的配置过程中,in.mpathd 向系统控制台或 syslog 文件输出大量消息。这些消息实质是提示性消息,表示 IPMP 配置工作正常。
此消息表示已将接口 hme0 添加到 IPMP 组 testgroup1。但是,hme0 未配置测试地址。要启用基于探测器的故障检测,需要为接口指定测试地址。
May 24 14:09:57 host1 in.mpathd[101180]: No test address configured on interface hme0; disabling probe-based failure detection on it. testgroup1
对于已添加到 IPMP 组中的仅具有 IPv4 地址的所有接口,都会显示此消息。
May 24 14:10:42 host4 in.mpathd[101180]: NIC qfe0 of group testgroup1 is not plumbed for IPv6 and may affect failover capability
为接口配置测试地址后,应该显示此消息。
Created new logical interface hme0:1 May 24 14:16:53 host1 in.mpathd[101180]: Test address now configured on interface hme0; enabling probe-based failure detection on it
另请参见
如果希望 IPMP 组具有活动-待机配置,请转到如何为 IPMP 组配置待机接口。
基于探测器的故障检测涉及目标系统的使用,如基于探测器的故障检测中所述。对于某些 IPMP 组,in.mpathd 会使用大量的缺省目标。但是,对于另一些 IPMP 组,则可能需要为基于探测器的故障检测配置特定目标。通过将路由表中的主机路由设置为探测目标,可以完成基于探测器的故障检测。缺省路由器的前面将列出在路由表中配置的任何主机路由。因此,IPMP 会使用明确定义的主机路由来选择目标。可以使用以下两种方法中的任一种直接指定目标: 手动设置主机路由或创建可以成为启动脚本的 shell 脚本。
在评定网络中的哪些主机可能成为合适的目标时,请考虑以下标准。
确保将来的目标可用并且正在运行。建立其 IP 地址的列表。
确保目标接口与要配置的 IPMP 组位于同一网络中。
目标系统的网络掩码和广播地址必须与 IPMP 组中的地址相同。
目标主机必须能够应答使用基于探测器的故障检测的接口发出的 ICMP 请求。
$ route add -host destination-IP gateway-IP -static
将 destination-IP 和 gateway-IP 的值替换为要用作目标的主机的 IPv4 地址。例如,可以键入以下内容以指定目标系统 192.168.85.137,该目标系统与 IPMP 组 testgroup1 中的接口位于同一子网中。
$ route add -host 192.168.85.137 192.168.85.137 -static
主管理员角色拥有主管理员配置文件。要创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 "使用 Solaris Management Console(任务)"。
例如,可以创建一个名为 ipmp.targets 的包含以下内容的 shell 脚本:
TARGETS="192.168.85.117 192.168.85.127 192.168.85.137" case "$1" in 'start') /usr/bin/echo "Adding static routes for use as IPMP targets" for target in $TARGETS; do /usr/sbin/route add -host $target $target done ;; 'stop') /usr/bin/echo "Removing static routes for use as IPMP targets" for target in $TARGETS; do /usr/sbin/route delete -host $target $target done ;; esac
# cp ipmp.targets /etc/init.d
# chmod 744 /etc/init.d/ipmp.targets
# chown root:sys /etc/init.d/ipmp.targets
# ln /etc/init.d/ipmp.targets /etc/rc2.d/S70ipmp.targets
文件名 S70ipmp.targets 中的 S70 前缀会将新脚本相对其他启动脚本正确进行排序。
如果希望 IPMP 组具有活动-待机配置,请使用此过程。有关此类型配置的更多信息,请参阅IPMP 接口配置。
开始之前
必须已将所有接口配置为 IPMP 组的成员。
在要成为待机接口的接口上,不应配置测试地址。
有关配置 IPMP 组和指定测试地址的信息,请参阅如何配置具有多个接口的 IPMP 组。
主管理员角色拥有主管理员配置文件。要创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 "使用 Solaris Management Console(任务)"。
# ifconfig interface plumb \ ip-address other-parameters deprecated -failover standby up
待机接口只能具有一个 IP 地址,即测试地址。设置 standby up 选项之前,必须先设置 -failover 选项。对于 <other-parameters>,请使用您的配置所需的参数,如 ifconfig(1M) 手册页中所述。
例如,要创建 IPv4 测试地址,可键入以下命令:
# ifconfig hme1 plumb 192.168.85.22 netmask + broadcast + deprecated -failover standby up
将 hme1 定义为要配置为待机接口的物理接口。
将此测试地址指定给待机接口。
表示测试地址不用于外发包。
表示在接口出现故障时测试地址不进行故障转移。
将接口标记为待机接口。
例如,要创建 IPv6 测试地址,可键入以下命令:
# ifconfig hme1 plumb -failover standby up
# ifconfig hme1 hme1: flags=69040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER, STANDBY,INACTIVE mtu 1500 index 4 inet 192.168.85.22 netmask ffffff00 broadcast 19.16.85.255 groupname test
INACTIVE 标志表示此接口不用于任何外发包。此待机接口上发生故障转移时,会清除 INACTIVE 标志。
将待机接口指定给同一 IPMP 组,并为该待机接口配置测试地址。
例如,要将 hme1 配置为待机接口,可将以下行添加到 /etc/hostname.hme1 文件:
192.168.85.22 netmask + broadcast + deprecated group test -failover standby up
将待机接口指定给同一 IPMP 组,并为该待机接口配置测试地址。
例如,要将 hme1 配置为待机接口,可将以下行添加到 /etc/hostname6.hme1 文件:
-failover group test standby up
示例 31-4 为 IPMP 组配置待机接口
假定您要创建具有以下配置的测试地址:
作为待机接口的物理接口 hme2
测试地址为 192.168.85.22
设置的 deprecated 和 -failover 选项
设置为缺省值的网络掩码和广播地址
应键入以下内容:
# ifconfig hme2 plumb 192.168.85.22 netmask + broadcast + \ deprecated -failover standby up
仅当地址标记为 NOFAILOVER 地址时,才会将接口标记为待机接口。
通过键入以下内容,可以删除接口的待机状态:
# ifconfig interface -standby
如果 IPMP 组中仅有一个接口,则无法进行故障转移。但是,可以通过将接口指定给 IPMP 组对该接口启用故障检测。不必配置专用的测试 IP 地址,即可为单接口 IPMP 组建立故障检测。可以使用单个 IP 地址发送数据和检测故障。
主管理员角色拥有主管理员配置文件。要创建该角色并将其指定给用户,请参见《系统管理指南:基本管理》中的第 2 章 "使用 Solaris Management Console(任务)"。
使用以下语法将单个接口指定给 IPMP 组。
# ifconfig interface group group-name
以下示例会将接口 hme0 指定给 IPMP 组 v4test:
# ifconfig hme0 group v4test
执行此步骤之后,IPMP 会对接口启用基于链路的故障检测。
此外,还可以使用 ifconfig 命令的 -failover 子命令启用基于探测器的故障检测。以下示例通过使用当前指定给 hme0 的 IP 地址对 hme0 启用基于探测器的故障 hme0:
# ifconfig hme0 -failover
请注意,与多接口组不同,同一 IP 地址既可充当数据地址,又可充当测试地址。要让应用程序将测试地址用作数据地址,不能针对单接口 IPMP 组将测试地址标记为 deprecated。
使用以下语法将单个接口指定给 IPMP 组:
# ifconfig interface inet6 group group-name
例如,要将单个接口 hme0 添加到 IPMP 组 v6test 中,请键入以下内容:
# ifconfig hme0 inet6 group v6test
执行此步骤之后,IPMP 会对接口启用基于链路的故障检测。
此外,还可以使用 ifconfig 命令的 -failover 子命令启用基于探测器的故障检测。以下示例通过使用当前指定给 hme0 的 IP 地址对 hme0 启用基于探测器的故障 hme0:
# ifconfig hme0 inet6 -failover
请注意,与多接口组不同,同一 IP 地址既可充当数据地址,又可充当测试地址。要让应用程序将测试地址用作数据地址,不能针对单接口 IPMP 组将测试地址标记为 deprecated。
在单物理接口配置中,无法检验所探测的目标系统是否已出现故障或者接口是否已出现故障。仅可以通过一个物理接口来探测目标系统。如果子网中仅有一个缺省路由器,则当组中仅有一个物理接口时,关闭 IPMP。如果存在单独的 IPv4 和 IPv6 缺省路由器,或者存在多个缺省路由器,则需要探测多个目标系统。因此,可以安全地打开 IPMP。