AS间的路由协议 外部网关路由协议BGP
BGP
BGP是由EGP发展而来的
拨号上网时 常要拨号16300 由此 中国电信的骨干网为中国163(china net) 且网易邮箱@163 的由来也是如此
BGP是as之间的技术 as是一个技术管理机构 每个as内部 运行像ospf isis rip这样的动态路由协议
而as之间则允许 BGP这样的外部网关协议 目前只有BGP被用于网络环境 BGP存在TLV字段 可拓展性强
中国关键网络的AS号 Chinanet(4134)CN2(4809)中国联通(9929)
保留as号:0 65535
私有as:64512-65535
优于距离矢量协议 是距离矢量协议
BGP协议特点
协议基于tcp端口号179 面向链接 的可靠协议
有丰富的度量属性 进行灵活的选路
存在惩罚机制 防止路由的震荡 稳定性好
路由可以批量打包 极大提高效率
仅增量 触发式更新
使用原因:
1.路由条目庞杂 需要BGP来容纳上万条路由
2.使用MPLSvpn 需要BGP的社团属性
3.策略能力强 路由属性多
BGP角色
BGP speaker:运行了BGP的设备
BGP peer:BGP对等体
互换BGP报文的BGP speaker 之间称之为BGP peer
BGP邻居(对等体)
BGP的邻居建立基于TCP所以 邻居不一定要直连 单播建邻 只要存在路由 两者等互通 即可建邻
(注意跳数限制)
BGP的邻居必须手动建立 不能自动建立
一台BGP设备只能运行在一个AS内(除联邦技术 该技术用bgp私有AS号作内部as号 共有as号做外部as号)
邻居类型分为:
内部BGP邻居:IBGP 相同AS号
外部BGP邻居:EBGP 不同AS号
当一个路由器运行多种路由协议时:
建议在路由器上配置全局的router id
[H3C]router id 1.1.1.1
邻居建立条件
-
目标可达( 注意TTL )
-
建邻接口地址要与 回包接口地址一致
-
声明邻居所在的AS号与邻居实际所在AS号一致
BGP建邻小实验(建议IBGP用回环口 EBGP用物理口)
如图
每个路由器都有一个环回口 为x.x.x.x/32
首先建邻的条件是互通 使用直连口建邻 不需要路由就能通 使用环回口建邻 需要存在路由
图中12之间为ibgp 23之间为ebgp
首先测试直连邻居建立:
IBGP:
[R1]bgp 12
#开启bgp进程 指定AS号
[R1]bgp 13
The specified BGP instance already exists. Current AS number is 12.
# 一台设备只能在一个as区域内
[R1-bgp-default]peer 12.0.0.2 as-number 12
#指定对端的as号 和地址 此时查看tcp会话 会发现该设备在监听 179 端口
[R1-bgp-default]address-family ?
ipv4 Specify the IPv4 address family
ipv6 Specify the IPv6 address family
l2vpn Specify the L2VPN address family
link-state Specify the link-state address family
vpnv4 Specify the VPNv4 address family
vpnv6 Specify the VPNv6 address family
# 创建地址族
[R1-bgp-default]address-family ipv4 unicast
# 使用ipv4单播地址族
[R1-bgp-default-ipv4]peer 12.0.0.2 enable
# 注意 上两条命令在华为设备中会默认写入 不需要手动敲入
[R2]bgp 12
[R2-bgp-default]peer 12.0.0.1 as-number 12
[R2-bgp-default]address-family ipv4-unicast
[R2-bgp-default-ipv4]peer 12.0.0.1 enable
查看tcp会话:
[R1-bgp-default]dis tcp
*: TCP connection with authentication
Local Addr:port Foreign Addr:port State Slot PCB
0.0.0.0:179 12.0.0.2:0 LISTEN 0 0xffffffffffffff9d
12.0.0.1:179 12.0.0.2:53312 ESTABLISHED 0 0xffffffffffffffa7
建立后报文:
观察到 首先建立tcp链接三次握手 然后再进行BGP的OPEN keep alive 等操作 且每一分钟 更新一次
EBGP邻居
[R2-bgp-default]peer 23.0.0.3 as-number 23
[R2-bgp-default-ipv4]peer 23.0.0.3 enable
[R3-bgp-default]peer 23.0.0.2 as-number 12
[R3-bgp-default-ipv4]peer 23.0.0.2 enable
# 查看会话:
[R2-bgp-default-ipv4]dis tcp
*: TCP connection with authentication
Local Addr:port Foreign Addr:port State Slot PCB
0.0.0.0:179 12.0.0.1:0 LISTEN 0 0xffffffffffffff9d
0.0.0.0:179 23.0.0.3:0 LISTEN 0 0xffffffffffffff9f
12.0.0.2:53312 12.0.0.1:179 ESTABLISHED 0 0xffffffffffffff9e
23.0.0.2:53313 23.0.0.3:179 ESTABLISHED 0 0xffffffffffffffa0
#查看邻居
[R2-bgp-default-ipv4]dis bgp peer ipv4
BGP local router ID: 2.2.2.2
Local AS number: 12
Total number of peers: 2 Peers in established state: 2
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
12.0.0.1 12 20 17 0 0 00:13:20 Established
23.0.0.3 23 5 5 0 0 00:01:52 Established
使用环回口建邻更加安全 更加稳定
首先要网络物理、逻辑可达
同一个AS内部运行动态路由协议 AS之间则使用静态:
[R3]ip route-static 2.2.2.2 32 23.0.0.2
[R2]ip route-static 3.3.3.3 32 23.0.0.3 # 实现互通
#建邻命令省略
[R1-bgp-default-ipv4]dis bgp peer ipv4
* - Dynamically created peer
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2.2.2.2 12 0 0 0 0 00:01:11 Connect
# 邻居无法建立 原因是 对端回包的地址是接口地址 而不是环回地址 导致三次握手无法建立使用命令
[R1-bgp-default]peer 2.2.2.2 connect-interface LoopBack 0
# 打入这条命令后 对端与1.1.1.1建立链接就能成功了 也就是本端设备的179端口将被连接
[R2-bgp-default]peer 3.3.3.3 connect-interface LoopBack 0
# EBGP打入此命令后 依然无法建立邻居 原因是 默认EBGP建邻 使用的包ttl值为1
[R2-bgp-default]peer 3.3.3.3 ebgp-max-hop 2
[R3-bgp-default]peer 2.2.2.2 ebgp-max-hop 2
# 修改跳数
[R3-bgp-default]dis tcp
Local Addr:port Foreign Addr:port State Slot PCB
0.0.0.0:179 2.2.2.2:0 LISTEN 0 0xffffffffffffffa3
3.3.3.3:179 2.2.2.2:53350 ESTABLISHED 0 0xffffffffffffffbb
# 邻居建立成功
总结 建邻时 建议IBGP之间使用回环口稳定 EBGP之间直接使用同网段物理接口符合实际情况(EBGP间不可能使用路由协议 也不可能随意给BGP路由器加入静态路由)
五种数据包
前面我们通过抓包已经看到了三种数据包 分别是 open(建立连接)keepalive(邻居保活) update(路由更新)
还有两种 notification 关闭邻居连接 Route-refersh 请求路由信息
触发update的方式:使用network 宣告目标网段 华为设备直接在bgp视图下宣告
华三设备需要在bgp下的对应地址族视图中使用
触发Router-refersh的方法:在用户视图刷新bgp refresh bgp all import(入方向是指该设备向其他设备请求 出方向指的是该设备发出更新包是update包)
open包只会在建立邻居时使用 keeplive只用于保活
六种状态
IDLE:查找路由
CONNECT:建立tcp连接 发出请求
ACTIVE:连接建立失败 尝试再次建立
OPNESEND:发出open包 会话建立成功
OPENCONFIRM:确认到open包
ESTABLISHED:邻居关系建立成功
注:active只有tcp建立时参数比对不成功才会出现 正常情况超时是connect
BGP数据库
分为BGP邻居表 BGP路由表
Adj-Rib-in Adj-Rib-out ip-Rib
当路由条目进入时 首先进入 Rib-in表 经过输出策略 再进行路径选择 最终进入BGP路由表 加载到本地路由表 然后经过输出策略 进入到 Rib-out再宣告给邻居
BGP宣告规则
- 只有明确指定的路由才会宣告
- 只有精确匹配的路由(掩码匹配)才会宣告
- 多条路径时 选择最优的路径
- 只将最优的路径宣告给邻居
- 从ibgp处学到的路由不会传回给ibgp
由于第五条规则 导致一条路由传递给一个AS内时 该路由条目只能传递一跳 必须达成bgp全连才能够让所有路由器学到该条目 或者使用联邦反射器实现
IBGP间传递的路由的下一跳默认不会改变
EBGP间传递的路由下一跳会发生改变
#图中R4 宣告路由
[R4-bgp-default-ipv4]network 44.44.44.44 32
# R3一定能学到 切下一跳修改为邻居ip4.4.4.4
# 但其余设备并没有4.4.4.4的路由
[R3-bgp-default-ipv4]dis bgp routing-table ipv4
Total number of routes: 2
BGP local router ID is 3.3.3.3
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >e 44.44.44.44/32 4.4.4.4 0 0 200i
<R2>dis bgp rou ipv4
Total number of routes: 2
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 11.11.11.11/32 1.1.1.1 0 100 0 i
i 44.44.44.44/32 4.4.4.4 0 100 0 200i
<R2>dis bgp rou ipv4
Total number of routes: 2
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 44.44.44.44/32 4.4.4.4 0 100 0 200i
# 此时使用命令peer x.x.x.x next-hop local 改变下一跳到本地
[R3-bgp-default-ipv4]peer 1.1.1.1 next-hop-local
[R3-bgp-default-ipv4]peer 2.2.2.2 next-hop-local
[R1-bgp-default-ipv4]dis bgp routing-table ipv4
Total number of routes: 2
BGP local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 44.44.44.44/32 3.3.3.3 0 100 0 200i
# 此时 可达 所以优
情况一:在同一个as内 全是ibgp邻居 发送路由时 不会改变下一跳
情况二:在不同as 当as100将路由传递给as200时 将下一跳修改为出口地址
情况三:在不同as 当as100的路由传递给200时 下一跳修改为出口地址 但在ibgp内部 R2传递给R3不会修改下一跳 导致R3不可达 R1 导致路由不可用
建议ibgp邻居 必须修改下一跳
优化邻居关系命令:
peer x.x.x.x connect-interface loopback 将建邻关系的接口指定 用于回环口建邻
peer x.x.x.x ebgp-max-hop 2 将ebgp建邻跳数修改 用于ebgp环回口建邻
peer x.x.x.x next-hop-local 用于修改ibgp中的路由下一跳 防止不可达导致路由不可用
peer x.x.x.x route-policy 指定策略
peer x.x.x.x password 指定建邻密码
BGP防环机制
AS内部:IBGP路由只传递一跳 从ibgp邻居处收到的路由 不会再传递给ibgp邻居
[R2-bgp-default]dis bgp routing-table ipv4
Total number of routes: 1
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 11.11.11.11/32 1.1.1.1 0 100 0 i
如图 该条目优 但R2不会传递给ibgp邻居R3
[R3-bgp-default]dis bgp routing-table ipv4
Total number of routes: 0
解决办法 使用ibgp全连:(联邦 反射器也可以解决此问题)
[R3-bgp-default-ipv4]dis bgp routing-table ipv4
Total number of routes: 1
BGP local router ID is 3.3.3.3
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 11.11.11.11/32 1.1.1.1 0 100 0 i
AS之间:使用AS——path属性来防环 as-path会记录所经过的AS号
图中的 200 就记录了该条目所经过的as
BGP汇总方法:
- 使用本地静态汇总 然后宣告汇总后的静态条目
- 对引入的IGP路由进行主类掩码聚合 summary automatic
- 手动聚合:命令 aggregate 参数detail-suppressed(不发明细)as-set(保留as-path)
手动聚合优于自动聚合
当ebgp邻居传递明细 而对端路由做了手动汇总 此时as-path属性会刷新 对端会将新的汇总后的条目传递回去 造成环路 使用as-set属性 保留as-path以此来防环
汇总方法一:
[R1]ip route-static 172.16.0.0 24 null0
[R1]ip route-static 172.16.1.0 24 null0
[R1]ip route-static 172.16.2.0 24 null0
[R1]ip route-static 172.16.3.0 24 null0
# 直接宣告 172.16.0.0 22 是行不通的 因为路由表中没有这一项 需要先进行静态汇总 再进行宣告 这是一种巧办法 但不推荐使用 会污染路由表
[R1]ip route-static 172.16.0.0 22 null0
<R2>dis bgp rou ipv4
Total number of routes: 3
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 11.11.11.11/32 1.1.1.1 0 100 0 i
* >i 44.44.44.44/32 3.3.3.3 0 100 0 200i
* >i 172.16.0.0/22 1.1.1.1 0 100 0
方法2:
[R1-bgp-default-ipv4]summary automatic
# 这一方法只对引入路由生效 且隐藏细节
[R1]ip prefix-list test permit 172.16.0.0 24
[R1]ip prefix-list test permit 172.16.1.0 24
[R1]ip prefix-list test permit 172.16.2.0 24
[R1]ip prefix-list test permit 172.16.3.0 24
[R1]route-policy test permit node 10
[R1-route-policy-test-10]if ip address prefix-list test
[R1-bgp-default-ipv4]import-route static route-policy test
# 查看路由表
<R2>dis bgp routing-table ipv4
Total number of routes: 4
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 11.11.11.11/32 1.1.1.1 0 100 0 i
* >i 44.44.44.44/32 3.3.3.3 0 100 0 200i
* >i 172.16.0.0/16 1.1.1.1 0 100 0 ?
* >i 172.16.0.0/22 1.1.1.1 0 100 0 i
#可以看到 该条目被引入 且以主类形式宣告
方法3:
手动汇总
[R1-LoopBack14]int l11
[R1-LoopBack11]ip add 192.168.0.1 24
[R1-LoopBack11]int l12
[R1-LoopBack12]ip add 192.168.1.2 24
[R1-LoopBack12]int l13
[R1-LoopBack13]ip add 192.168.2.3 24
[R1-LoopBack13]int l14
[R1-LoopBack14]ip add 192.168.3.4 24
# 进行宣告
[R1-bgp-default-ipv4]network 192.168.0.0 24
[R1-bgp-default-ipv4]network 192.168.1.0 24
[R1-bgp-default-ipv4]network 192.168.2.0 24
[R1-bgp-default-ipv4]network 192.168.3.0 24
<R2>dis bgp routing-table ipv4
Total number of routes: 8
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 192.168.0.0/24 1.1.1.1 0 100 0 i
* >i 192.168.1.0/24 1.1.1.1 0 100 0 i
* >i 192.168.2.0/24 1.1.1.1 0 100 0 i
* >i 192.168.3.0/24 1.1.1.1 0 100 0 i
# 手动汇总
[R1-bgp-default-ipv4]aggregate 192.168.0.0 22
#对端只会多一条
* >i 192.168.0.0/22 1.1.1.1 100 0 i
#需要加入参数
[R1-bgp-default-ipv4]aggregate 192.168.0.0 22 detail-suppressed
<R2>dis bgp routing-table ipv4
Total number of routes: 5
BGP local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 11.11.11.11/32 1.1.1.1 0 100 0 i
* >i 44.44.44.44/32 3.3.3.3 0 100 0 200i
* >i 172.16.0.0/16 1.1.1.1 0 100 0 ?
* >i 172.16.0.0/22 1.1.1.1 0 100 0 i
* >i 192.168.0.0/22 1.1.1.1 100 0 i
as-set属性用于保留as-path值 防止由ebgp发过来的再从本端汇总后发回去
BGP路由属性
分为四个方面
1. 公认必遵:(所有路由器都可识别 且必须携带)
AS-path next-hop origin
2. 公认任意:(所有路由器都可识别 但不一定携带)
locla-Pref Atomic-aggregate
3. 可选过渡(不能被所有路由器识别 但是可以传递给邻居)
Aggregator Community
4. 可选非过渡(不能被所有路由器识别 且属性会被丢弃然后传递给邻居)
MED Cluster——list OriginAtor-ID 等
属性一 preference_value:首选值
只在本地有效 属于私有属性 不会传递给邻居 越大越优先
属性二 origin:起源
公认必遵 i e ? 分别代表bgp宣告 egp宣告 引入import 优先级依次降低(EGP已经淘汰)
属性三 AS-path:AS路径
公认必遵 记录经过的as号 越少越优先 且有防环的作用
属性四 Next-hop:下一跳
公认必遵 记录下一跳 默认在ebgp间传递时会更新 当下一跳不可达时 直接丢弃
属性五 Local-perf:本地优先级
公认任意 主要控制发出路由的优先级 越大越优 默认优先级值100 影响的是路由器怎么出本AS
属性六 MED:度量值
可选非过渡 控制 入向路由的优先级 越低越优先 路由器收到后 影响的是路由器怎么进本AS
默认不会对比同一目标不同AS的MED 除非输入命令 compare-different-as-med
BGP选路规则
- 首先丢弃下一跳不可达的路由条目
- 比较首选值 选最高的(perference——value)*
- 选择本地优先值大的设备(localperf)该值用于控制ibgp如何出本AS 只在IBGP间传播 *
- 依次选择宣告的路由 引入的路由 汇总的路由(手动优于自动)
- AS-path 越少越优先 *
- IGP>EGP>import
- MED值越小越优 用于控制外部路由器如何进入本AS 仅在相邻的两个AS之间传递*
- 优选EBGP处学来的路由
- 比较AS内部igp的开销值越小越优先
- 选择cluster——list短的
- 选择originator——id小的
- 选择路由器router-id小的
- 选择IP地址小的
前九条一样时 称其为等价路由 可以进行负载分担 其中带*
指的是该条目常用于策略
BGP社团属性
公认社团属性:
internet:可以宣告给任意邻居
no_export:只能在as内部传播 只能传递给ibgp邻居 也能传递给联邦的子as
no_advertise:不允许传递
no_export_sub:不能在本as内传递 不能在联邦的子as中传递
社团属性的作用和tag类似 对应社团属性的路由会有不同的动作
自定义社团属性:
使用冒号隔开 两个数值 共32位
修改默认的负载均衡值:maximum load-balancing 默认在bgp中为1 ospf中为4
综合实验
首先建邻
R1: ospf 1
area 0
net 12.0.0.1 0.0.0.0
net 13.0.0.1 0.0.0.0
net 1.1.1.1 0.0.0.0
bgp 123
peer 2.2.2.2 as 123
peer 3.3.3.3 as 123
peer 15.0.0.5 as 5
peer 2.2.2.2 connect-int l1
peer 3.3.3.3 connect-int l1
address-family ipv4 unicast
peer 2.2.2.2 enable
peer 3.3.3.3 enable
peer 15.0.0.5 enable
peer 2.2.2.2 next-hop-local
peer 3.3.3.3 next-hop-local
R2:
ospf 1
area 0
net 12.0.0.2 0.0.0.0
net 2.2.2.2 0.0.0.0
bgp 123
peer 1.1.1.1 as 123
peer 1.1.1.1 connect-int l1
peer 24.0.0.4 as 4
address-family ipv4 unicast
peer 1.1.1.1 enable
peer 1.1.1.1 next-hop-local
peer 24.0.0.4 enable
R3:
ospf 1
area 0
net 13.0.0.3 0.0.0.0
net 3.3.3.3 0.0.0.0
bgp 123
peer 1.1.1.1 as 123
peer 1.1.1.1 connect-int l1
peer 34.0.0.4 as 4
address-family ipv4 unicast
peer 1.1.1.1 enable
peer 1.1.1.1 next-hop-local
peer 34.0.0.4 enable
R4:
bgp 4
peer 34.0.0.3 as 123
peer 24.0.0.2 as 123
address-family ipv4 unicast
peer 34.0.0.3 enable
peer 24.0.0.2 enable
net 4.4.4.4 32
net 8.8.8.8 32
net 7.7.7.7 32
R5:
bgp 5
peer 15.0.0.1 as 123
address-family ipv4 unicast
peer 15.0.0.1 enable
net 5.5.5.5 32
net 6.6.6.6 32
net 9.9.9.9 32
建邻完成 R1bgp 路由表 :
[R1-bgp-default-ipv4]dis bgp routing-table ipv4
Total number of routes: 9
BGP local router ID is 15.0.0.1
Status codes: * - valid, > - best, d - dampened, h - history,
s - suppressed, S - stale, i - internal, e - external
a - additional-path
Origin: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
* >i 4.4.4.4/32 3.3.3.3 0 100 0 4i
* i 2.2.2.2 0 100 0 4i
* >e 5.5.5.5/32 15.0.0.5 0 0 5i
* >e 6.6.6.6/32 15.0.0.5 0 0 5i
* >i 7.7.7.7/32 3.3.3.3 0 100 0 4i
* i 2.2.2.2 0 100 0 4i
* >i 8.8.8.8/32 3.3.3.3 0 100 0 4i
* i 2.2.2.2 0 100 0 4i
* >e 9.9.9.9/32 15.0.0.5 0 0 5i
进行bgp选路 前八项一致 第九项 igp路由开销 使用的是ospf 以带宽为开销 s口的开销低 所以走g口 下一跳全为 3.3.3.3
# 策略实现
#策略一:修改preference值来优化选路 首选值越大越优先 不传递 本地有效 默认本地宣告路由优先级值最高
#R4:
# 修改前
* >e 5.5.5.5/32 24.0.0.2 0 123 5i
* e 34.0.0.3 0 123 5i
ip prefix-list 5 permit 5.5.5.5 32
route-policy 5 permit node 10
if-match ip address prefix-list 5
apply preferred-value 100
route-policy 5 permit node 20
peer 34.0.0.3 route-policy 5 import
#修改后:
* >e 5.5.5.5/32 34.0.0.3 100 123 5i
* e 24.0.0.2 0 123 5i
# 策略2: 增长R2传递来的路由的ASpath 以此控制路由 走向R3
#修改前:
* >e 9.9.9.9/32 34.0.0.3 0 123 5i
* e 24.0.0.2 0 123 5i
ip prefix-list 9 permit 9.9.9.9 32
route-policy 9 permit node 10
if-match ip address prefix-list 9
apply as-path 123 123 123 5 replace
route-policy 9 permit node 20
peer 24.0.0.2 route-policy 9 import
#修改后:
* >e 9.9.9.9/32 34.0.0.3 0 123 5i
* e 24.0.0.2 0 123 123 123 5i
#策略3 MED值专用于控制外部AS怎样进入本AS 越小越优先 默认为0
# 修改前:
* >e 6.6.6.6/32 24.0.0.2 0 123 5i
* e 34.0.0.3 0 123 5i
R3:
ip prefix-list 6 permit 6.6.6.6 32
route-policy 6 permit node 10
if-match ip address prefix-list 6
apply cost 10
route-policy 6 permit node 20
peer 34.0.0.4 route-policy 6 export
R2:
ip prefix-list 6 permit 6.6.6.6 32
route-policy 6 permit node 10
if-match ip address prefix-list 6
apply cost 20
route-policy 6 permit node 20
peer 24.0.0.4 route-policy 6 export
#修改后:
* >e 6.6.6.6/32 34.0.0.3 10 0 123 5i
* e 24.0.0.2 20 0 123 5i
#策略45 修改loc-perf 该值可在同一as内传递 越大越优先 默认值100
* >i 8.8.8.8/32 3.3.3.3 0 100 0 4i
* i 2.2.2.2 0 100 0 4i
* >i 4.4.4.4/32 3.3.3.3 0 100 0 4i
* i 2.2.2.2 0 100 0 4i
ip prefix-list 4 permit 4.4.4.4 32
route-policy 4 permit node 10
if-match ip address prefix-list 4
apply local-preference 200
route-policy 4 permit node 20
peer 1.1.1.1 route-policy 4 export
ip prefix-list 8 permit 8.8.8.8 32
route-policy 8 permit node 10
if-match ip address prefix-list 8
apply local-preference 200
route-policy 8 permit node 20
peer 2.2.2.2 route-policy 8 import
# 策略6
ip as-path 10 deny 123$ # 始发123 也就是as-path最后一个值为123 以123结尾
ip as-path 10 permit .* # 允许所有
peer 15.0.0.1 as-path-acl 10 import
#测试:
[R3]int l33
[R3-LoopBack33]ip add 33.33.33.33 32
[R3-bgp-default-ipv4]network 33.33.33.33 32
<R4>dis bgp routing-table ipv4
Network NextHop MED LocPrf PrefVal Path/Ogn
* >e 33.33.33.33/32 34.0.0.3 0 0 123i
[R5]dis bgp routing-table ipv4
Network NextHop MED LocPrf PrefVal Path/Ogn
* >e 4.4.4.4/32 15.0.0.1 0 123 4i
* > 5.5.5.5/32 127.0.0.1 0 32768 i
* > 6.6.6.6/32 127.0.0.1 0 32768 i
* >e 7.7.7.7/32 15.0.0.1 0 123 4i
* >e 8.8.8.8/32 15.0.0.1 0 123 4i
* > 9.9.9.9/32 127.0.0.1 0 32768 i
# 策略7 团体属性的作用类似tag 对应的团体属性 可以执行对应的动作
[R4-route-policy-7-10]apply community ?
INTEGER<1-4294967295> Community number
aa:nn Community number, aa<0-65535>:nn<0-65535>
additive Add the specified community attribute to the original(增加团体属性)
community attribute
internet Internet community(允许传递)
no-advertise No-Advertise community(不允许传递)
no-export No-Export community(不允许传递出ibgp 联邦可传递)
no-export-subconfed No-Export-Subconfed community(不允许传递出ibgp 联邦也不允许)
none No community attribute(清空团体属性)
R4:
ip prefix-list 7 permit 7.7.7.7 32
route-policy 7 permit node 10
if-match ip address prefix-list 7
apply community no-export
dis bgp routing-table ipv4 community
peer 24.0.0.2 route-policy 7 export
peer 34.0.0.3 route-policy 7 export
peer 24.0.0.2 advertise-community
peer 34.0.0.3 advertise-community
R2:
peer 1.1.1.1 advertise-community
R3:
peer 1.1.1.1 advertise-community
# 结果:
<R3>dis bgp routing-table ipv4 community
Total number of routes: 1
BGP local router ID is 3.3.3.3
Network NextHop MED LocPrf PrefVal Community
* >e 7.7.7.7/32 34.0.0.4 0 0 No-Export
[R5]dis bgp routing-table ipv4
Total number of routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn
* > 5.5.5.5/32 127.0.0.1 0 32768 i
* > 6.6.6.6/32 127.0.0.1 0 32768 i
* > 9.9.9.9/32 127.0.0.1 0 32768 i
高级特性:
- BGP组 为了便于配置 采用bgp组的形式 减少命令量
# 创建BGP组
group 【组名】 internal/external
# 加入BGP组
peer 【邻居地址】 group 【组名】
# 使用BGP组
peer 【组名】 【操作】
#示例:
[H3C-bgp-default]group AS100 internal# 注意 内部的as组不需要指定邻居as号
[H3C-bgp-default]peer 3.3.3.3 group AS100
[H3C-bgp-default]peer 2.2.2.2 group AS100
[H3C-bgp-default]peer AS100 connect-interface GigabitEthernet 0/0/0
- BGP路由黑洞
如图 R4R5并没有运行BGP 此时R1 2 3 6互相运行BGP能够学习到彼此的路由 当R6想要访问R1时 数据包传递到R3 R3递归查表 最终下一跳给R5 R5没有去往R1的路由 出现黑洞
可以使用 路由引入来解决 或者bgp全连 但这些方法都会污染中间设备的路由 在实际环境中 常常使用MPLS来打破黑洞
MPLS会为每条路由分配标签号 数据包可以根据标签转发 当数据包到达R3时 压入去往R2的标签号 然后传递 当数据包到R2后 标签出栈 R2根据路由 即可转发到目标
3. 路由反射器RR
使用路由反射器将某个条目反射给客户机 打破IBGP 路由只传一跳的问题
设备角色 | 设备作用 |
---|---|
路由反射器 | 将路由反射给客户机 需要与客户机建立邻居关系 |
客户机 | 接收反射器的路由 不需要全连关系 |
非客户机 | 不能接收反射器的路由 需要与非客户机以及反射器之间建立全连关系 |
始发者 | originator—id标识 防止集群內部产生环路 由始发者发出的路由不会再传递给始发者 |
集群 | cluster—list(类似于ASpath) 防止集群之间产生环路 |
反射规则 从客户学到的会给客户 也会给非客户
从非客户学到的只会给客户 不会给非客户
反射器和客户机构成了一个集群
命令:成为RR 指定客户端[H3C-bgp-default-ipv4]peer 【邻居地址】 reflect-client
指定反射器idreflector cluster-id【id】
cluster—list 只有RR(反射器)设备会检查 如果有本地的id则丢弃 如果没有本地的id则加入本地的id再反射 与aspath类似 可以避免集群之间的环路
但如果传递回始发设备 这时就需要origin-id属性来进行判定 如果该设备收到的origin-id为自己的router-id 则丢弃该条目
RR第一次反射时 会加入集群id和起源id
4. 联邦联盟
同样是为了打破ibgp水平分割 该方法将大as划分成小as 大as内部有小as 小as之间是ebgp邻居关系 如此一来 路由传递可以在一个大as中传递 打破ibgp路由只传一跳的缺陷
小as号 为私有as:范围在64512-65534之间
命令:
bgp 64513 # 声明小as
confederation id 1 # 声明大as
confederation peer-as# 声明对端的小as
注意小as之间的ebgp邻居关系 与正常的ebgp邻居关系特性有些许不同 需要修改ttl 也需要修改下一跳 且AS-path 会以小括号形式括起来 但传出本大as后 会删去括号和小as号
联邦联盟和路由反射器可以配合使用
5. 路由衰减
授予一个惩罚值 当该值超出某一阈值时 停止使用 恢复到某一阈值时 又恢复使用
dampening 【半衰期】【重用阈值】【抑制阈值】【惩罚上限】【路由策略】
当路由发生震荡 惩罚值就增加 在一个半衰期后 惩罚值又会减少一半
[H3C-bgp-default-ipv4]dampening 1 1 1000 2000 9000
上面的惩罚机制是 可用路由半衰期为一分钟 不可以路由半衰期为一分钟 重用阈值为1000 停用阈值是2000 最大惩罚阈值为9000