跳到主要内容

附录 D. 认证

C. 可配置常量(Configurable Constants)

OSPF 协议有相当多的可配置参数。这些参数列在下文。它们被归入若干
通用功能类别(区域参数、接口参数等)。其中一些参数给出了示例取值。

某些参数设置需要在若干组路由器之间保持一致。例如,某个区域中的所有
路由器必须对该区域的参数达成一致,连接到同一网络的所有路由器必须
对该网络的 IP 网络号和掩码达成一致。

某些参数可能由本规范之外的路由器算法确定(例如,通过 SLIP 线路
连接到路由器的主机地址)。从 OSPF 的角度看,这些项目仍然是可配置的。

C.1 全局参数

    一般而言,会为每个区域运行一份独立的 OSPF 协议副本。正因如此,
    大多数配置参数是按区域定义的。少数几个全局配置参数列在下面。


    Router ID
        这是一个 32 位数字,在自治系统中唯一标识该路由器。一种
        Router ID 分配算法是选择分配给该路由器的最大或最小 IP
        地址。如果路由器的 OSPF Router ID 被更改,则应在新的
        Router ID 生效之前重启路由器的 OSPF 软件。在为更改 Router
        ID 而重启之前,路由器应把它的自始发 LSA 从路由域中清除
        (见 14.1 节),否则它们将持续存在长达 MaxAge 分钟。

    RFC1583Compatibility
        控制 16.4 节中在多个通告同一目的地的 AS-external-LSA 之间
        做选择时所使用的优先级规则。当设为 "enabled" 时,优先级
        规则仍然是 RFC 1583([Ref9])所规定的那些。当设为
        "disabled" 时,优先级规则是





        16.4.1 节中所述的那些,它们可以在同一目的地的
        AS-external-LSA 从不同区域始发时防止路由环路。默认设为
        "enabled"。

        为了把路由环路的可能性降到最低,OSPF 路由域中的所有 OSPF
        路由器都应把 RFC1583Compatibility 设为相同的值。当存在
        尚未更新本备忘录 16.4.1 节所规定功能的路由器时,所有路由器
        都应把 RFC1583Compatibility 设为 "enabled"。否则,所有
        路由器都应把 RFC1583Compatibility 设为 "disabled",以防止
        所有路由环路。

C.2 区域参数

    属于某个区域的所有路由器都必须对该区域的配置达成一致。两台
    路由器之间的不一致将导致它们之间无法形成 adjacency,从而阻碍
    路由协议流量和数据流量的流动。必须为一个区域配置以下项目:


    Area ID
        这是一个标识该区域的 32 位数字。Area ID 0.0.0.0 为
        backbone 保留。如果该区域代表一个已划分子网的网络,则可以
        用该子网划分网络的 IP 网络号作为 Area ID。

    地址范围列表(List of address ranges)
        一个 OSPF 区域被定义为一个地址范围列表。每个地址范围由以下
        项目组成:

        [IP address, mask]
                描述该地址范围中所包含的 IP 地址集合。网络和主机
                根据它们的地址是否落入该区域的某个定义性地址范围
                而被分配到某个区域。路由器则根据其所连网络的区域
                归属,被视为属于多个区域。








        Status  设为 Advertise 或 DoNotAdvertise。路由信息在区域
                边界处被压缩。在该区域之外,对每个地址范围最多
                通告一条路由(通过 summary-LSA)。当且仅当该地址
                范围的 Status 被设为 Advertise 时,该路由才被通告。
                不被通告的范围使得某些网络的存在可以被有意地对其他
                区域隐藏。Status 默认设为 Advertise。

        举例来说,假设一个 IP 子网划分网络要成为它自己的 OSPF 区域。
        该区域将被配置为单个地址范围,其 IP 地址是该子网划分网络的
        地址,其掩码是自然的 A、B 或 C 类地址掩码。该区域之外将
        通告单条路由,描述整个子网划分网络。

    ExternalRoutingCapability
        AS-external-LSA 是否会被泛洪进入/贯穿该区域。如果
        AS-external-LSA 被排除在该区域之外,则该区域被称为 "stub"。
        在 stub 区域内部,通向外部目的地的路由将完全基于一条默认
        汇总路由。backbone 不能被配置为 stub 区域。此外,virtual
        link 也不能穿过 stub 区域配置。更多信息见 3.6 节。

    StubDefaultCost
        如果该区域已被配置为 stub 区域,并且路由器自身是一台 area
        border router,则 StubDefaultCost 指示该路由器应向该区域
        通告的默认 summary-LSA 的代价。

C.3 路由器接口参数

    某些可配置的路由器接口参数(例如 IP 接口地址和子网掩码)实际上
    隐含了所连接网络的属性,因此必须在连接到该网络的所有路由器上
    保持一致。必须为路由器接口配置的参数有:









    IP interface address
        该接口的 IP 协议地址。它在整个互联网范围内唯一标识该路由器。
        在 point-to-point 网络上不要求有 IP 地址。这样的
        point-to-point 网络被称为"无编号的"(unnumbered)。

    IP interface mask
        也称为子网/网络掩码,它指示 IP 接口地址中标识所连接网络的
        那一部分。用 IP 接口掩码对 IP 接口地址做掩码运算,即得到
        所连接网络的 IP 网络号。在 point-to-point 网络和 virtual
        link 上,IP 接口掩码未定义。在这些网络上,链路本身没有被
        分配 IP 网络号,因此链路两端的地址(如果分配的话)是各自
        独立分配的。

    Area ID
        所连接网络所属的 OSPF 区域。

    Interface output cost
        在该接口上发送一个报文的代价,以链路状态 metric 表示。
        它在路由器的 router-LSA 中作为该接口的链路代价被通告。
        接口输出代价必须始终大于 0。

    RxmtInterval
        对属于该接口的 adjacency 而言,LSA 重传之间的秒数。在重传
        Database Description 报文和 Link State Request 报文时也
        使用该值。它应当远大于所连接网络上任意两台路由器之间的
        预期往返时延。该值的设置应保守,否则将导致不必要的重传。
        局域网的示例取值:5 秒。

    InfTransDelay
        估计通过该接口传输一个 Link State Update 报文所需的秒数。
        更新报文中包含的 LSA 在传输前必须把它们的年龄增加这个数量。
        该值应当考虑该接口的





        传输时延和传播时延。它必须大于 0。局域网的示例取值:1 秒。

    Router Priority
        一个 8 位无符号整数。当连接到某个网络的两台路由器都试图
        成为 Designated Router 时,Router Priority 最高的那台优先。
        如果仍然相同,则 Router ID 最高的那台优先。Router Priority
        被设为 0 的路由器没有资格在所连接网络上成为 Designated
        Router。Router Priority 只为连接到 broadcast 和 NBMA 网络
        的接口配置。

    HelloInterval
        路由器在该接口上发送 Hello 报文之间的时间长度(秒)。该值
        在路由器的 Hello 报文中被通告。连接到同一网络的所有路由器
        必须使用相同的值。HelloInterval 越小,检测到拓扑变化就越快;
        但也会产生更多的 OSPF 路由协议流量。X.25 PDN 网络的示例
        取值:30 秒。局域网的示例取值:10 秒。

    RouterDeadInterval
        在停止听到某台路由器的 Hello 报文之后,其邻居宣告该路由器
        失效之前的秒数。它同样在路由器 Hello 报文的
        RouterDeadInterval 字段中被通告。它应当是 HelloInterval 的
        若干倍(比如 4 倍)。该值同样必须在连接到同一网络的所有
        路由器上保持相同。

    AuType
        标识在所连接网络上要使用的认证过程。该值必须在连接到该网络
        的所有路由器上保持相同。关于已定义认证类型的讨论见附录 D。

    Authentication key
        这项配置数据使认证过程能够验证通过该接口收到的 OSPF 协议
        报文。例如,如果 AuType 指示的是简单口令,则





        Authentication key 将是一个明文的 64 位口令。与其他 OSPF
        认证类型关联的 Authentication key 在附录 D 中讨论。

C.4 虚链路参数

    virtual link 用于恢复/增强 backbone 的连通性。virtual link
    可以配置在任意一对拥有到同一个(非 backbone)区域接口的 area
    border router 之间。在 backbone 的图中,virtual link 表现为
    一条无编号的 point-to-point 链路。该 virtual link 必须在两台
    area border router 上都进行配置。

    virtual link 出现在(backbone 的)router-LSA 中,就好像它是
    一个独立的、通向 backbone 的路由器接口。因此,它具有与路由器
    接口关联的所有参数(见 C.3 节)。虽然 virtual link 的行为像
    一条无编号的 point-to-point 链路,但它确实有一个关联的 IP
    接口地址。该地址在它沿该 virtual link 发送的 OSPF 协议报文中
    用作 IP 源地址,并在路由表构建过程中被动态设置。Interface
    output cost 在 virtual link 上也被动态设置为两台路由器之间
    intra-area 路径的代价。参数 RxmtInterval 必须配置,并且应当
    远大于两台路由器之间的预期往返时延。对 virtual link 而言这
    可能难以估计;宁可把它设得过大也不要设得过小。Router Priority
    在 virtual link 上不被使用。

    virtual link 由以下两个可配置参数定义:该 virtual link 另一个
    端点的 Router ID,以及该 virtual link 所穿过的(非 backbone)
    区域(称为该 virtual link 的 Transit area)。virtual link
    不能穿过 stub 区域配置。

C.5 NBMA 网络参数

    OSPF 对待 NBMA 网络的方式与对待 broadcast 网络非常相似。由于
    可能有许多路由器连接到该网络,因此要为该网络选举一台 Designated
    Router。这台 Designated Router 随后始发一个 network-LSA,
    列出连接到该 NBMA 网络的所有路由器。








    但是,由于缺乏广播能力,在 Designated Router 选举中可能有必要
    使用配置参数。这些参数只需在那些自身有资格成为 Designated
    Router 的路由器上配置(即那些针对该网络的 Router Priority
    非零的路由器),而且只有在不存在自动发现邻居的过程时才需要:


    所有其他所连路由器的列表
        连接到该 NBMA 网络的所有其他路由器的列表。每台路由器由其
        在该网络上的 IP 接口地址列出。此外,对列出的每台路由器,
        还必须定义该路由器成为 Designated Router 的资格。当到某个
        NBMA 网络的接口变为可用时,路由器只向那些有资格成为
        Designated Router 的邻居发送 Hello 报文,直到发现
        Designated Router 的身份为止。

    PollInterval
        如果某台相邻路由器已变为不活动(在 RouterDeadInterval 秒内
        没有看到 Hello 报文),可能仍有必要向这个已失效的邻居发送
        Hello 报文。这些 Hello 报文将以降低的速率 PollInterval
        发送,该值应当远大于 HelloInterval。PDN X.25 网络的示例
        取值:2 分钟。

C.6 Point-to-MultiPoint 网络参数

    在 Point-to-MultiPoint 网络上,可能有必要配置那些通过该
    Point-to-MultiPoint 网络可直接到达的邻居集合。每个邻居由其在
    该 Point-to-MultiPoint 网络上的 IP 地址标识。在
    Point-to-MultiPoint 网络上不选举 Designated Router,因此所配置
    邻居的 Designated Router 资格是未定义的。

    另一种做法是,Point-to-MultiPoint 网络上的邻居可以由诸如
    Inverse ARP([Ref14])之类的较低层协议动态发现。









C.7 主机路由参数

    主机路由在 router-LSA 中作为掩码为 0xffffffff 的 stub network
    通告。它们表示的要么是通向 point-to-point 网络的路由器接口,
    要么是处于环回状态的路由器接口,要么是直接连接到路由器的 IP
    主机(例如通过 SLIP 线路)。对每台直接连接到路由器的主机,
    必须配置以下项目:


    Host IP address
        主机的 IP 地址。

    Cost of link to host
        向该主机发送一个报文的代价,以链路状态 metric 表示。但是,
        由于该主机很可能只有一条到互联网的连接,实际配置的代价在
        许多情况下并不重要(即不会影响路由)。

    Area ID
        该主机所属的 OSPF 区域。

D. 认证(Authentication)

所有 OSPF 协议交换都经过认证。OSPF 报文头部(见 A.3.1 节)包含一个
认证类型字段,以及供相应认证方案(由该类型字段决定)使用的 64 位
数据。

认证类型可以按接口(或等价地,按网络/子网)配置。额外的认证数据
同样可以按接口配置。

认证类型 0、1 和 2 由本规范定义。所有其他认证类型保留由 IANA
([email protected])定义。当前的认证类型列表在下面的表 20 中描述。



AuType 描述
___________________________________________
0 空认证(Null authentication)
1 简单口令(Simple password)
2 加密认证(Cryptographic authentication)
其他所有 保留由 IANA([email protected])
分配


表 20:OSPF 认证类型。



D.1 空认证(Null authentication)

使用该认证类型意味着通过该网络/子网进行的路由交换不经过认证。
OSPF 头部中的 64 位认证字段可以包含任何内容;在接收报文时不会
检查它。在采用空认证时,会对每个 OSPF 报文的全部内容(64 位
认证字段除外)计算校验和,以便检测数据损坏。









D.2 简单口令认证(Simple password authentication)

使用该认证类型时,会按网络配置一个 64 位字段。在某个特定网络上
发送的所有报文,其 OSPF 头部的 64 位认证字段中都必须包含这个
已配置的值。这实质上起到了"明文" 64 位口令的作用。此外,还会对
每个 OSPF 报文的全部内容(64 位认证字段除外)计算校验和,
以便检测数据损坏。

简单口令认证可以防止路由器无意中加入路由域;每台路由器必须先
配置其所连接网络的口令,然后才能参与路由。但是,简单口令认证
易受目前在 Internet 上广泛存在的被动攻击影响(见 [Ref16])。
任何能够物理接触该网络的人都可以获知该口令,从而危及 OSPF
路由域的安全。

D.3 加密认证(Cryptographic authentication)

使用该认证类型时,会在连接到同一网络/子网的所有路由器上配置
一个共享密钥。对每个 OSPF 协议报文,都使用该密钥生成/验证一个
追加在 OSPF 报文末尾的"消息摘要"(message digest)。该消息摘要
是 OSPF 协议报文与该密钥的单向函数。由于密钥绝不会以明文形式
通过网络发送,因此可以防范被动攻击。

用于生成和验证消息摘要的算法由该密钥隐式指定。本规范完整定义了
在使用 MD5 算法时 OSPF 加密认证的用法。

此外,每个 OSPF 协议报文中都包含一个非递减的序列号,用以防范
重放攻击。这提供了长期的保护;但是,在序列号发生变化之前,
仍有可能重放某个 OSPF 报文。为实现该特性,每个邻居数据结构中
都包含一个称为"加密序列号"(cryptographic sequence number)的
新字段。该字段被初始化为零,并且在