BGP
一、BGP报文和状态机
1.EBGP 建立邻居仅需一条命令
[AR1]bgp 100
[AR1-bgp]router-id 1.1.1.1
[AR1-bgp]peer 12.1.1.2 as-number 200
2.IBGP之间建立邻居只需要三条命令
[AR2]bgp 200
[AR2-bgp]peer 5.1.1.1 as-number 200
[AR2-bgp]peer 5.1.1.1 connect-interface LoopBack0
[AR2-bgp]peer 5.1.1.1 next-hop-local
3.EBGP之间用回环口建立邻居需要三条命令
[AR6]bgp 300
[AR6-bgp]peer 5.1.1.1 as-number 200
[AR6-bgp]peer 5.1.1.1 ebgp-max-hop 2
[AR6-bgp]peer 5.1.1.1 connect-interface LoopBack0
4.下一跳
- 因为BGP协议是AS BY AS协议。
- 只有离开一个AS的时候,下一跳会自动发生变化
- AS内部之间传递的时候,下一跳是不变的
- 这个地址很可能不可达
- 下一跳不可达的路由,是不可用
- 解决办法是:手动修改下一跳为可达的IP地址
[AR2-bgp]peer 5.1.1.1 next-hop-local - 下一跳会变为建立邻居的IP地址。
R2未配置peer 3.1.1.1 nex-hop-local
R2上配置peer 3.1.1.1 nex-hop-local后
抓包查看:
AR1上:
[AR1]bgp 100
[AR1-bgp]peer 12.1.1.2 as-number 200
AR2上:
[AR2]bgp 200
[AR2-bgp]peer 12.1.1.1 as-number 100
[AR2-bgp]peer 5.1.1.1 as-number 200
[AR2-bgp]peer 5.1.1.1 connect-interface LoopBack 0
[AR2-bgp]peer 5.1.1.1 next-hop-local
PS:下一跳指本地命令,只对EBGP学到的路由生效,对IBGP学到的路由不生效。
如果路由器没有EBGP邻居。还需要配置下一跳指我吗?
AR5上:
[AR5]bgp 200
[AR5-bgp]peer 2.1.1.1 as-number 200
[AR5-bgp]peer 2.1.1.1 connect-interface LoopBack 0
[AR5-bgp]peer 2.1.1.1 next-hop-local
[AR5-bgp]peer 6.1.1.1 as-number 300
[AR5-bgp]peer 6.1.1.1 connect-interface LoopBack 0
[AR5-bgp]peer 6.1.1.1 ebgp-max-hop 2
PS:EBGP之间TTL=1,若TTL大于1的则需要通过更改跳数实现
AR6上:
[AR6]bgp 300
[AR6-bgp]peer 5.1.1.1 as-number 200
[AR6-bgp]peer 5.1.1.1 connect-interface LoopBack 0
[AR6-bgp]peer 5.1.1.1 ebgp-max-hop 2
5.宣告路由
[AR1]bgp 100
[AR1-bgp]network 11.1.1.1 255.255.255.255
[AR6-bgp]network 66.1.1.1 255.255.255.255
display ip routing-table protocol bgp
测试黑洞现像:
可以明显看出AR1和AR6的LookBack1无法通讯,原因在于未将整个BGP做全互联。
6.full-math邻居
[AR2-bgp]peer 3.1.1.1 as-number 200
[AR2-bgp]peer 3.1.1.1 connect-interface LoopBack 0
[AR2-bgp]peer 3.1.1.1 next-hop-local
[AR2-bgp]peer 4.1.1.1 as-number 200
[AR2-bgp]peer 4.1.1.1 connect-interface LoopBack 0
[AR2-bgp]peer 4.1.1.1 next-hop-local
[AR5-bgp]peer 3.1.1.1 as
[AR5-bgp]peer 3.1.1.1 as-number 200
[AR5-bgp]peer 3.1.1.1 next-hop-local
[AR5-bgp]peer 4.1.1.1 as-number 200
[AR5-bgp]peer 4.1.1.1 connect-interface LoopBack 0
[AR5-bgp]peer 4.1.1.1 next-hop-local
[AR3]bgp 200
[AR3-bgp]peer 2.1.1.1 as-number 200
[AR3-bgp]peer 2.1.1.1 connect-interface LoopBack 0
[AR3-bgp]peer 5.1.1.1 as-number 200
[AR3-bgp]peer 5.1.1.1 connect-interface LoopBack 0
[AR4]bgp 200
[AR4-bgp]peer 2.1.1.1 as-number 200
[AR4-bgp]peer 2.1.1.1 connect-interface LoopBack 0
[AR4-bgp]peer 5.1.1.1 as-number 200
[AR4-bgp]peer 5.1.1.1 connect-interface LoopBack 0
全互联后再测试连通性:
7.路由反射器
重新对6台路由器进行配置
AR1和AR2 AR5和AR6通过物理口建立邻居
[AR1]bgp 100
[AR1-bgp]peer 12.1.1.2 as-number 200
[AR2]bgp 200
[AR2-bgp]peer 12.1.1.1 as-number 100
[AR5]bgp 200
[AR1-bgp]peer 56.1.1.6 as-number 300
[AR6]bgp 300
[AR2-bgp]peer 56.1.1.5 as-number 200
AR2和AR3 AR3和AR4 AR3和AR5 通过物理口建立邻居
[AR2-bgp]peer 3.1.1.1 as-number 200
[AR2-bgp]peer 3.1.1.1 connect-interface LoopBack 0
[AR2-bgp]peer 3.1.1.1 next-hop-local
[AR3-bgp]peer 4.1.1.1 as-number 200
[AR3-bgp]peer 4.1.1.1 connect-interface LoopBack 0
[AR3-bgp]peer 5.1.1.1 as-number 200
[AR3-bgp]peer 5.1.1.1 connect-interface LoopBack 0
[AR4-bgp]peer 3.1.1.1 as-number 200
[AR4-bgp]peer 3.1.1.1 connect-interface LoopBack 0
[AR5-bgp]peer 3.1.1.1 as-number 200
[AR5-bgp]peer 3.1.1.1 connect-interface LoopBack 0
[AR5-bgp]peer 3.1.1.1 next-hop-local
记得在R1上宣告11.1.1.1 R6上宣告66.1.1.1
注:若采用全互联方式,应全部互指邻居,本处采用RR方式
配置到当前位置后,在R2和R5上能够看到:
R2上: 没有66.1.1.1的路由
R5上: 没有11.1.1.1的路由
PS:原因在于IBGP水平分割,防止路由黑洞,IBGP学习到的路由,不会传递给其他IBGP邻居,R5将R6的66.1.1.1传递给IBGP邻居R3后,R3不会将66.1.1.1传递给R2,同理R3也不会将11.1.1.1传递给R5
指定Client,让R2和R5可以学习到路由
[AR3-bgp]peer 5.1.1.1 reflect-client
AR4无法收到AR2传过来的路由 非非不传
此时就可以查看路由中的两个参数 (防环)
所有设备均学习到路由,仅需R3上全部打上reflect-client即可
[AR3-bgp]peer 2.1.1.1 reflect-client
[AR3-bgp]peer 4.1.1.1 reflect-client
测试连通性: