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

邻居建立条件

  1. 目标可达( 注意TTL )

  2. 建邻接口地址要与 回包接口地址一致

  3. 声明邻居所在的AS号与邻居实际所在AS号一致

BGP建邻小实验(建议IBGP用回环口 EBGP用物理口)

image
如图
每个路由器都有一个环回口 为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

建立后报文:
image
观察到 首先建立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只用于保活
image

六种状态

IDLE:查找路由
CONNECT:建立tcp连接 发出请求
ACTIVE:连接建立失败 尝试再次建立
OPNESEND:发出open包 会话建立成功
OPENCONFIRM:确认到open包
ESTABLISHED:邻居关系建立成功
注:active只有tcp建立时参数比对不成功才会出现 正常情况超时是connect
image

BGP数据库

分为BGP邻居表 BGP路由表
Adj-Rib-in Adj-Rib-out ip-Rib
当路由条目进入时 首先进入 Rib-in表 经过输出策略 再进行路径选择 最终进入BGP路由表 加载到本地路由表 然后经过输出策略 进入到 Rib-out再宣告给邻居

BGP宣告规则

image

  1. 只有明确指定的路由才会宣告
  2. 只有精确匹配的路由(掩码匹配)才会宣告
  3. 多条路径时 选择最优的路径
  4. 只将最优的路径宣告给邻居
  5. 从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
# 此时 可达 所以优

image
情况一:在同一个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号 image
image
图中的 200 就记录了该条目所经过的as

BGP汇总方法:

  1. 使用本地静态汇总 然后宣告汇总后的静态条目
  2. 对引入的IGP路由进行主类掩码聚合 summary automatic
  3. 手动聚合:命令 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路由属性

分为四个方面
image

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选路规则

  1. 首先丢弃下一跳不可达的路由条目
  2. 比较首选值 选最高的(perference——value)*
  3. 选择本地优先值大的设备(localperf)该值用于控制ibgp如何出本AS 只在IBGP间传播 *
  4. 依次选择宣告的路由 引入的路由 汇总的路由(手动优于自动)
  5. AS-path 越少越优先 *
  6. IGP>EGP>import
  7. MED值越小越优 用于控制外部路由器如何进入本AS 仅在相邻的两个AS之间传递*
  8. 优选EBGP处学来的路由
  9. 比较AS内部igp的开销值越小越优先
  10. 选择cluster——list短的
  11. 选择originator——id小的
  12. 选择路由器router-id小的
  13. 选择IP地址小的
    前九条一样时 称其为等价路由 可以进行负载分担 其中带*指的是该条目常用于策略

BGP社团属性

公认社团属性:
internet:可以宣告给任意邻居
no_export:只能在as内部传播 只能传递给ibgp邻居 也能传递给联邦的子as
no_advertise:不允许传递
no_export_sub:不能在本as内传递 不能在联邦的子as中传递
社团属性的作用和tag类似 对应社团属性的路由会有不同的动作
自定义社团属性:
使用冒号隔开 两个数值 共32位
修改默认的负载均衡值:maximum load-balancing 默认在bgp中为1 ospf中为4

综合实验

image

首先建邻

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

高级特性:

  1. 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
  1. BGP路由黑洞
    image
    如图 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

posted @ 2024-02-04 20:38  f0r9  阅读(83)  评论(0编辑  收藏  举报