其实就因为静态路由的配置比较简单,决定了静态路由也包含了许多特点。可以说静态路由的配置全由管理员自己说了算,想怎么配就怎么配,只要符合静态路由配置命令格式即可,因为静态路由的算法全在管理员人思想和对静态路由知识的认识中,并不是由路由器IOS系统来完成的。至于所配置的静态路由是否合适,是否能达到你预期的目的那别当别论。在配置和应用静态路由时,我们应当全面地了解静态路由的以下几个主要特点,否则你可能在遇到故障时总也想不通为什么:
l 手动配置
静态路由需要管理员根据实际需要一条条自己手动配置,路由器不会自动生成所需的静态路由的。静态路由中包括目标节点或目标网络的IP地址,还可以包括下一跳IP地址(通常是下一个路由器与本地路由器连接的接口IP地址),以及在本路由器上使用该静态路由时的数据包出接口等。
l 路由路径相对固定
因为静态路由是手动配置的,静态的,所以每个配置的静态路由在本地路由器上的路径基本上是不变的,除非由管理员自己修改。另外,当网络的拓扑结构或链路的状态发生变化时,这些静态路由也不能自动修改,需要网络管理员需要手工去修改路由表中相关的静态路由信息。
l 永久存在
也因为静态路由是由管理员手工创建的,所以一旦创建完成,它会永久在路由表中存在的,除非管理员自己删除了它,或者静态路由中指定的出接口关闭,或者下一跳IP地址不可达。
l 不可通告性
静态路由信息在默认情况下是私有的,不会通告给其它路由器,也就是当在一个路由器上配置了某条静态路由时,它不会被通告到网络中相连的其它路由器上。但网络管理员还是可以通过重发布静态路由为其它动态路由,使得网络中其它路由器也可获此静态路由。
l 单向性
静态路由是具有单向性的,也就是它仅为数据提供沿着下一跳的方向进行路由,不提供反向路由。所以如果你想要使源节点与目标节点或网络进行双向通信,就必须同时配置回程静态路由。这在与读者朋友的交流中经常发现这样的问题,就是明明配置了到达某节点的静态路由,可还是ping不通,其中一个重要原因就是没有配置回程静态路由。
如图7-2所示,如果想要使得PC1(PC1已配置了A节点的IP地址10.16.1.2/24作为网关地址)能够ping通PC2,则必须同时配置以下两条静态路由,具体配置方法在此不作介绍。
① :在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.3.2/24作为目标节点,以C节点IP地址10.16.2.2/24作为下一跳地址);
② :在R2路由器上配置到达PC1的回程静态路由(以PC1 10.16.1.1/24作为目标节点,以B节点IP地址10.16.2.1/24作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。
l 接力性
如果某条静态路由中间经过的跳数大于1(也就是整条路由路径经历了三个或以上路由器结点),则必须在除最后一个路由器外的其它路由器上依次配置到达相同目标节点或目标网络的静态路由,这就是静态路由的“接力”特性,否则仅在源路由器上配置这么静态路由还是不可达的。
就像你要从长沙到北京去,假设中间要途经的站点包括:武汉-郑州-石家庄,可人家只告诉你目的地是北京,以及从长沙出发的下一站是武汉。对于一个没有多少旅游经验的人来说,你是不可能知道到了武汉后又该如何走,必须有人告诉你到了武汉后再怎么走,到了郑州后又该怎么走,……。这就是“接力性”。
如图7-3所示是一个三个路由器串联的简单的网络,各个路由器节点及PC机的IP地址均在图中进行了标注,PC1已配置好指向R1的A节点地址的网关,现假设要使PC1能ping得通PC2,则需要在各路由器上配置以下四条静态路由(两条正向,两条回程):
图7-3 静态路由接力性示例
① :在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.0/24作为目标节点,以C节点IP地址10.16.2.2/24作为下一跳地址);
② :在R2路由器上配置了到达PC2的正向接力静态路由(同样以PC2 10.16.4.0/24作为目标节点,以E节点IP地址10.16.3.2/24作为下一跳地址);
③ :在R3路由器上配置到达PC1的回程静态路由(以PC1 10.16.1.1/24作为目标节点,以D节点IP地址10.16.3.1/24作为下一跳地址),以提供Ping通信回程ICMP消息的路由路径。
④ :在R2路由器上配置到达PC1的回程接力静态路由(同样以PC1 10.16.1.1/24作为目标节点地址,以B节点IP地址10.16.2.1/24作为下一跳地址),以提供Ping通信回程ICMP消息的接力路由路径。
【经验之谈】路由器各端口上所直接连接的各个网络都是直接互通的,因为它们之间默认就有直连路由,无需另外配置其它路由。也即连接在同一路由器上的各网络之间的跳数为0。如图7-3中R1路由器上连接的10.16.1.0/24和10.16.2.0/24网络,R2路由器上连接的10.16.2.0/24和10.16.3.0/24网络,R3路由器上连接的10.16.3.0/24和10.16.4.0/24网络都是直接互通的。也正因如此,在图7-3中,PC1要ping通PC2,只需要配置图中所示的正、反向各两条静态路由,而不用配置从R2到R3路由器,以及从R2到R1路由器的静态路由。
l 递归性
许多读者一直存在一个错误的认识,那就是认为静态路由的“下一跳”必须是与本地路由直接连接的下一个路由器接口,其实这是片面的。前面说了,静态路由没有建立邻接关系的Hello包,静态路由也不会被通告邻居路由器,所以它的下一跳是路径中其它路由器中的任一一个接口,只是能保证到达下一跳就行了。这就是静态路由的“递归性”。
如图7-3所示的网络中,如果要在R1上配置一条到达R3所连接的10.16.4.0/24静态路由。按照正常思维的话,其下一跳应该是R2的C接口。不过,其实也可以是R2的D接口,或者R3的E接口,或者F接口。只是通过其它路由能到达这些接口,则这条静态路由就是成功的。具体我们将在本章7.4.1节介绍。
l 优先级较高
因为静态路由明确指出了到达目标网络,或者目标节点的路由路径,所以在所有同目的地址的路由中,静态路由的优先级是除“直连路由”外最高的,也就是如果配置了到达某一网络或者某一节点的静态路由,则优先采用这条静态路由,只有当这条静态路由不可用时才会考虑选择其它的路由。
l 适用小型网络
静态路由一般适用于比较简单的小型网络环境,因为在这样的环境中,网络管理员易于清楚地了解网络的拓扑结构,便于设置正确的路由信息。同时小型网络所需配置的静态路由条目不会太多。如果网络规模较大,拓扑结构比较复杂,则不宜采用静态路由,因为这样的配置工作量实在太大,一般要用于本章后面或者本书后面章介绍的各动态路由协议实现动态路由。
静态路由的缺点在于:它们需要在路由器上手动配置,如果网络结构复杂,或者跳数较多的话,仅通过静态路由来实现路由,则要配置的静态路由可能非常多,而且还可能造成路由环路;而且如果网络拓扑结构发生改变,路由器上的静态路由必须跟着改变,否则原来配置的静态路由将可能失效。当Cisco IOS系统不能建立到达某一目标网络的动态路由时,你就需要建立对应的静态路由。静态路由配置很简单,就一条命令,但在静态路由配置中最关键的就是7.1.1节介绍的理解静态路由特性,以及静态路由配置命令中各可选项和参数的真正含义,否则很可能配置的静态路由不正确,或者虽然已正确配置了某条静态路由,仍不能达到你的期望。
在Cisco路由器中,静态路由的配置很简单,仅需一条如下全局配置命令:
ip route vrfvrf-nameprefix mask{ip-address|interface-type interface-number[ip-address]} [dhcp] [distance] [namenext-hop-name] [permanent | tracknumber] [tagtag]
在Cisco路由器中使用的是ip route命令(在H3C路由器中的静态路由配置命令为ip static-route命令),其包含了许多参数选项,而且有些参数选项的具体含义一直是许多读者所模糊的。下面是这些参数选项进行具体解释。
lvrf-name:该静态路由所作用的VRF(VPN路由转发)示例名称,也就是为对应的VPN配置静态路由。仅在为特定的VRF示例配置静态路由时才需要指定本参数。
lprefix:静态路由中目标主机或目标网络的IP地址前缀,也就是静态路由的目的地址。如果是目标主机或节点,则填上对应主机或节点的IP地址,如果是目标网络或子网,则是对应网络或子网的网络地址。
lmask:静态路由目的地址的掩码(仅代表路由目标的主机范围,不能认为等同于“子网掩码”),不能全以IP地址前缀长度表示。如果目的地址是主机或节点IP地址,则其掩码必须是255.255.255.255,而不是所在网段的子网掩码,代表静态路由的目标仅一台主机,而不是一个网络或子网。
lip-address:与下面的“interface-type interface-number”参数一起是二选一参数,指定静态路由到达目标网络的下一跳IP地址(也就是下一个路由器与本地路由器连接的接口IP地址)。
linterface-type interface-number:与上面的“ip-address”参数一起是二选一参数,指定静态路由在本地路由器上的出接口(特别注意:这里不是下一跳接口,而是静态路由在本地路由器上的出接口)的接口类型和接口号。
lip-address:这个参数与上面“interface-type interface-number”参数是一起的,是个可选项。它与前一个“ip-address”参数选项是一样的,也是指下一跳的IP地址。
ldhcp:可选项,启用DHCP服务器为默认网关(也就是静态路由中的下一跳)分配IP地址。当你指定一个DHCP服务器来下一跳自动分配IP地址时,你可能还需要指定上面介绍的“出接口”(interface-type interface-number)和下面将要介绍的“管理距离”(distance)参数,但一定没有指定下一跳IP地址。
ldistance:可选参数,指定静态路由的管理距离,在0~255之间(如果静态路由的下一跳IP地址是本地路由器的出接口的IP地址,则其管理距离为0),静态路由默认的管理距离为1,无需指定,如果为255则表示该路由不可达。它主要用于在本章后面将要介绍的浮动静态路由中使用。
【注意】管理距离(administrative distance)是指一种路由协议(包括像RIP、OSPF、IS-IS、EIGRP、BGP等动态路由协议)的路由可信度。每一种路由协议按可靠性从高到低,依次分配一个信任等级(值越小,等级越高),这个信任等级就叫管理距离。静态路由的默认管理距离为1,是所有路由管理距离最小的,也即静态路由的可靠性最高。如果你为某条静态路由指定了非默认的管理距离,则你正标记该静态路由可以被到达相同目标网络的动态路由所替代。例如,EIGRP动态路由的默认管理距离为100,如果你配置了一条静态路由的管理距离大于100,则该条静态路由将被到达同一目标网络的EIGRP动态路由所替代。
lnamenext-hop-name:可选参数,为该静态路由指定一个下一跳名称,一般无需配置。但通过这个关键字和参数组合允许你在运行配置中以名称来关联静态路由。如果你有几条静态路由,你可以通过以它们的不同用途描述来作为这些静态路由的名称,以便更容易区分它们。
lpermanent:可选项,指定该静态路由在路由表中永久存在,即使对应接口处于关闭状态。
ltracknumber:可选参数,指定一个可用于追踪对应静态路由的号码(代表一个对象,需事先通过trackobject-numberinterfacetype numberip routing命令配置要跟踪的对象号和对应接口的IP路由),取值范围为1~500。这个关键字和参数组合指定对应静态路由仅当配置跟踪的对像呈激活状态时才安装。
ltagtag:(可选)指定一个用于通过路由映射控制路由重发布的匹配标记值(可是一个字符串),以便路由映射时调用。
【注意】从以上静态路由配置命令参数的介绍可知,凡是在静态路由中出现了接口,则该接口一定是指本地路由器上的出接口,而不是许多读者误认为的下一跳接口,下一跳始终间以IP地址表示的。另外,在一些低档路由器中,如Cisco SOHO,800系列路由器只支持基本的静态路由,上述可选项和可选参数可能并不支持。可用no格式的以上命令删除对应的静态路由,也可以通过在特权模式下执行show running-configuration|include ip route命令查看配置文件中配置的所有静态路由。
【示例1】以下示例显示了如何把到达172.31.0.0网络的数据包在IP地址为72.31.6.6(此为下一跳IP地址)的路由器上被路由。
ip route172.31.0.0 255.255.0.0 172.31.6.6
【示例2】以下示例显示了如何为静态路由配置管理距离110。在本示例中把到达10.0.0.0网络的包将在IP地址为172.31.3.4(此为下一跳IP地址)的路由器上被路由,并配置管理距离为110。这样一来,如果没有管理距离小于110的动态路由情况下,该静态路由将有效。
ip route10.0.0.0 255.0.0.0 172.31.3.4 110
【示例3】以下示例显示如何把到达192.168.1.0网络的包通过本地由器Ethernet 0接口(为静态路由的出接口),再经过下一跳IP地址10.1.2.3被路由出去。但此时如果Ethernet 0接口关闭,则该静态路由将从路由表中被删除,直到出接口Ethernet 0重新恢复。
ip route192.168.1.0 255.255.255.0 Ethernet 0 10.1.2.3
【示例4】以下示例显示仅在所跟踪的对象123状态为激活的情况下安装以Ethernet 0/1为出接口,IP地址为10.1.1.242作为下一跳的默认静态路由。有关默认静态路由将在本章后面具体介绍。
ip route0.0.0.0 0.0.0.0 Ethernet 0/1 10.1.1.242track123
【示例5】以下示例显示如何通过dhcp关键字分别使两条配置了出接口ethernet1和ethernet2接口的静态路由自动从DHCP服务器中获得下一跳IP地址(掩码均为255.255.255.255)。
ip route10.165.200.225 255.255.255.255 ethernet1dhcp
ip route10.165.200.226 255.255.255.255 ethernet2dhcp20
【示例6】以下示例显示如何通过namenext-hop-name关键字和参数对对静态路由进行标识,以便区分每条静态路由。
ip route172.0.0.0 255.0.0.0 10.0.0.1nameSeattle2Detroit