<路由协议的迁移>
当网络中原有的路由协议不能再很好的满足需求的时候,就需要转换为另一种路由协议,这就需要进行路由协议的迁移。
路由迁移的原则:
1、尽可能少的减少网络的停工时间
2、一旦在迁移过程中出了问题,要能迅速回退到初始状态
3、在迁移过程中要避免出现路由黑洞和环路
在路由迁移过程中还有可能要改变原有的IP地址,使用新的编址方案,这就需要进行地址的迁移。
地址迁移过程:
1、配置第二地址
2、将第二地址network进路由协议中
3、如果第二地址路由正常,将第二地址改为第一地址
int s1/0
ip address address mask secondary //配置辅助地址
路由迁移过程:
1、将原有协议的AD值改小
2、在现在网络上配置新的路由协议
3、将原有协议的AD值再改大,让新协议的路由起作用
4、如果路由正常,删除原有协议
router eigrp 90
distance eigrp 150 170 //修改路由协议的管理距离
注:OSPF不能用Secondary地址建邻居。Eigrp能用Secondary地址建邻居。
定义:重分布是指连接到不同路由选择域的边界路由器在不同自主系统之间交换和通告路由选择信息的能力。
重分布原则:路由必须位于路由选择表中才能被重分发
协议 Seed Metric
RIP 无限大 必须手工指定
EIGRP 无限大 也必须手工指定
OSPF 20 如果重分布进来的是BGP的话,Metric是1,这是个特例
IS-IS 0
BGP 携带原来的Metric值
R1(config-router)#default-metric 1 //使用此命令来设定种子metric值
1、单向重分布
2、双向重分布
1)OSPF -> RIP:
将其它路由协议重分布进RIP,要注意加metric值
R1(config)#router rip
R1(config-router)#redistribute ospf 110 metric 1 //优于default-metric命令
也可用以下方法指定Metric值
R1(config-router)#default-metric 3 //默认Seed Metric=infinity无限大,修改Seed Metric=3
R1(config-router)#redistribute connected //(可不加Metric,默认=1)重分布直连
R1(config-router)#redistribute static //(可不加Metric,默认=1)重分布静态
2)RIP -> OSPF: 将其它路由协议重分布进OSPF,要注意加subnets参数
R1(config)#router ospf 110
R1(config-router)#redistribute rip subnets //如不加Subnets,默认只有主类地址能被重分布
默认的metric值为20,也可用以下命令指定:
R1(config-router)#default-metric 8
R1(config-router)#redistribute rip subnets metric 10
R1(config-router)#redistribute rip subnets metric 10 metric-type 1 //改动metric类型
R1(config-router)#redistribute connected subnets
R1(config-router)#redistribute static subnets //还可 在后面加router-map来过滤路由
3)ISIS -> EIGRP:
将其它路由协议重分布进EIGRP时也要指定Metric值
R1(config)#router eigrp 90
R1(config-router)#default-metric 1500 100 255 1 1500
R1(config-router)#redistribute isis (level2) metric 1500 100 255 1 1500
(不加Metric,默认Seed Metric=infinity) BW DLY R Lo MTU
带宽 延迟 可靠性 负载 MTU
R2#show ip ei topology 3.3.3.0/24
R1(config-router)#redistribute connected //不加Metric也可
(根据直连接口的不同计算Metric)
R1(config-router)#redistribute static //不加Metric也可
(根据下一跳接口计算Metric)
· 当把ISIS重分布进其他路由协议时,运行ISIS的直连接口不能重分布进去,这是ISIS本身的BUG。只能通过重分布直连解决。
4)EIGRP -> ISIS:
R1(config)#router isis
R1(config-router)#redistribute eigrp 90 (默认Seed Metric=0 ,默认以L2路由进入ISIS)
R1(config-router)#redistribute eigrp 90 metric 8
R1(config-router)#redistribute ei 90 level-1 (以L1的路由进入ISIS,不做修改的话,L1路由器就收不到外部重分布进来的路由,因为默认是L2)
R1(config-router)#redistribute ei 90 level-1-2
R3#show isis database detail/verbose
试验题:在R1上做三次重分布,先将OSPF重分布进EIGRP,然后将EIGRP重分布进RIP,再将RIP重分布进OSPF,完成后,看看能否实现全网互通。也就是说,3.3.3.3和4.4.4.4,以及2.2.2.2能否互相Ping通。
· -在Router上,将A协议重分布到B协议中:
Router上所有运行A协议的接口(除ISIS/ODR),以及Router路由表中所有从A协议学到的路由,都会被重分布到B协议中。
-----------------------------------------------------------------------------------------
实验:
1、在R1上将OSPF重分布进EIGRP
2、在R1的S1/0接口做EIGRP的手动汇总,汇总出一条172.16.0.0/16路由。这时R2将只收到一条汇总路由。
3、再在R1上将EIGRP重分布进OSPF
这时你会发现,R3上除了正常收到12.1.1.0的路由之外,还多了一条汇总路由,因为在R1上做了汇总之后,生成了一条指向NULL0接口的汇总路由,这样,在把EIGRP重分布进OSPF时,把这条路由也带进去了。
试验:在R1和R4上先将OSPF重分布进RIP,看看网络会不会出问题,每个路由器的路由表正不正常。
再在R1和R4上将RIP重分布进OSPF,看看有没有问题。
通过试验,我们总结出:
·做双点双向重分布时,把AD值低的路由协议重分布进AD值高的路由协议,没啥问题。
·当把AD高的协议重分布到AD低的协议中时,就有可能出现问题。
解决方法:
1、不好的方法--改所有路由的AD
R1(config)#router ospf 110
R1(config-router)#distance 130 (将此协议的路由的AD改为171,对本协议所有路由都有效,改动范围太大,通常不建议这样做,而且是有问题的。)
2、好的方法--缩小范围
R1(config-router)#distance 130 4.4.4.4(在OSPF中,这是RID) 0.0.0.0 (只将路由器4.4.4.4通告的OSPF路由AD改为171)
3、最好的方法--进一步缩小范围
R1(config)#access-list permit 2.2.2.0
R1(config-router)#distance 130 4.4.4.4 0.0.0.0 (只针对4.4.4.4通告的2.2.2.0路由将AD改为171,对4.4.4.4通告的其它路由AD不变)
R1(config-router)#distance 130 0.0.0.0 255.255.255.255
上面这条命令针对 所有路由器 通告的指定路由来改AD,在这一定要注意 通告路由器的概念,在OSPF中和EIGRP中通告的路由器的区别,要注意你所要更改的路由是由哪一个路由器通告的。
4、还可以通过为OSPF设置外部路由的管理距离来解决,只要将外部路由的管理距离增大到超过重分布进来的协议的AD就可以了
R4(config-router)#distance ospf external 99 inter-area 88 intra-area 77
____________________________________________________________________________________
R4(config)#router eigrp 90
R4(config-router)#distance 109 24.1.1.2 0.0.0.0 (只对D路由有效,对D EX路由无效,因为EX路由是边界路由器通告的)
(Next-hop)(Wildcard)
R4(config)#access-list permit 1.1.1.0
R4(config-router)#distance 109 24.1.1.2 0.0.0.0
(只针对1.1.1.0路由将AD改为109,只对D路由有效)
R4(config-router)#distance eigrp 89 169
(internal)(external)
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
1、标准访问列表
只能基于源IP地址来进行分类
可以使用列表号:1-99、1300-1999
标准的访问列表通常要求放置在靠近目标的地方
2、扩展访问列表
可以根据源IP地址、目的IP地址、源端口号、目的端口号,协议来进行分类
可以使用列表号:100-199、2000-2699
扩展访问列表通常要求放置在靠近源的地方
3、命名的访问列表
只是将标准访问列表或扩展访问列表取个名字
优点:可以对访问列表进行增加、删除操作。
1、如果一个访问列表有多行语句,通常按顺序从第一条开始比较,然后再往下一条条比较。
2、一个数据包如果与访问列表的一行匹配,则按规定进行操作,不再进行后续的比较。
3、在每个访问列表的最后一行是隐含的deny any语句--意味着如果数据包与所有行都不配的话,将被丢弃。
1、你在访问列表中可以写多条比较语句,它们是按你输入的顺序来进行放置的。
2、在标准访问列表扩展访问列表中,你不能单独删除其中的一行,只能删除整个列表。
3、每个列表应当至少有一个permit语句,否则将拒绝所有流量。
4、访问列表可以用在接口的出方向,也可以用在入方向,但是要注意,在一个接口在一个方向上只能有一个访问列表。
5、访问列表可以过滤通过路由器的流量,对自已产生的流量不起作用。
6、将标准访问列表要尽可能放置在靠近目的地址的地方
7、将扩展访问列表要尽量放置在靠近源地址的地方
ACL的运算符:
1、eq 等于
2、neq 不等于o3、gt 大于
4、lt 小于
5、range 范围
重点:ACL本身只是一个用来匹配的工具,它具体是过滤数据包还是路由,是由调用它的工具来决定的。
举例:
1、在路由器上,允许来自172.16.1.0网段的流量通过
access-list 1 permit 172.16.1.0 0.0.0.255
2、允许来自于172.16.1.0网段的流量去访问192.168.1.0网段
access-list 100 permit ip 172.16.1.0 0.0.0.255 192.168.1.0 0.0.0.255
3、拒绝来自于172.16.1.0网段的流量通过,允许其它任意的流量通过
access-list 1 deny 172.16.1.0 0.0.0.255
access-list 1 permit any
4、允许172.16.1.1 telnet 192.168.1.1的流量通过,其它拒绝
access-list 1 permit tcp host 172.16.1.1 host 192.168.1.1 eq telnet
5、抓出172.16.1.0的路由
access-list 1 permit 172.16.1.0 0.0.0.0
6、用一条ACL抓出172.16.0.0、172.16.1.0、172.16.2.0、172.16.3.0四个子网
access-list 1 permit 172.16.0.0 0.0.3.0
7、用一条语句抓出172.16.0.0---172.16.255.0/24之间所有子网号为奇数的路由
access-list 1 permit 172.16.1.0 0.0.254.0
8、用一条语句抓出前两个字节为172.16.0.0、掩码为255.255.255.0的所有路由
access-list 100 permit ip 172.16.0.0 0.0.255.255 host 255.255.255.0
用ACL抓掩码,但要注意,只能用在route-map 中,在分布列表中无效
9、阻止外部发起的TCP会话,但允许内部发起的连接到外部的TCP会话。
access-list 100 permit tcp any any established
established -- 允许ACK/RST=1的TCP报文通过,通常用于只允许内部的主机向外部发起TCP连接,不允许外部的主机向本网发起TCP连接
使用基于时间的访问列表,可以根据一天中的不同时间,或者一周中的某天,或者两者结合,来控制对网络资源的访问。
第一步:定义时间段名字
R1(config)#time-range NP 定义一个名字
第二步:定义时间段
设定绝对时间:
R1(config-time-range)#absolute start 8:00 1 jan 2008 end 15:00 2 feb 2008
设定周期时间:
R1(config-time-range)#periodic sunday 12:00 to 23:00 //只在星期日上午允许
R1(config-time-range)#periodic daily 8:00 to 12:00 //一周中每天上午允许
几个主要周期时间参数:
Daily--从星期一到星期日
Weekday--从星期一到星期五
Weekend--从星期六到星期日
注意:一个time-range下只能有一个absolute语句,但可以有多条periodic语句,如果在一个time-range下即有absolute语句,又有periodic语句,则先匹配absolute语句。
第三步:调用
access-list 100 permit ip any any time-range NP
例:为ACL定义一个时间范围,在2008年1月1日到2008年12月31日之间的每个周末起作用
time-range NP
absolute start 8:00 1 jan 2008 end 24:00 31 dec 2008
periodic weekends 8:00 to 24:00
自反访问列表在路由器的接口下创建IP流量的动态开启放行ACL条目,这些开启表项的创建是基于源于设备的可信方的会话进行的,在自反访问列表中的每个语句,当语句中的条件得到满足时,就会在已存在的访问表中创建一个镜像表项。
简单来讲,自反访问列表能在路由器接口上根据出去的流量来自动放行返回的流量。
临时表项的特点:
1、表项总是一个permit表项
2、表项所指定的协议与原来向外报文的协议相同
3、新的表项互换了源目IP地址
4、新的表项互换了源目端口号
5、表项会一直存在,直到会话结束(TCP)或者time-out值到时(UDP)才会被删除
6、当会话的最后一个报文流过接口时,表项就到期。(对TCP而言)
注意:自反访问列表只能和命名的扩展访问列表结合使用
例:如下图所示,在路由器上做配置,要求外部网络不能访问内部网络,但是内部的主机172.16.1.1能够telnet到外部网络,也能访问外部网络的www服务。
ip access-list extended IN-FLOW
evaluate WOLF
int s1/0
ip access-group IN-FLOW in
ip access-list extended OUT-FLOW
permit tcp host 172.16.1.1 any eq telnet reflect WOLF
int s1/0
ip access-group OUT-FLOW out
permit tcp host 172.16.1.1 any eq www reflect WOLF timeout 180 //还可以指定有效时间
ip reflexive-list timeout 300
分布列表通过调用ACL来对路由进行过滤,可以在一个单独的路由区域内过滤,也可在路由协议之间做重分布的时候进行过滤。
注意:分布列表只能用于距离矢量协议,在链路状态协议中是没有意义的。
例一:
R1(config)#access-list 2 permit 2.2.2.0
R1(config-router)#distribute-list 2 in serial 0 (只允许2.2.2.0路由从S0进)
例二:
R1(config)#access-list 2 deny 2.2.2.0
R1(config)#access-list 2 permit any
R1(config-router)#distribute-list 2 out serial 1 (不允许2.2.2.0路由从S1接口出去)
例三:协议间重分布时过滤
R1(config)#access-list 1 permit 2.2.2.0
R1(config)#router ospf 110
R1(config-router)#distribute-list 1 out eigrp 90
注意:当在重分布时进行过滤,仅允许使用关键字out,后面可以跟上协议名,但不能跟接口,因为无意义,详见卷一496页(注意:in后面不能跟协议,只有out后能跟)
例四: :(没啥意义)
试验:
1、在R1上写一个访问列表
access-list 1 permit 172.16.1.1
2、在R1的OSPF进程下调用
distribute-list 1 in s1
3、查看R1和R3的路由表,比较有啥不同
总结:实际上并不能对LSA进行过滤,只能对自已的路由条目进行过滤。
和ACL类似的东东,设计用于专抓路由的工具,不仅可以匹配网络号,还可以匹配掩码
R4(config)#ip prefix-list 2(用名字也行) permit 2.2.2.0/24
R4(config-router)#distribute-list 2 in serial 1
例一:
ip prefix-list 2 permit 2.2.2.0/24 //(匹配前24位:2.2.2.* ,掩码必须为24位)
例二:
ip prefix-list 2 permit 2.2.2.0/24 ge 25 le 30 //(匹配前24位:2.2.2.* ,掩码必须为25-30位)
例三:
ip prefix-list 2 permit 2.2.2.0/24 le 32 //(匹配前24位:2.2.2.* ,掩码必须为24-32位)
例四:
ip prefix-list 2 permit 2.2.2.0/24 ge 26 //(匹配前24位:2.2.2.* ,掩码必须为26-32位)
例五:
ip prefix-list 3 permit 0.0.0.0/0 le 32 //(匹配所有)不能像access-list哪样用any参数
ge必须大于前面的数字,小或等于le ,len<ge-value<=le-value
sh ip prefix-list用于查看
A类路由:ip prefix-list 1 permit 0.0.0.0/1 le 32
B类路由:ip prefix-list 1 permit 128.0.0.0/2 le 32
C类路由:ip prefix-list 1 permit 192.0.0.0/3 le 32
要求:在如上图所示的拓朴中,在R1上利用前缀列表做过滤,不要向AREA0区域传递172.16.1.1的路由。
R1:
ip prefix-list 1 seq 5 deny 172.16.1.1/32
ip prefix-list 1 seq 10 permit 0.0.0.0/0 le 32
router ospf 110
area 1 filter-list prefix 1 out
也叫路由图或者路由映射表,是对路由进行加工处理的工具。
1、 route-map可以调用ACL或prefix抓出一部分路由进行加工处理
2、每一个route-map可以有多条语句,每条语句都有一个序号
3、每条语句都有两种动作:match 和 set
4、每条语句对抓出来的路由都有两种处理方式:permit 或 deny
route-map的使用分三步操作:
1、定义ACL或prefix抓出路由
2、定义route-map说明对匹配的路由所采取的处理方式
3、调用route-map
route-map的匹配逻辑:
route-map NAME permit 10
match ip address x y z
-------> OR
match ip address a ¦
match ip address b ¦ AND
match ip address c ↓
如不写match/set,默认: match any
set nothing
要求在R1上将EIGRP重分布进OSPF,其中172.16.1.0路由要以OE1重分布,172.16.2.0路由重分布时metric值要改为100,172.16.3.0的路由不允许重分布,其它路由不改动,默认重分布。
R1(config)#access-list 1 permit 172.16.1.0 0.0.0.0
R1(config)#access-list 2 permit 172.16.2.0 0.0.0.0
R1(config)#access-list 3 permit 172.16.3.0 0.0.0.0
R1(config)#route-map WOLF permit 10
R1(config-route-map)#match ip address 1
R1(config-route-map)#set metric-type type-1
R1(config)#route-map WOLF permit 20
R1(config-route-map)#match ip address 2
R1(config-route-map)#set metric 100
R1(config)#route-map WOLF deny 30
R1(config-route-map)#match ip address 3
R1(config)#route-map WOLF permit 40
R1(config-route-map)#exit
R1(config)#router ospf 110
R1(config-router)#redistribute eigrp 90 subnets route-map WOLF //调用route-map
注意:
·在route-map的最后隐含了一条deny any的语句
·如果 不写一句 Route-map 去允许其它路由通过,则没有匹配的路由直接被 。
还可以在重分布直连的时候match一个接口,直接写route-map就可以,不用定义访问列表。
R1(config)#route-map WOLF permit 10
R1(config-route-map)#match interface e0
作用:可以对一些路由打上tag,好让后面的路由器根据tag找出这些路由并进行相应的策略
如上图所示,要求:
1、在R3上将RIP重分布进OSPF
2、在R1上将OSPF重分布进EIGRP,但不能将从RIP学到的路由带过去
可以用tag解决:
1、在R3上将RIP重分布进OSPF时,利用route-map打上tag标记
2、在R1上将OSPF重分布进EIGRP时,找出打了tag标记的路由再deny掉就行了
R3(config)#route-map WOLF permit 10
R3(config-route-map)#set tag 20
R3(config)#router ospf 110
R3(config-router)#redistribute rip subnets route-map WOLF
到了R1之后,对打tag的路由丢弃
R1(config)#route-map CCNP deny 10
R1(config-route-map)#match tag 20
R1(config)#route-map CCNP permit 20 //一定要写一条空语句放行其它的路由
R1(config-route-map)#exit
R1(config)#router eigrp 90
R1(config-router)#redistribute ospf 110 metric 1500 100 255 1 1500 route-map CCNP
PBR就是使用route-map这一工具对某个接口进来的数据流做一些策略,符合条件的按相应的策略进行路由,不符合条件的按正常情况进行转发。
·PBR allows for source-based routing.
·PBR优于路由表-----如果路由器上设置了PBR,当数据包到达路由器时,是先匹配PBR,如果匹配上了,直接按PBR进行转发,如果没匹配上,再去找路由表进行转发,所以说PBR覆盖了正常的路由选择进程。
· PBR中不匹配的数据包不会DENY(丢弃),而是normal forwarding(正常转发)
注意: Applied to incoming packets PBR只针对于入项接口
第一步:
R1(config)#access-list 1 permit 1.1.1.0 0.0.0.255
R1(config)#access-list 2 permit 2.2.2.0 0.0.0.255
第二步:
R1(config)#route-map WOLF permit 10
R1(config-route-map)#match ip address 1
R1(config-route-map)#set ip next-hop 12.1.1.2 发给与本机直连的下一跳路由器
R1(config)#route-map WOLF permit 20
R1(config-route-map)#match ip address 2
R1(config-route-map)#set ip next-hop 13.1.1.3
第三步:
R1(config)#int e0/0 (入口调用策略)
R1(config-if)#ip policy route-map WOLF
PBR其它用途:
R1(config)#route-map PBR per 10
R1(config-route-map)#match ip address 9
R1(config-route-map)#set ip precedence 2 对数据分组设置优先级
R3#debug ip policy
·PBR默认对本地产生的数据流量不起效。也就是对自已产生的包不执行策略。
R3(config)#ip local policy route-map PBR (使PBR对本地数据流量有效)加上这一条命令才会对自已产生的包也做策略