15.5. 配置 IPX 路由器

您将回忆起我们对 IPX 环境中使用的协议的简短讨论,IPX 是一种可路由协议,路由信息协议 (RIP) 用于传播路由信息。IPX 版本的 RIP 与 IP 版本非常相似。它们以基本相同的方式运行;路由器定期广播其路由表的内容,其他路由器通过监听和整合接收到的信息来学习。主机只需要知道它们的本地网络是谁,并确保通过它们的本地路由器发送所有其他目的地的报文。路由器负责携带这些报文并将其转发到路由中的下一跳。

在 IPX 环境中,第二类信息必须在网络中传播。服务公告协议 (SAP) 携带与网络中哪些主机提供哪些服务相关的信息。例如,SAP 协议允许用户获取网络上文件或打印服务器的列表。SAP 协议的工作方式是让提供服务的主机定期广播它们提供的服务列表。IPX 网络路由器收集此信息,并将其与网络路由信息一起在整个网络中传播。要成为兼容的 IPX 路由器,您必须传播 RIP 和 SAP 信息。

就像 IP 一样,Linux 上的 IPX 提供了一个名为 ipxd 的路由守护程序,以执行与管理路由相关的任务。同样,就像 IP 一样,实际上是内核管理 IPX 网络接口之间的数据报转发,但它根据一组称为 IPX 路由表的规则执行此操作。ipxd 守护程序通过监听每个活动的网络接口并分析何时需要路由更改来保持这组规则的更新。ipxd 守护程序还响应来自直接连接网络上的主机的请求,这些主机请求路由信息。

ipxd 命令在某些发行版中预先打包提供,并且可以通过匿名 FTP 从 http://metalab.unc.edu/ 获取源代码,位于/pub/Linux/system/filesystems/ncpfs/ipxripd-x.xx.tgz文件。

ipxd 守护程序不需要任何配置。当它启动时,它会自动管理已配置的 IPX 设备之间的路由。关键是确保在使用 ipxd 启动之前,使用 ipx_interface 命令正确配置了 IPX 设备。虽然自动检测可能有效,但当您执行路由功能时,最好不要冒险,因此手动配置接口,并避免出现糟糕的路由问题的痛苦。每 30 秒,ipxd 重新发现所有本地连接的 IPX 网络并自动管理它们。这提供了一种管理可能并非始终处于活动状态的接口上的网络的方法,例如 PPP 接口。

ipxd 通常会在启动时从rc启动脚本启动,如下所示
# /usr/sbin/ipxd
&字符是必要的,因为 ipxd 默认情况下会移动到后台。虽然 ipxd 守护程序在充当 IPX 路由器的机器上最有用,但在存在多个路由器的网段上的主机上也很有用。当您指定–p参数时,ipxd 将被动地运行,监听来自网段的路由信息并更新路由表,但它不会传输任何路由信息。这样,主机可以保持其路由表更新,而无需每次想要联系远程主机时都请求路由。

15.5.1. 使用 ipx_route 命令进行静态 IPX 路由

在某些情况下,我们可能想要硬编码 IPX 路由。就像 IP 一样,我们可以使用 IPX 来做到这一点。ipx_route 命令将路由写入 IPX 路由表,而无需 ipxd 路由守护程序学习它。路由语法非常简单(因为 IPX 不支持子网划分),看起来像
# ipx_route add 203a41bc 31a10103 00002a02b102
显示的命令将添加一条路由到远程 IPX 网络 203a41bc,通过我们本地网络 31a10103 上的路由器,节点地址为 00002a02b102

您可以通过明智地使用带有–e参数的 tcpdump 命令来查找路由器的节点地址,以显示链路层标头并查找来自路由器的流量。如果路由器是 Linux 机器,您可以更简单地使用 ifconfig 命令来显示它。

您可以使用 ipx_route 命令删除路由
# ipx_route del 203a41bc

您可以通过查看/proc/net/ipx_route文件来列出内核中处于活动状态的路由。到目前为止,我们的路由表如下所示
# cat ipx_route
Network    Router_Net   Router_Node
203A41BC   31A10103     00002a02b102
31A10103   Directly     Connected
31A10103 网络的路由是在我们配置 IPX 接口时自动创建的。我们的每个本地网络都将由一个/proc/net/ipx_route像这样的条目表示。当然,如果我们的机器要充当路由器,它将至少需要另一个接口。

15.5.2. 内部 IPX 网络和路由

具有多个 IPX 接口的 IPX 主机,其每个接口都具有唯一的网络/节点地址组合。要连接到这样的主机,您可以使用任何这些网络/节点地址组合。当 SAP 公告服务时,它会提供与所提供的服务关联的网络/节点地址。在具有多个接口的主机上,这意味着必须选择其中一个接口作为要传播的接口;这是我们之前讨论的主接口标志的功能。但这提出了一个问题:到此接口的路由可能并不总是最佳路由,并且如果发生网络故障,将该网络与网络的其余部分隔离,则即使存在通往其他接口的 可能 路由,主机也将变得无法访问。其他路由永远不会被其他主机知道,因为它们永远不会被传播,并且内核无法知道它应该选择另一个主接口。为了避免这个问题,开发了一种设备,允许 IPX 主机以单个独立于路由的网络/节点地址而闻名,用于 SAP 传播的目的。这解决了我们的问题,因为这个新的网络/节点地址可以通过所有主机接口访问,并且是 SAP 公告的地址。

为了说明问题及其解决方案,图 15-1 显示了连接到两个 IPX 网络的服务器。第一个网络没有内部网络,但第二个网络有。图 图 15-1 中的主机将选择其接口之一作为其主接口,让我们假设为 0000001a:0800000010aa,这将作为其服务访问点进行公告。这对于 0000001a 网络上的主机来说效果很好,但意味着 0000002c 网络上的用户将通过网络路由来访问该端口,尽管服务器在该网络上直接有一个端口(如果他们从 SAP 广播中发现了该服务器)。

图 15-1. IPX 内部网络

允许此类主机拥有一个虚拟网络,其中虚拟主机地址完全是软件构造,这解决了这个问题。最好将此虚拟网络视为 位于 IPX 主机内部。然后,SAP 信息只需要为此虚拟网络/节点地址组合传播。此虚拟网络被称为 内部网络。但是,其他主机如何知道如何访问此内部网络呢?远程主机通过主机的直接连接网络路由到内部网络。这意味着您会看到引用支持多个 IPX 接口的主机的内部网络的路由条目。这些路由应选择当时可用的最佳路由,并且如果其中一个路由失败,则路由会自动更新为下一个最佳接口和路由。在 图 15-1 中,我们配置了一个地址为 0x10000010 的内部 IPX 网络,并使用了 00:00:00:00:00:01 的主机地址。这个地址将成为我们的主接口,并将通过 SAP 公告。我们的路由将反映此网络可通过我们的 任何一个 真实网络端口访问,因此主机将始终使用最佳网络路由连接到我们的服务器。

要创建此内部网络,请使用 Greg Page 的 IPX 工具包中包含的 ipx_internal_net 命令。同样,一个简单的示例演示了它的用法
# ipx_internal_net add 10000010 000000000001
此命令将创建一个地址为 10000010 且节点地址为 000000000001 的 IPX 内部网络。网络地址,就像任何其他 IPX 网络地址一样,在您的网络上必须是唯一的。节点地址是完全任意的,因为网络上通常只有一个节点。每个主机可能只有一个 IPX 内部网络,如果配置了内部网络,则内部网络将始终是主网络。

要删除 IPX 内部网络,请使用
# ipx_internal_net del

除非您的主机既提供服务又具有多个活动的 IPX 接口,否则内部 IPX 网络对您绝对没有用处。