。这是我的理解。大家讨论下。
AS-Path/Prefix-List/Outbound/Route-map过滤
限制从邻居收到路由Prefix的数量
Neighbor *.*.*.* maximum-prefix threshold-value [warning-only]:限制从一个邻居接收前缀的数量,[warning-only]参数表示当邻居公布的前缀超过了最大值的90%,Router就生成一个日志消息。
限制从邻居收到路由as路径长度
(1) as路径过滤(filter-list/ip as-path access-list 1 permit …)
(2) Router bgp 109
Neighbor 192.168.1.1 remote-as 65534
Neighbor 192.168.1.1 maxas-limit 10
所有接收到的地址前缀都在BGP 路由表里,但是只有那些as路径长度低于或者等于10的地址前缀才可以进入BGP路由选择处理进程。
路由反射器(Cluster-id)
#路由反射器不改变客户传来的路由的属性
#RR和它的client 就形成一个Cluster,如果AS中有多个RP及其相应的Client,就可以通过不同的Cluster-ID 来区分,对于Cluster内部的Client来说,它不需要FULL-MESHed,并且Client 只与和它位于同一Cluster内部的RP向连接即可,它不会去Cluster外部的BGP Speaker 建立Peer关系。(RFC1966)
#RR防止环路的机制:两个属性originaor_id,包含了始发这条路由的路由器的route-id,因此RR不会将此路由又重新发回给源,如果发起者收到一个带有自己的RID的更新消息,它会不理睬该消息;RR有一个单点故障问题,如果RR挂掉,则client就会丢失他们唯一的NLRI来源,这样就可以做一个双RR备份,此时cluster-list(是一个任选非传递属性,当一个RR将一条路由从一个client反射到一个non-client,它将它的cluster-id加到cluster-list上,如果cluster-list是空的,rr就生成一个,其包含RR的cluster-id(在最新版本的IOS里面,cluster-id在配置RR的时候自动生成),当RR收到一个更新消息的时候,他检查cluster-list,如果在cluster-list里面看到自己的cluster-id值,就不会接收这条路由。????)
可以避免环路,
(1)两个RR配置相同的cluster-id
1.在client1上有一条1.1.1.0的路由,它将这条路由传给它的两个RR(RR1/RR2),RR1和RR2都接收这条路由,因为路由反射器的性质打破了IBGP的水平分割的原则,两个RR互相把这条路由传给对方和另外的客户端,这时候,他们互相在cluster-list里面看到了自己的cluster-id,他们就不接收这条路由(不放进BGP database),所以在RR1/RR2看到的这条路由只有从client1传来的。在client2/3上看到分别从RR1/RR2收到这条路由,但是优选从RR1收到的(我觉得这里面又包含先从谁那里先收到这条路由的问题)
2.在RR1上有一条2.2.2.0的路由,这时候RR1将这条路由传给了RR2和它的3个client,RR2接收这条路由并且把他÷他们传给他的client,这时候3个client同时从RR1和RR2收到这条路由,它在路由的cluster-list里面看到两者有相同的cluster-id,他们优选从RR1收到的路由,由于RR的client就是普通的IBGP路由器,存在水平分割的原则,他们就不会把这条路由传给其他的IBGP邻居。
PS :在Rr的client上的路由里面才看到cluster-list.
在as内部,不改变BGP的下一条属性,show ip b和show ip b *.*.*.*的内容不一样,后者可以看到路由的详细情况。
r1#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 2
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
2.2.2.2 (metric 65) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 22.22.22.22, Cluster list: 0.0.0.1
Local
2.2.2.2 (metric 65) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
r1#sh ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 3
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
4.4.4.4 (metric 129) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 44.44.44.44, Cluster list: 0.0.0.1
Local
4.4.4.4 (metric 129) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
Originator: 44.44.44.44, Cluster list: 0.0.0.1
----------------------------------------------------------------------------------------------------------------
r2#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 3.3.3.3 4.4.4.4
Local
0.0.0.0 from 0.0.0.0 (22.22.22.22)
Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best
r2# sho ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 3
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 3.3.3.3
Local, (Received from a RR-client)
4.4.4.4 (metric 65) from 4.4.4.4 (44.44.44.44)
Origin IGP, metric 0, localpref 100, valid, internal, best
----------------------------------------------------------------------------------------------------------------
r3#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 4.4.4.4
Local
2.2.2.2 (metric 11) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
r3#sho ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 3
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
1.1.1.1 2.2.2.2
Local, (Received from a RR-client)
4.4.4.4 (metric 75) from 4.4.4.4 (44.44.44.44)
Origin IGP, metric 0, localpref 100, valid, internal, best
----------------------------------------------------------------------------------------------------------------
r4#sho ip b 22.22.22.0
BGP routing table entry for 22.22.22.0/24, version 3
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Not advertised to any peer
Local
2.2.2.2 (metric 65) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal
Originator: 22.22.22.22, Cluster list: 0.0.0.1
Local
2.2.2.2 (metric 65) from 2.2.2.2 (22.22.22.22)
Origin IGP, metric 0, localpref 100, valid, internal, best
r4#sho ip b 44.44.44.0
BGP routing table entry for 44.44.44.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Advertised to non peer-group peers:
2.2.2.2 3.3.3.3
Local
0.0.0.0 from 0.0.0.0 (44.44.44.44)
Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best
(1)两个RR配置不同的cluster-id
1.在client1上有一条1.1.1.0的路由,它将这条路由传给它的两个RR(RR1/RR2),RR1和RR2都接收这条路由,因为路由反射器的性质打破了IBGP的水平分割的原则,两个RR互相把这条路由传给对方和clients,根据bgp的选路原则,他们会优选有较小IGP metric的路由,这时候,就是选择从client1接收的路由。
2.在RR1上有一条2.2.2.0的路由,这时候RR1将这条路由传给了RR2和它的3个client,因为在这条路由的cluster-list里的cluster-id不一样,他们就互相都接收了这条路由,因为路由反射器的性质打破了IBGP的水平分割的原则,他们又把这条路由再传给clients,而3个client在接收这条路由的同时,由于RR的client就是普通的IBGP路由器,存在水平分割的原则,他们就不会把这条路由传给其他的IBGP邻居,但是他们收到了两次这条路由信息的更新,根据bgp的选路原则,他们会优选有较小IGP metric的路由,这时候,就是选择从RR1接收的路由。
(1)如果路由是从Non-client的IBGP学习到的,只将她反射给client。
(2)如果路由是从client学习到的,将它反射给除了发起该路由的client以外的所有non-clent及其client
(3)如果路由是从EBGP对等体学习到的,将它反射给所有的client和non-client。
Confederations(联盟)
由子AS组成的AS,
联盟AS9184是由AS65510/AS65520/AS65530组成的。
AS_path两类属性:as_sequence和as_set,联盟为AS_path增加了两个属性类型。AS_CONFED_SEQUENCE和AS_CONFED_SET
AS_CONFED_SEQUENCE:由属于本地联盟中的自治系统的AS号组成的有序列表,在联盟内部防止路由环路。
AS_CONFED_SET:由属于本地联盟中的自治系统的AS号组成的无序列表,在联盟内部防止在做路由聚合的时候,由于丢失AS信息而引起路由环路。
在联盟中,到联盟外部的EBGP路由优先与到AS成员的EBGP路由,到AS成员的EBGP路由优于IBGP路由,联盟和AS之间还有一个不同:例如NEXT_HOP/MED,可以不加修改地公布给联盟的其他AS成员中的EBGP对端,而且也可以发送LOCAL_PREF.
在RR环境下,只要RR支持路由反射器功能就可以,在联盟环境下,所有的Router都要支持这一特性,因为所有Router都必须识别AS_PATH中的AS_CONFED_SEQUENCE和AS_CONFED_SET类别,因为向联盟外面公布路由的时候,要把这些AS_PATH类去掉,因此其他AS的路由器不要支持联盟。
当向联盟外部的EBGP对等体发送update消息的时候,会将AS_CONFED_SEQUENCE和AS_CONFED_SET
从AS_PATH属性中去掉,将联盟as号加到AS_PATH中,因为这一点,外部的对等体就把联盟看作是一个AS而不是一个自治系统的集合。
PS: AS-Path/AS-Set的区别:AS-Path(有序列表)/AS-Set(无序集合)
Sugarbush#show ip bgp
BGP table version is 19, local router ID is 172.20.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
Network Next Hop Metric LocPrf Weight Path
*> 192.168.192.0/21 192.168.1.230 0 400 300 i
*> 192.168.192.0/21 192.168.1.233 0 300 {200,100,500} ?
Peer Group(对等体组)
如果在某一Router的旁边有一些路由器,它们都有一致的策略,就可以指定一个邻居组(对等组)
创建组的命令:Router(config-router)# neighbor [peer-group-name] peer-group
添加成员的命令:Router(config-router)# neighbor [ip-address] peer-group [peer-group-name]
这样的好处是简化配置。
BGP Route Damping(BGP路由抑制)
bgp dampening [[route-map map-name] [half-life-time reuse-value suppress-value
maximum-suppress-time]]
Penalty:默认值是1000 per flap
Suppress-value:范围1~20000;默认值是2000
Reuse-value:范围1~2000;默认值是750
Half-life:范围1~45min;默认值是15 minutes
Maximum-suppress-time:范围1~255;默认值是60 minutes, or 4 times the half-life
例子:对172.16.220.0/20做抑制
ROUTER C
router ospf 10
redistribute bgp 1 subnets
network 192.68.0.0 0.0.255.255 area 0
router bgp 1
bgp dampening route-map SELECTIVE_DAMPENING
network 192.68.11.0
neighbor 172.16.20.2 remote-as 3
neighbor 192.68.6.1 remote-as 1
no auto-summary
access-list 1 permit 172.16.220.0 0.0.0.255
route-map SELECTIVE_DAMPENING permit 10
match ip address 1
set dampening 20 950 2500 80
route-map SELECTIVE_DAMPENING permit 20
改进BGP的聚合
BGP的邻居认证
#bgp的认证仅仅限制于邻居之间.
例如:\
nei 5.5.5.5 password cisco(默认就是md5认证)
调用认证功能需要CISCO ios软件在TCP连接中每发送一个TCP字段就生成并校验MD5摘要,如果调用了认证,但是其中一个字段没有通过认证,会向console口发送一个message
如果只是在一边配置了认证:
%TCP-6-BADAUTH: No MD5 digest from [peer's IP address]:11003 to [local router's IP address]:179
如果两边的认证密码不匹配:
%TCP-6-BADAUTH: Invalid MD5 digest from [peer's IP address]:11004 to [local router's IP address]:179
正则表达式
. 任意单一字符,包括空格,句号 .标志匹配任意一个字符,包括空格,如:当我们使用permit .*的时候,表示匹配所有的路由。
[] 在方括弧中罗列的任何字符
[^] 除了在方括弧中罗列字符外任何字符
- 在由连字符所分隔的两个字符之间的任意字符, 表示两个AS之间的连接符,如:permit ^254_253_252$, 表示起源于252,经过253和254的路由条目
? 字符或模式出现0次或1次,标志匹配前面的一个字符,注意:只是匹配一个字符。?允许前面的字符出现一次或者是空。如:permit 254[0-9]?$,那么就是只匹配起源于AS 254/2540---2549的路由,注意?在CISCO路由器上用CTRL-V来替代。
* 字符或模式出现0次或多次,标志匹配前面的一个字符,注意,和?不同的是,*允许前面的字符出现许多次或者是空,而?只允许匹配出现一次或者是空。如:permit 254[0-9]*$,那么就是只匹配起源于AS 254/2540---25499999........的路由 如果是permit 254[5-9],那么就是匹配起源自AS 254/2545-2549/25455-25459/254555-
254599............
+ 字符或模式出现1次或多次,+和*的区别就是*可以匹配空,但是+必须匹配一个值才行如permit ^254+$,表示起源于254或者2544/25444........而permit ^254*$则可以匹配起源于AS 25/254/25444。
^ 一行的开始,标志一个表达式的开始,如果不用这个字符,那么默认就没有开始的限制了。如:当使用permit ^254,那么表示的意思就是和本地相连的AS是254传过来的路由全部都允许了。如果使用简单的permit 254,那么就是只要是经过了AS 254的路由,全部都被允许了,其实和permit _254_表达的意思相同。
$ 一行的结束,标志一个表达式的结束,如果不用这个字符,那么默认就没有结束的限制了。如:当使用了permit 254$,那么表示的意思就是起源于AS 254的路由全部被接受,如果permit 254那么见上面的解释。
| 由元字符特殊字符分隔的字之一
_ 一个逗号,行的开始,行的结束或空格
BGP的其他性质
1.BGP和ISIS一样以链路为边界。
2.BGP不支持负载均衡,因为通过它复杂的选路原则一定可以决定一条最优的路由。
3.BGP版本向后兼容,如果发现对方是更低的版本,将会降低自己的版本来与之兼容,当前的版本是BGP V4。
4.BGP Peer=BGP Speaker=BGP Neighbor
5. 在本AS内,BGP的AS-PATH属性不变,在离开本AS的时候,会在AS-PATH前面附加上本AS的AS 号。
6.一个Router 只能运行一个BGP实例(不会把一个路由器放到多个BGP(AS)中)。但是可以采用local-as这来使Router可以同时有2个asn(但是实际上只用一个),这是对于Ebgp邻居而言的,如果在A(as 109)-----EBGP----B(as 159) 之间,A配置了
neighbor 145.2.2.2 local-as 210,这时候,B就会以为它正在和Asn是210的EBGP Peer建立邻居关系,A在向B通过路由更新的时候,会把路由里面的as号码改成local-as中配置的asn,在A上显示的从B上学习到的路由就是210_159,在B上显示的从A上学习到的路由就是159_210就相当于as210和as159的EBGP在通信。这在两个ISP何必的时候作为过渡策略使用,避免大面积的地址重新规划和网络环境的重新配置。
7. iBGP TTL = 255
eBGP TTL= 1
8.当重分布OSPF到BGP中的时候,或者如果存在RR ,Ospf的 router-id必须和BGP的router-id一样。
#redistribute ospf 10 match internal external 1 external 2
default-metric 2
redistribute ospf internal external 1 external 2: 必须显式的匹配internals & externals OSPF路由
default-metric 2: Assigns a metric of 2 hops in BGP to the OSPF routes
#router eigrp 100
redistribute bgp 100 route-map test
route-map test permit 10
set automatic-tag
set as-path tag
This will redistribute the BGP path and Origin code into EIGRP /... [Cisco conly]
BGP的几种管理距离
Internal BGP :200
External Border Gateway Protocol (BGP):20
Local BGP:200
Exterior Gateway Protocol (EGP):140
router bgp 200
distance bgp 20 95 200
BGP -4 Command
1.Router(config-router)#neighbor {ip-address | peer-group-name} remote-as autonomous-system
可以用IP地址或对等组名来指定,这个ip-address是对方邻居的路由更新源。EBGP(ip-address应该是与本Router直连的IP)IBGP(ip-address是对方路由器上任何一个IP地址,只要是路由可达,一般是用L0口做更新源,因为这样做可以提高BGP网络的健壮性),用Lo口做更新源一般用于IBGP中,在EBGP中使用,要满足路由可达的原则。
PS:
①两个BGP Neighbor的更新源必须匹配,不然数据包将会被丢弃。
②在EBGP中的TCP包的TTL值是1,所以有了Neighbor ip-address ebgp-multihop x(x是TTL的值) 命令。
2.Router(config-router)#neighbor {ip-address|peer-group-name} shutdown| soft-reconfiguration inbound
Shutdown:邻居关系并没有被删除,而是暂时不可用,一般用于维护和更改策略,它防止路由摆动(Route Flapping),管理shut down。
Soft-reconfiguration inbound:告诉Router存储所有从它的Neighbor更新的路由,才可以让新的inbound policy 生效而不要重新Reset BGP(会话连接仍然维持),这是条内存密集型命令。
3.clear ip bgp {* | address | peer-group-name} [soft [in | out]]
*:所有的BGP会话都将被Reset,全部BGP路由表将被丢弃,BGP会话状态更改为Idle。
Address:特定IP地址的邻居将被Reset,其BGP会话状态更改为Idle,清除从该BGP Peer 学习到的路由。邻居关系将重新建立。
Peer-group-name:指定的 BGP peer-group 将被Reset
Soft out:Router 不会丢失从Neighbor那边学习到的路由,Router重新发送所有BGP路由给Neighbor而不要Reset BGP会话(连接仍然维持),对inbound policy 无效,在做Onbound policy时,这条命令强烈建议使用。
Soft in:Routes advertised to this neighbor are not withdrawn,Router存储所有从它的Neighbor更新的路由,才可以使用存储的,未经改动的更新信息来执行新的inbound policy,而不要重新Reset BGP(会话连接仍然维持)。
下列情况下必须手动Reset 邻居关系
1.补充或者改变与BGP相关的ACLS
2.改变与BGP有关的weight
3.改变与BGP有关的distribute-list
4.改变与BGP有关的Timer
5.改变与BGP有关的Admin distance
6.改变与BGP有关的Router-map
4.建立Neighbor关系的特例(配置练习)
A以对方的LO0(2.2.2.2)口来建立邻居(在as 100中)
B以对方的直连接口(12.12.12.1)来建立邻居(在as 200中)
A:Router bgp 100
Neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 ebgp-multihop 2
B: Router bgp 200
Neighbor 12.12.12.1 remote-as 100
Neighbor 12.12.12.1 update-source lo0
待续…
4.r2#show ip rou
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
r2#show ip bgp
BGP table version is 13, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i11.11.11.0/24 1.1.1.1 0 100 0 i
*> 45.45.45.0/24 4.4.4.4 0 0 400 i
5. show ip bgp paths 显示BGP 拓扑图
和show ip bgp 显示BGP 路由表的区别?
6. 私有AS号码剥离:
RTA(config)#router bgp 1
RTA(config-router)#neighbor 172.16.20.2 2 remote-as 65001
RTA(config-router)#neighbor 192.168.6.3 remote-as 7
RTA(config-router)#neighbor 192.168.6.3 remove-private-as
1. Bgp配置缺省路由和路由聚合
① ip route 0.0.0.0 0.0.0.0 null0
router bgp 100
network 0.0.0.0(向所有建立的邻居都发送缺省路由)
② router bgp 100
neighbor *.*.*.* default-originate(只是向特定的邻居发送缺省路由,如果只想发送缺省路由,则需要做路由过滤,这条命令不需要)手动建立一条缺省路由。)
2. Neighbor *.*.*.* version :不同版本的BGP直接的手动协商。
3.