博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2111|回复: 3

着眼NULL0接口,让路由器工作更精彩

[复制链接]
发表于 2007-7-31 05:01:29 | 显示全部楼层 |阅读模式
我们知道,路由器设备一般都包含一个名为NULL0的逻辑接口,该接口看上去很平淡无奇,但由于该接口永远处于UP状态,同时发往该接口的任何数据包都会被路由器系统自动丢弃。当在路由器中创建一条指向NULL0接口的静态路由时,该静态路由将会始终有效,毕竟NULL0逻辑接口的工作状态永远是UP的,而且使用该静态路由转发数据包信息时耗费的系统资源也是非常有限,因为路由器对发往该接口的数据包信息只作丢弃处理,而不会对数据源进行回复。既然NULL0接口存在这么多特性,那么我们完全可以着眼NULL0接口,有效配置路由器参数,让其工作更精彩,让网络运行更高效!

    着眼NULL0接口,创建备用路由

    我们知道,当路由器从网络中接收到一个数据包信息后,它首先会检查系统路由表中是否存在转发的路由记录,倘若没有找到指定的转发路由记录时,路由器一般会自动把接收到的数据包信息丢弃,同时会自动给数据源返回一个ICMP控制消息,通知数据源目的地无法到达。然而有的时候,我们不希望路由器在找不到转发路由记录时,给数据源返回一个目的地无法到达的ICMP控制消息,以避免数据源主机随意改动自己的路由表记录,从而给自己的网络造成影响。

    比方说,我们假设在路由器系统中创建了一条指向一个物理串形端口的静态路由,一旦该串形端口处于UP工作状态时,那么该静态路由就能正常有效,倘若该串形端口处于DOWN工作状态时,这条静态路由记录就会被自动删除掉;此时,路由器恰好从网络中接收到一个数据包信息,该数据包要求指向串形端口的静态路由进行转发,但无奈该条静态路由已经被自动删除,那么路由器只好丢弃数据包信息,同时给数据源返回一个目的地无法到达的ICMP控制消息。而数据源主机一旦接受到目的地无法到达的ICMP控制消息后,还认为是本地的路由器存在问题,于是他们可能会尝试修改本地路由表中的记录,这么一来就可能给本地网络的正常工作带来影响,因此这种情况肯定不是我们希望看到的。

    为了避免这种情况发生,我们可以利用NULL0接口永远UP的特性,来创建一个始终有效的静态路由记录,并将该静态路由的优先级别适当降低一些,以便在串形端口处于DOWN工作状态时起到备用路由的作用;我们只要在路由器系统中进行如下配置,就能轻松实现创建备用路由的目的:

    [Router]ip route-static 0.0.0.0 0.0.0.0 Serial 0 preference 30
    [Router]ip route-static 0.0.0.0 0.0.0.0 NULL0 preference 10  

    完成上面的配置任务后,路由器中的串形端口即使处于DOWN工作状态,路由器也能通过备用路由转发数据抱信息,在通过NULL0接口的路由转发数据包的结果,就是丢弃路由器接受到的数据包,同时不给数据源返回一个目的地无法到达的ICMP控制消息,那样一来数据源主机就不会认为自己的路由表出问题了,当然他们也就不会随意改动自己的路由参数了。

    一般来说,在网络路由变化比较大的情况下,我们可以巧妙地利用NULL0接口,来创建合适的备用路由,确保路由变化尽可能在自身发生,而不要影响到其他的路由器。

着眼NULL0接口,限制数据长度

    为了控制网络按照既定要求进行工作,我们有时希望路由器能够对符合指定条件的数据包信息进行转发,而对不符合指定条件的数据包信息作丢弃处理。虽然实现数据包转发控制的方法有很多,例如多数场合下网络管理人员可以利用访问列表来顺利实现转发控制任务,但在一些特殊场合下访问列表是无法解决一些特殊的转发控制要求的。比方说,我们要是希望通往以太网接口的数据包大小不能超过2000字节,一旦超过该大小的话,路由器需要自动将该数据包信息作丢弃处理,要实现这种控制要求时,我们可以按照如下方法来配置路由器:

    首先在路由器后台配置界面创建好过滤策略:
    [Router]route-policy Deny_2000 permit 100
    [Router-route-policy]if-match length 2000 65535
    [Router-route-policy]apply interface NULL0
    其次进入到路由器以太网接口配置模式状态,启用刚才创建好的过滤策略:
    [Router-Ethernet0]ip policy route-policy Deny_2000

    结束上面的所有配置操作后,重新启动一下路由器系统,相信这么一来通往以太网接口的数据包大小就无法超过2000字节了。

1
 楼主| 发表于 2007-7-31 05:07:51 | 显示全部楼层
NULL0与路由汇总
一般情况下,为了提高网络的可伸缩性,都得在边缘路由器上弄路由聚合。但是路由聚合需要满足一些的条件,比如,OSPF中,只能在区域边界路由器对路由进行汇总,这样,为了进行路由聚合,我们就得进行划分多区域,但是这在某些情况下是不可满足的,再者,在BGP中,为通知一个汇总网络,这个网络就得存在在路由表,否则无法通知。

但如果使用了NULL0接口和静态路由技术,这些问题会很巧妙的被解决。下面我们举两个例子,一个例子说明如何解决单区域情况下的OSPF路由汇总,另外一个例子说明在BGP中如何通告聚合路由。这两个例子都很有代表性。

1.1 单区域模式下OSPF路由汇总
有下列的组网方案:

{DE66EE43-BAD6-4631-BADE-5D2F6E27C659}.BMP

这个网络,RT1经过两个高速的POS链路直接连接上层的两台中心路由器CRT1和CRT2,在RT1下面直接连接了很多DDN的用户,每个DDN的用户用一个C类IP的地址,目前已经使用了四个:
192.168.1.0,192.168.2.0,192.168.3.0,192.168.4.0,按照这样,192.168.0.0/16整个分配给该了路由器下的DDN的用户以使用。

在RT1和两台中心路由器之间运行OSPF协议,RT1和DDN用户之间采用静态路由,为了把DDN用户的静态路由分发到整个INTERNET,在RT1上把所有静态路由引入了OSPF。这样工作起来是没有问题的,但因为整个192.168.0.0/16路由都分配给了RT1,即说明该网络不会在外部网络上出现,这时候我们可以采用路由聚合的技术,把这些“零碎”网段聚合成192.168.0.0/16,然后通过OSPF发布出去。

当前的问题是,在OSPF,要进行路由聚合,必须在区域边界进行,这时一个解决方案就是把所有连接DDN用户的接口划分到另外一个区域中(RT1和CRT1,CRT2之间划分为区域0),然后在RT1上进行聚合,把所有DDN路由聚合后发送到区域0里面。这样做有很多弊端,比如,容易造成路由泄露(RT1上的路由可能被DDN用户截获),浪费DDN线路带宽(OSPF要在接口上不断发送HELLO报文)等。

一个不另外划分区域而解决该问题的方式就是应用NULL0接口路由。可以按照下列步骤进行:

1、在RT1上配置静态路由,如下:

(CRT1-config)#ip route 192.168.0.0 255.255.0.0 NULL0

2、创建访问列表,用于OSPF中的路由分发,如下:

(CRT1-config)#access-list 10 permit 192.168.0.0 0.0.255.255
(CRT1-config)#access-list 10 deny any

3、在OSPF中分发静态路由,并使用访问列表10来控制分发的路由,如下:

(CRT1-config-router-ospf)#redistribute static
(CRT1-config-router-ospf)#distribute-list 10 out static

以上仅仅列出了跟路由分发相关的配置。完成这样配置后,OSPF在分发静态路由时,就会根据访问列表10来进行控制,而仅仅分发出去一条汇总路由,而其他具体的路由都会被过滤掉。

需要注意,OSPF在分发静态路由时,仅分发路由表里存在的路由,因此我们就得新建一条下一跳为NULL0接口的静态路由来欺骗OSPF,这也是上述操作的重点。
 楼主| 发表于 2007-7-31 05:08:33 | 显示全部楼层
NULL0的其它应用
2.1 作为备用路由使用
一般,如果一台路由器接收了一个数据包,而在自己的路由表里又没有查询到要转发的路由,该路由器就会把数据报丢弃,并向数据源发送一个目的地不可达的ICMP消息。当然,这是一种正确的行为,但有些情况下就可能不符合人的愿望,比如,我们在路由器上配置了一条静态路由,使这个路由指向一个物理串口,这个串口正常时,该静态路由就可用,但这个串口DOWN掉时候,该静态路由就会被删除,这样如果再收到这样一个数据报(该数据报需要配置的静态路由进行转发),则丢弃,并给源发送一个ICMP目的地不可达消息,接收到ICMP不可达消息的主机就有可能修改自己的路由表(尤其是在一些UNIX主机),而这是我们所不希望的。

这时候我们可以配置一条指向NULL0接口的备用路由,但是把优先级降低,假设我们在路由器上做如下配置:

(router-config)#ip route 0.0.0.0 0.0.0.0 Serial 0 preference 60
(router-config)#ip route 0.0.0.0 0.0.0.0 NULL0 preference 20

即使SERIAL0接口断掉了,路由器也就会不断使用下条路由地进行转发(转发的结果当然就是丢弃数据报),而不再给源目的地发送ICMP不可达消息。这在路由摆动比较频繁的情况下也可以使用,不至于影响到其它路由器,而仅仅只是把摆动限制在自己身上。

2.2 在IP策略中的使用
某些情况,我们也可能采取某些IP转发的策略,像,进行源地址的路由等。在这些情况下,我们可能需要转发一些符合条件数据,而丢弃一些不符合条件的数据。有些情况下,比如源地址的路由等,可以通过访问列表解决,但有些特殊情况下,用访问列表是解决不了的,比如,我们在以太网接口上过滤1500字节的数据,即如果数据报的长度超过了1500,我们可以丢弃。该需求可以通过IP策略解决,如下:

1、?配置一个路由影像(ROUTE-MAP),如下:

(router-config)#route-map Deny_1500 permit 100
(router-route-map)#match length 1500
(router-route-map)#set interface NULL0
(router-route-map)#exit

2、?到接口的模式下,实施IP的策略,如下:

(router-config-if)#ip policy route-map Deny_1500

完成这样配置后,所有以太网接口上都将收到的1500字节的数据帧过滤掉。
 楼主| 发表于 2007-7-31 05:11:54 | 显示全部楼层
1.2 BGP协议中的路由汇总
BGP作为一种边界网关之间的路由协议,有很大的伸缩性和灵活性,可以对路由进行精确的控制和分发。在一些ISP中,往外发布自己的内部路由时往往需要做一些汇总,而不发送具体的路由出去,这样不但有利于保密的目的,而且也不会引入太多的路由到INTERNET上.

BGP,我们用SUMMARY-ADDRESS命令来进行路由聚合,但是聚合后出现路由属性的改变问题,像AS-PATH的属性,会由具体的AS的号更换为AS-SET,这样对以后的路由控制有着不利的影响。也就是说,在BGP中,引入路由的最理想方式是使用NETWORK命令直接引入到本地路由表中的路由,这样引入的路由起点属性为IGP,可信度是最好的。

但NETWORK命令总有一个限制,就使用NETWORK来引入的路由必须在路由表中存在,否则就不能引入。实际情况是,路由表中存在着一些具体的路由,而不存在汇总路由,这时候用NETWORK便不起作用。

跟上面OSPF的解决方式是一样的,我们可以用配置一条静态的来指向NULL0接口的路由进行欺骗BGP,如下步骤:

1、配置静态路由,如下:

(CRT1-config)#ip route 192.168.0.0 255.255.0.0 NULL0

2、在BGP中,把聚合路由引入到其中,如下:

(CRT1-config-router-bgp)#network 192.168.0.0 mask 255.255.0.0

完成这些配置后,BGP就会把一条聚合路由引入其中,同样的道理,配置上该条静态路由后,也不会对数据的正常转发造成任何影响。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-11-24 04:51 , Processed in 0.095483 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表