BGPE协议虽然是用于在大型规模的网络环境下,在各个路由器之间,动态的传递路由条目信息的,但是 BGP 协议时属于 OSI 模型的“ 第 7 层 ” ---应用层
所以,BGP 协议报文在发送的时候,都是包含在传输层协议的后面的,并且有对应的端口号。使用的端口号: TCP 179,并且该端口号是属于 BGP 报文的 “ 目标端口号 ”,源端口号是随机的
拓扑:
因为 BGP 工作的时候,使用的底层传输协议是 TCP 。所以 BGP 的整个工作‘过程非常稳定。
并且,BGP 的所有的报文的转发方式,都是“ 单播 ”!
在路由协议中,想要实现单播传输数据,命令都是统一的: peer x.x.x.x ( 邻居的 IP 地址 ),所以,在 BGP 邻居中,如果两个设备出现了问题:要么是我的问题,要么是你的问题,比如邻居设备之间传递路由出现了问题,要么是自己没发路由,要么是对方没收路由;
基本配置( R1 和 R2 在同一个 AS ,建立内部 BGP 邻居 )
R1
undo terminal moniter
system-view
sysname R1
interface gi0/0/1
ip address 192.168.12.1 24
quit
bgp 100
router-id 1.1.1.1
peer 192.168.12.2 as-number 100
quit
R2
undo terminal moniter
system-view
sysname R2
interface gi0/0/2
ip address 192.168.12.2 24
quit
bgp 100
router-id 2.2.2.2
peer 192.168.12.1 as-number 100
quit
BGP 100---> 其中的 100 表示的是 AS 号,在 BGP 协议中,任何一个路由器运行 BGP ,都必须 须拥有 1分 AS 号。 AS 号也叫自治系统,此时表示的是一个企业/ 公司
在表示的时候, AS 有两种格式
老格式:2个字节;( AS 的取值是 1--65535 )
新格式: 4个字节; ( AS 的取值是 1- - 4294967295 )
因为 AS 的好买取值空间,很有限,所以为了防止 AS 号被用完,所以 AS 也借鉴了 IP 的方法,将 AS 号分为:
公有 AS : 1-64511, 收费的,随便使用
私有 AS : 64512-65535,免费的,随便使用
在一个路由器上,运行 BGP 的时候,同一个时刻只能运行一个 AS
基于邻居设备之间所使用的 AS 号是否相同,我们将 BGP 邻居分为:
IBGP 邻居 :内部 BGP 邻居,即两个设备的 BGP AS 号相同
EBGP 邻居: 外部 BGP 邻居,即两个设备的 BGP AS号不相同
Router-id -----》 在 BGP 中的 router-id 的作用,和 OSPF 中的完全相同;确定的方式也是分为:
手动指定:通过router-id 命令确定,优先级高于 “ 自动选举 ”
自动选举: 首先 IP 地址的回环接口的 IP 地址,其次选择 IP 地址打的物理 接口的IP 地址
peer 192.168.12.1 as-number 100 ,该命令包含了 3 含义
自己本地设备想 192.168.12.1 发起一个 TCP 连接
期望对方向自己发送BGP 报文的时候,源 IP 地址是 192.168.12.1
期望对方向自己发送 BGP 报文的时候,包含的 AS 号是 100
为了稳定,我们在建立 IBGP 邻居关系的时候,通常都是使用非常稳定的回环接口链接里邻居
R1
bgp 100
peer 10.10.2.2 as-number 100
# R1 向 10.10.2.2 发起一个 BGP 连接。R1 的源 IP ( 随机端口 )---》 10.10.2.2 179. tcp
# R1 期望对方使用 10.10.2.2 给自己发送报文
# R1 期望对方使用的 AS 号是 100
R2
bgp 100
peer 10.10.1.1 as-number 100
# R2 向 10.10.2.2 发起一个 BGP 连接。R1 的源 IP ( 随机端口 )---》 10.10.1.1 179. tcp
# R2 期望对方使用 10.10.1.1 给自己发送报文
# R2 期望对方使用的 AS 号是 100
同时我们在 R2 上,为了满足" R1 堆返回得 BGP 报文得源 IP 地址 " 得要求。我们在 R2 上,修改 R2 得BGP报文得源 IP 地址:
BGP 100
peer 10.10.1.1 connect-interface loopback 0
# 向 10.10.1.1 发送 BGP 报文得时候,源 IP 地址 是 loopback 0 的地址 即 10.10.2.2
所欲,此时的 R2 向 R1 发起的 BGP 连接,应该是 :
10.10.2.2 ( 随机端口 )——————————》 10.10.1.1 , 179 ,TCP
该链接发送到 R1 后,满足了 R1 的“ 更新源监测机制 ”,所以,R2 和 R1 之间的 BGP 邻居关系建立了
通常情况下,我们在配置 BGP 邻居关系的时候,都会修改自己的源 IP 地址,满足对方设备的“ 更新源检测机制 ”。所以R1 的配置应该是:
bgp 100
peer 10.10.2.2 connect-interface loopback 0
但是,如果这样配置的话,理论上来说:
R1 向 R2 建立的 BGP 连接,成功了: 10.10.1.1( 随机端口 ) ---》10.10.2.2:179,TCP
R2 向 R1 建立的 BGP 连接,成功了: 10.10.2.2( 随机端口 ) ---》10.10.1.1:179,TCP
最终 R1 和 R2 之间,因为仅仅存在一个 BGP 邻居关系,所以 最终只能使用其中一个 BGP 连接,就可以了:
选择哪个 “ TCP 连接建立延迟 ” 小的
如何判断一个 TCP 连接是由谁发起的? 看哪个 地址使用的是“ 随机端口 ”
最终,R1 和 R2 之间通过稳定的 回环口建立 IBGP 邻居关系的配置是:
R1
bgp 100
peer 10.10.2.2 as-number 100
peer 10.10.2.2 connect-interface loopback 0
quit
R2
bgp 100
peer 10.10.1.1 as-number 100
peer 10.10.1.1 connect-interface loopback 0
quit
[R1]display bgp peer # 查看 BGP 邻居表
BGP local router ID : 1.1.1.1 》表示的是自己的 router-id
Local AS number : 100 》 表示的是自己的 AS 号
Total number of peers : 1 Peers in established state : 0
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.10.2.2 4 100 0 0 0 00:00:46 Established 0
[R1]
# Total number of peers : 表示的是本地一个存在几个邻居
# Peers in established state :表示的是本地一共有多少个“ 建立 ” 状态的邻居
# peer :表示的是;injection舍不得 “ 接口 IP 地址 ”
# V :表示的是邻居设备所运行的 BGP 版本,默认是 4
# AS: 表示的是邻居设备所在的 AS
# MsgRcvd : 表示的是从邻居设备收到的报文数量
# MsgSent : 表示从邻居设备发送的报文数量
# OutQ:表示的是针对该邻居的“ 出现列队 ” 中包含的报文数量,这些报文都是需要重传的,所 以,该字段最好的情况就是 0 。
# Up/Down: 表示邻居设备的状态,最好的状态就是 : Established ,建立的意思。
# PrefRcv: 表示的是从邻居“ 接收 ” 到 “ 前缀 ” 的数量,即从邻居学习到的路由条目的数量
BGP 邻居建立影响因素:
所谓的直连检测机制,指的是:
与对方建立邻居关系的时候,去往对方的 IP 地址时,必须使用自己本地的直连路由
直连检测机制,仅仅存在于 EBGP 邻居之间,为的就是 : 确保 EBGP 邻居使用的直连接口 建立邻居的
EBGP 邻居之间,虽然是存在这个“ 直连检测机制 ”的,但是,如果想要执行“ 检查 ” 这个机制
其实,是需要另外一个前提条件的: EBGP 之间发送的 BGP 报文的 TTL 值,必须是 1.
所以我们想要在 EBGP 邻居之间,建立一个“ 非直连接口 ” 的 EBGP 邻居关系,只要:修改 EBGP 邻居之间的报文的 TTL 不是 1 就可以了
此时,就不会“ 检查 ” 直连检测机制了
例如在 : 在 R2 和 R3 之间,通过回环口建立 邻居关系;
R2
interface gi0/0/1
ip address 192.168.23.2 24
quit
interface loopbacke 0
ip address 10.10.2.2 32
quit
ip route-static 10.10.3.3 32 192.168.23.3
R3
undo terminal moniter
system-view
sysname R3
interface gi0/0/1
ip address 192.168.23.3 24
quit
interface loopback 0
ip address 10.10.3.3 32
quit
bgp 300
router-id 3.3.3.3
peer 10.10.2.2 as-number 100
peer 10.10.2.2 connect-interface loopback 0
quit
ip route-static 10.10.2.2 32 192.168.23.2
quit
此时 R2 和 R3 之间,专门用于建立 EBGP 邻居关系的 loopback 0 就互通了,接下来,在 R2 和 R3 直接,建立 EBGP 邻居关系
R2
bgp 100
peer 10.10.3.3 as-number 300
peer 10.10.3.3 connect-interface loopback 0
peer 10.10.3.3 ebgp-max-hop # 如果不指定最大的跳数,则指的是将TTL值修改为了255
quit
R3
bgp 300
peer 10.10.2.2 as-number 100
peer 10.10.2.2 connect-interface loopback 0
peer 10.10.2.2 ebgp-max-hop # 如果不指定最大的跳数,则指的是将TTL值修改为了255
quit
拓扑
需求
配置
R1
undo terminal moniter
system-view
sysname R1
interface gi0/0/0
ip address 192.168.12.1 24
quit
interface gi0/0/2
ip address 192.168.22.1 24
interface loopback 11
ip address 10.10.11.11 32
quit
interface loopback 0
ip address 10.10.1.1 32
quit
ospf 1 router-id 1.1.1.1
area 0
network 192.168.12.0 0.0.0.255
network 192.168.22.0 0.0.0.255
quit
bgp 100
router-id 1.1.1.1
peer 192.168.12.2 as-number 100
quit
R2
undo terminal moniter
system-view
sysname R2
interface gi0/0/1
ip address 192.168.12.2 24
quit
interface gi0/0/0
ip address 192.168.23.2 24
quit
interface gi0/0/2
ip address 192.168.22.2 24
quit
interface loopback 0
ip address 10.10.2.2 32
quit
ospf 1 router-id 2.2.2.2
area 0
network 192.168.12.0 0.0.0.255
network 192.168.22.0 0.0.0.255
quit
ip route-static 10.10.3.3 32 192.168.23.3
bgp 100
router-id 2.2.2.2
peer 192.168.12.1 as-number 100
peer 10.10.3.3 as-number 300
peer 10.10.3.3 connect-interface loopback 0
peer 10.10.3.3 ebgp-max-hop
R3
undo terminal moniter
system-view
sysname R3
interface gi0/0/0
ip address 192.168.23.3 24
quit
interface loopback 33
ip address 10.10.33.33 32
quit
interface loopback 0
ip address 10.10.3.3 32
quit
ip route-static 10.10.2.2 32 192.168.23.2
bgp 300
router-id 3.3.3.3
peer 10.10.2.2 as-number 100
peer 10.10.2.2 connect-interface loopback 0
peer 10.10.2.2 ebgp-max-hop
quit
R1
bgp 100
network 10.10.11.11 32 此时,network 后面写的必须是路由表中存在的精确路由
quit
查看 R 1 的路由表
此时,该路由条目千亩有一个符号 > ,表示该路由是 “ 最好的 ”
如果 BGP 路由器认为一个路由是最好的,那么接下来就要做两件事:
自己用:尝试着将该路由放入到自己的路由表中;
给邻居用 :尝试着发送给自己的 BGP 邻居设备;
所以,该路由就发送给了 R2 ,随后就发送给了 R3
R3
bgp 300
import-route direct 此时,使用过 import-route 方式宣告路由
该路由会进入到自己的数据库,并且是“ 最优的 ”,然后发送给了自己的外部邻居 R2 ,在 R2 的BGP 数据库也是最优的;所以 ,R2 就发送给了 R1 ,但是在 R1 的数据库中,该路由不是“ 最优的
原因是 :R1 根本不知道这两个路由的下一跳 IP 地址---10.10.3.3,怎么通
所以,R1 不能使用这两个路由条目,我们需要想办法:让 R1 可以去网站合规下一跳 IP 地址;或者 修改 R1 的这两个路由的下一跳 IP 地址。接下来,我们选择第二种方法:在 R2 上,针对自己的内部邻居。修改外部邻居学习过来的路由的下一跳 IP 地址。
R2 :
bgp 100
peer 10.10.1.1 next-hop-loacl
# 即向 10.10.1.1 发送路由的时候,将下一跳 IP 地址都设置为 local ,所谓的 local地址,指的就是该设备 与 R1 建立邻居时候所使用的 IP 地址,也就是 peer 10.10.1.1 connect-interface loopback 0 中的loopback 地址
此时,在 R1 上看到的 BGP 数据库是这样的:
此时,R1 可以从10.10.2.2 中获得去往10.10.33.33 的路由
R1 的 loopback 11 与 R3 的 loopback 33互通
在上面的实验总结中,我们实现了“ 通过 BGP ” 在不同的 AS 之间实现了路由的传递,但是就算是 BGP 成功实现路由传递,但是数据包,不一定互通,因为,有可能中间传输运营商 ( AS 200 ) 的内部路由器有可能是没有 BGP 路由的,导致业务数据无法互通,如下图所示
拓扑
配置如下
R1
undo terminal monitor
system-view
sysname R1
interface g0/0/0
ip address 192.168.12.1 24
quit
interface loopback 0
ip address 10.10.1.1 32
quit
bgp 100
router-id 1.1.1.1
peer 192.168.12.2 as-number 200
network 10.10.1.1 32
quit
display bgp peer
R2
undo terminal monitor
system-view
sysname R2
interface g0/0/1
ip address 192.168.12.2 24
quit
interface g0/0/0
ip address 192.168.23.2 24
quit
interface loopback 0
ip address 10.10.2.2 32
quit
ospf 1 router-id 2.2.2.2
area 0
network 192.168.12.0 0.0.0.0
network 192.168.23.0 0.0.0.0
network 10.10.2.2 0.0.0.0
quit
quit
bgp 200
peer 192.168.12.1 as-number 100
peer 10.10.6.6 as-number 200
peer 1010.6.6 connect-interface loopback 0
quit
display ospf peer brief
R3
undo terminal moniter
system-view
sysname R3
interface g0/0/01
ip address 192.168.23.3 24
quit
interface g0/0/0
ip address 192.168.34.3 24
quit
interface loopback 0
ip address 10.10.3.3 32
quit
ospf 1 router-id 3.3.3.3
area 0
network 192.168.23.0 0.0.0.255
network 192.168.34.0 0.0.0.255
network 10.10.3.3 0.0.0.0
quit
quit
display ospf peer brief
R4
undo teriminal monitor
system-view
sysname R4
interface g0/0/01
ip address 192.168.34.4 24
quit
interface g0/0/0
ip address 192.168.45.4 24
quit
interface loopback 0
ip address 10.10.4.4 24
quit
ospf 1 router-id 4.4.4.4
area 0
network 192.168.34.0 0.0.0.255
network 192.168.45.0 0.0.0.255
network 10.10.4.4 0.0.0.0
quit
quit
R5
undo terminal monitor
system-view
sysname R5
interface g0/0/01
ip address 192.168.45.5 24
quit
interface g0/0/0
ip address 192.168.56.5 24
quit
interface loopback 0
ip address 10.10.5.5 32
quit
ospf 1 router-id 5.5.5.5
area 0
network 192.168.45.0 0.0.0.255
network 192.168.56.0 0.0.0.255
network 10.10.5.5 0.0.0.0
quit
quit
display ospf peer brief
R6
undo terminal monital
system-view
sysname R6
interface g0/0/1
ip address 192.168.56.6 24
quit
interface g0/0/0
ip address 192.168.67.6 24
quit
interface loopback 0
ip address 10.10.6.6 32
quit
ospf 1 router-id 6.6.6.6
area 0
network 192.168.56.0 0.0.0.255
network 10.10.6.6 0.0.0.0
quit
quit
bgp 200
peer 192.168.67.7 as-number 300
peer 10.10.2.2 as-number 200
peer 10.10.2.2 connect-interface loopback 0
quit
display ospf peer brief
R7
undo terninal monitor
system-view
sysname R7
interface g0/0/1
ip address 192.168.67.7 24
quit
bgp 300
router-id 7.7.7.7
peer 192.168.67,6 as-number 200
quit
display bgp peer
在上述拓扑中:
R1 和 R2 ,建立 EBGP 邻居关系,通过network 宣告了 10.10.1.1/32
R2 和 R6 ,建立了IBGP 邻居关系,并且互相修改了next-hop-local ,实现路由的正常传输
此时我们可以看到
在R1 上是最优的,所以会传递给 R2,R2传给 R6,R6传给 R7
我们看下 R2到 10.10.6.6 的详细信息:
BGP Peer is 10.10.6.6, remote AS 200 # 邻居是 10.10.6.6 区域是 AS 200
Type: IBGP link # 链路类型是 IBGP
BGP version 4, Remote router ID 192.168.56.6 # 版本是 4 ,是 192.168.56.6 告诉我的
Update-group ID: 0
BGP current state: Established, Up for 00h59m09s # BGP 显示的状态是 Established。
开启时时间的长度为
BGP current event: RecvKeepalive # BGP 当前状态为收到 keepalive 报文
BGP last state: OpenConfirm # BGP 上一个报文为 OpenConfirm
BGP Peer Up count: 1 # 邻居 UP 了几次 越小越好
Received total routes: 1 # 接收了几个路由
Received active routes total: 0 # 收到了几个活动的路由
Advertised total routes: 1 # 向邻居发送了几个路由
Port: Local - 179 Remote - 50983 # 本地端口用的 179 R6 用的随机端口 所以是 6发起的
Configured: Connect-retry Time: 32 sec # 建立不成功的时候多久重新建立一次 32 S
Configured: Active Hold Time: 180 sec Keepalive Time:60 sec # 多久发送一次 keepalive 报文 60S一次,如果 180 S 后还没收到,就表示已断开连接
Received : Active Hold Time: 180 sec # R2向 R6 发送回复报文的时间规则
Negotiated: Active Hold Time: 180 sec Keepalive Time:60 sec # R2与 R6协商后,为 60S 发送一次 keepalive 报文,超过 180 S 后表示超时
Peer optional capabilities: # 当前邻居选项的能力
Peer supports bgp multi-protocol extension # 多协议能力
Peer supports bgp route refresh capability # 路由刷新能力
Peer supports bgp 4-byte-as capability # 4 个字节的 AS 号能力
Address family IPv4 Unicast: advertised and received # IPV4 组播能力已开启可以收发
Received: Total 62 messages # 收到了 62个
Update messages 1
Open messages 1
KeepAlive messages 60
Notification messages 0
Refresh messages 0
Sent: Total 62 messages # 发了 62 个
Update messages 1
Open messages 1
KeepAlive messages 60
Notification messages 0
Refresh messages 0
Authentication type configured: None # 当前的认证,没有做
Last keepalive received: 2022/06/21 09:56:38 UTC-08:00 # 最后一次收到报文的时间
Last keepalive sent : 2022/06/21 09:56:37 UTC-08:00 # 最后一次发报文的时间
Last update received: 2022/06/21 09:52:39 UTC-08:00 #最后一次收到报文的时间
Last update sent : 2022/06/21 08:57:37 UTC-08:00 # 最后一次发报文的时间
Minimum route advertisement interval is 15 seconds # 最小的路由通过 15 S 修改命令后
15 内生效
Optional capabilities:
Route refresh capability has been enabled # 路由刷新能力已开启
4-byte-as capability has been enabled # 4个 AS 字节能力已开启
Peer Preferred Value: 0 # Peer Preferred Value属性未更改
Routing policy configured: # 路由策略做了吗
No routing policy is configured # 路由没做 策略
R6 和 R7 ,建立 EBGP 邻居关系,通过 import-route direct 宣告了 10.10.7.7/32
我们在 R2 上已经可以看到 10.10.7.7 的路由了,但是不是最优的,因为他的下一跳不是 10.10.6.6,这个时候我们就要在 R6 上告诉 去往10.10.2.2 的走 next-hop-local
15s后我们再看
最终,R1 和 R7 都学习到了彼此的路由。但是 R1 ping -a 10.10.1.1 10.10.7.7 依然无法互通。因为中间运营商 AS 200 的内部 路由 R3/R4/R5 没有 AS 100/700 的路由
所以,为了实现 R1 和 R7 的互通,我们必须想办法让: AS 200 的内部路由器得有 AS 100/700 D的路由:
此时我们将 BGP 路由导入到 OSPF 中看看
[R2]ospf 1
[R2-ospf-1]import-route bgp
我们可以看到 只有 10.10.1.1 产生了 5 类的 LSA,没有 10.10.7.7 产生的 LSA
我们提出解决方案:
配置如下:
R2
undo bgp 200
bgp 64523
router-id 2.2.2.2
confederation id 200
confederation peer-as 64524 64526
peer 192.168.12.1 as-number 100
peer 10.10.3.3 as-number 64523
peer 10.10.3.3 connect-interface loopback 0
peer 10.10.3.3 next-hop-loacl
quit
R3
undo bgp 200
bgp 64523
router-id 3.3.3.3
confederation id 200
confederation peer-as 64524 64526
peer 10.10.2.2 as-number 64523
peer 1010.2.2 connect-interface loopback 0
peer 10.10.2.2 next-hop-loacl
peer 10.10.4.4 as-number 64524
peer 10.10.4.4 connect-interface loopback 0
peer 10.10.4.4 next-hop-loacl
peer 10.10.4.4 ebgp-max-hop
quit
R4
undo bgp 200
bgp 64524
router-id 4.4.4.4
confederation id 200
confederation peer-as 64523 64526
peer 10.10.3.3 as-number 64523
peer 10.10.3.3 connect-interface loopback 0
peer 10.10.3.3 next-hop-loacl
peer 10.10.3.3 ebgp-max-hop
peer 10.10.5.5 as-number 64524
peer 10.10.5.5 connect-interface loopback 0
peer 10.10.5.5 next-hop-loacl
quit
R5
undo bgp 200
bgp 64524
router-id 5.5.5.5
confederation id 200
confederation peer-as 64523 64526
peer 10.10.4.4 as-number 64524
peer 10.10.4.4 connect-interface loopback 0
peer 10.10.4.4 next-hop-loacl
peer 10.10.6.6 ebgp-max-hop
peer 10.10.6.6 as-number 64524
peer 10.10.6.6 connect-interface loopback 0
peer 10.10.6.6 next-hop-loacl
quit
R6
undo bgp 200
bgp 64526
router-id 6.6.6.6
confederation id 200
confederation peer-as 64523 64524
peer 10.10.5.5 as-number 64524
peer 10.10.5.5 connect-interface loopback 0
peer 10.10.5.5 next-hop-loacl
peer 10.10.5.5 ebgp-max-hop
peer 192.168.67.7 as-number 300
quit
此时我们看R1/R7是可以互相学习到路由的
在R1用 10.10.1.1 看下是否与 10.10.7.7 互通
但是还是不具备很强的扩展性,所以我们就有了反射器
所有的路由协议,都是为了在设备之间传递“ 最好 ”的路由。但是 IGP 协议 和 BGP 协议选择“ 最好路由 ” 的规则,是不一样的
在 BGP 邻居传递路由的时候,存在很多的路由控制需求,为了实现理货的路由属性控制我们需要:
拓扑
因为该属性是华为的私有属性,并且只在设备本地起作用,即该属性不会随着路由天在 BGP邻居之间互相传递,所以我们需要在 R4上 配置,针对 R3发送过来的路由,将 preferred-value ,属性调大,即可。
R4
bgp 64512
peer 192.168.34.3 preferred-value 3636 # 将邻居发送过来的所有的属性,都改为 3636
quit
但是如此以来,BGP 控制路由就不精准了,如果在 R1上同时宣告了 路由 : 10.10.11.11 /32
此时,还是仅仅希望 R4 去往 10.10.10.10/32 时,选择走 R3 ,去往10.10.11.11/32,选择走 R2,所以,我们只能在 R4上,针对 R3 配置入向策略,但是,首选需要通过 ACL 或者前缀列表,将 。10.10.10.10/32挑选出来,然后通过route-policy 工具 ,将该路由的属性调大。
同时,其他的路由,需要放个,不做任何属性的修改。
步骤1:配置 ACL ,抓取路由 10.10.10.10/32
acl 2000 # 取值范围是 2000-2999,匹配路由时,只能使用基本 ACL
rule 10 permit source 10.10.10.10 0.0.0.0
quit
步骤 2;配置 route-policy ,调用 ACL ,修改 属性 preferred-value 变大
route-policy R3-R4-IN permit node 10
if-match acl 2000
apply preferred-value 3636
quit
route-policy R3-R4-IN permit node 20
quit
步骤3:在 R4 上,针对 邻居 R3 的入方向,调用 route-policy
R4
bgp 64512
peer 192.168.34.3 route-policy R4-R3-IN import
此时,在 R4 的路由表中,仅仅是修改 了 R3 发送过来的 10.10.10.10/32 的 preferred-value 属性,其他属性都没改。所以,结果是
属性介绍
该属性,可以在一个 AS 内部随意传输,但是不可以在 AS之间传输,该属性在设备上的默认取值是 100,但是这个默认值是可以修改的。
那么,什么类型的路由,才会使用 BGP 的 默认的“ 本地优先级 ” 数值呢?
那么什么情况下,才会调整路由的“ 本地优先级”?
即我们想要控制一个数据包离开自己的 AS 的时候使用的数据转发路径,就可以通过调整该属性来实现。
案例配置: 要求 AS 100 内部所有设备访问 R4 ,默认都选择出口设备 R3
因为 R4 将路由发送给 R2/R3 的时候,他们之间是 EBGP 邻居。所以 R4 发送的这个 BGP 路由中,是不携带属性 -loca-perference ,所以默认情况下,R4 传递给 R2/R3 的路由,带了 R2/R3 本地默认的本地优先级,即100
如果我们在 R3 上,针对 R4 这个外部邻居,配置一个入向策略;
将R4 的路由 10.10.40.40/32 抓取
将该路由的本地优先级,掉政委大于 1000,比如 333
所以,我们在 R3 的本地数据库中看到的 R4 的路由就是 333.,同时,默认情况下IBGP 邻居之间传递路由的时候,属性本地优先级是不会变化的。所以,AS 100 的内部路由器,与 R2 /R3 建立 BGP 邻居关系的时候,学习到:
10.10.40.40/32 --R2 本地优先级是 100
10.10.40.40/32 --R3 本地优先级是 333
所以,都将 R3 作为 访问 R4 是,首选的 “ 主出口 ” 设备。
我们之所以不选择在 R2 或者 R3 上,针对每个 IBGP 邻居设备配置一个出向策略,就是因为,太麻烦,即该技术方案不具备可扩展性。所以,上述的方案正确的配置方法是:
R3:
acl 2040
rule 10 permit source 10.10.40.40 0.0.0.0
quit
route-policy R3-R4-IN permit node 10
if-match acl 2040
apply local-preference 333
quit
bgp 100
peer 192.168.34.4 route-policy R3-R4-IN import
属性介绍
该属性描述的是:当前的 BGP 路由条目,在 BGP 数据库中,是不是自己本地产生的:
案例配置
在 R4 上,进行测试:
interface loopback 4
ip address 10.10.44.44 32
quit
bgp 64512
impor-route direct # 将上诉的直连路由,导入进 BGP 数据库,会出现 10.10.44.44/32 的路由
summary automatic # 开启自动汇总,所以数据库中就会出现 10.0.0.0/8 的路由
自动汇总显示字样
aggregate 10.10.0.0 255.255.0.0 # 配置手动汇总,所以数据库中会出现
10.10.0.0/16的路由
[R4]display bgp routing-table 10.10.0.0 255.255.0.0
BGP local router ID : 192.168.45.4 # BGP本地的router-id
Local AS number : 64512 #本地 AS 的号码
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 10.10.0.0/16:
Aggregated route. 手动汇总
Route Duration: 00h00m49s
Direct Out-interface: NULL0
Original nexthop: 127.0.0.1
Qos information : 0x0
AS-path Nil, origin incomplete, pref-val 0, valid, local, best, select, active,
pre 255
Aggregator: AS 200, Aggregator ID 192.168.45.4
Advertised to such 3 peers:
192.168.24.2
192.168.34.3
10.10.5.5
在 BGP 数据中的每个条目的详细信息中,如果显示 “ local ”,则表示该路由是本地产生的!
属性介绍
该属性包含的 是 : BGP 路由在传递的过程中,前后依次“ 经过 /穿越 ” 的 AS 的有序组合,比较该属性的时候,比较的是该属性的长度,即:该属性中包含的 AS 号得数量。
as-path 的长度,越短越好,该属性的变化,仅仅发生在 ENGP 邻居之间,
as-path 的形成过程:
案例配置:希望通过比较 as-path 属性,让 R4 去往 10.10.11.11 /32 选择 R3作为下一跳
默认情况下,R4去往 10.10.11.11/32 的时候,无论是经过R2,还是 R3 ,这两个 路径的 as-path 都是 100,所以长度相同,都是:1
所以,为了满足要求,我们可以想尽办法,让:下一跳为 R2 的路由,as-path 长度增加
因此,我们可以选择在 R2 配置;针对邻居 R4 的出方向,抓取 10.10.11.11/32 ,增加 as-path
我们可以选在在 R4 配置;针对邻居 R2 的入方向,抓取 10.10.11.11/32 , 增加 as-path
方法一:在 R2 上,针对 R4 ,配置出向策略,增加 as-path 长度
interface loopback 11
ip address 10.10.11.11 32
quit
acl 2011
rule 10 permit source 10.10.11.11 0.0.0.0
quit
route-policy R2-R4-OUT permit node 10
if-match acl 2011
apply as-path 222 additive # 将原来的 as-path 的基础上,额外添加 as 222
quit
bgp 100
peer 192.168.24.4 routr-policy R2-R4-OUT export
quit
验证结果
首先执行的 route-policy ,添加了 222
然后离开 R2 的时候,添加 了 R2 所属于的 AS 100
方法二:在 R4 上,针对 R2 ,配置入向策略,增加 as-path 长度
acl 2011
rule 10 permit source 10.10.11.11 0.0.0.0
quit
route-policy R4-R2-IN permit node 10
if-match acl 2011
apply as-path 444 additive
quit
bgp 64512
peer 192.168.24.2 route-policy R4-R2-IN import
quit
验证结果
另外,需要注意的是:
as-path 的另外一个作用:在 EBGP邻居之间防止路由环路的发送,即: 从 EBGP 邻居学习过来的路由,要检查改路由的 as-path 属性,如果在其中发现了自己的 as-path ,则拒绝接收该路由。因为一旦接收了,就形成了 BGP 环路
如果想要在 BGP 邻居之间 ,添加 as-path 的属性,所添加的 AS 号,不能随便写。应该写
重要 :路由策略和数据库的关系
属性介绍
该属性的作用是告知我们 :该路由当年在 BGP 路由器上以怎样的方式宣告进入到 BGP 协议的,起源属性的代码有三种,优先级依次降低:i > e > ?
该属性,可以随着 BGP 路由传递到任何地方: IBGP 和 EBGP 之间都可以传递该路由。
所以,针对该属性的策略,我们可以:
案例配置:在 R1 去往 192.168.45.0/24 ,通过比较起源属性,选择 R3 作为下一跳
R1:针对 R3 配置一个入向策略,将 192.168.45.0/24 的起源属性修改为 i
acl 2045
rule 10 permit source 192.168.45.0 0.0.0.255
quit
route-polciy R1-R3-IN permit node 10
if-match acl 2045
apply origin igp
quit
route-policy R1-R3-IN permit node 20
quit
bgp 100
peer 10.10.3.3 route-policy R1-R3-IN import
quit
属性介绍
该属性的全称叫做:多出口鉴别器( multi-exit discriminator )
在 BGP 路由条目中,表示的是 cost ( 开销 ) ,但是该参数,默认是 0
该属性进行传输的时候,只能在之间相邻的两个 AS 之间,互相传递,不能跨越 AS 进行传输
该属性既然可以在邻居之间互相传递,所以针对该属性,可以配置一个入向策略,也可以配置出策略,比较该属性的时候,数值越小越好,小了,表示的是去往一个目标网段的距离小
但是,并不是所有的路由条目之间都有资格进行该属性的比较的:
只有当两个 BGP 路由,来自于同一个 邻居 AS 的时候,才可以比较该属性
如果两个路由的 “ 邻居 AS 不同 ” ,则直接越过该属性,比较下一个属性。所谓的“ 邻居 AS ”指的是,“ 一个 as-path ” 最左边的 这个 AS 号
通常情况下,该属性的应用场景是:
案例配置:在 R2/R3 配置 MED 属性,影响 邻居 AS 200 的数据,选择 R3 进入到 AS 100
因为 MED 属性,默认都是 0。所以,我们只要将 R2 发送给 R4 的 BGP 路由的 MED 属性调大,那么 R4 就自然的会选择“ 去往 R1 的时候,选择 R3 ”
R2
acl 2011
rule 10 permit source 10.10.11.11 0.0.0.0
quit
route-policy R2-R4-OUT permit node 10
if-match acl 2011
apply cost 200
quit
route-policy R2-R4-OUT permit node 20
quit
bgp 100
peer 192.168.24.4 route-policy R2-R4-OUT export
quit
验证
如果 BGP 路由跨越了 AS 进行传递了,那么该属性原有的数值,就会丢失,面临一个丢失了 MED 属性的 BGP 路由,路由器会给该路由条目分配一个默认的 MED,即 0
但是,这样我么也可以通过这样一个命令:
bgp 800
bsetroute med-none-as-maximum # 当 MED 属性丢失时,直接按4292967295来计算
另外,如果在某些场景下,我们特别需要:及时邻居 AS 不相同,也得进行 MED 的比较,那么我们可以配置以下命令:
R4
bgp 64512
compare-different-as-med # 永远比较 MED 属性
BGP local router ID : 192.168.12.1
Local AS number : 100
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 10.0.0.0/8:
From: 10.10.2.2 (192.168.24.2)
Route Duration: 00h00m15s
Relay IP Nexthop: 192.168.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.10.2.2
Qos information : 0x0
AS-path 200, origin incomplete, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 1
Aggregator: AS 200, Aggregator ID 192.168.45.4
Not advertised to any peer yet
BGP routing table entry information of 10.0.0.0/8:
From: 10.10.3.3 (192.168.34.3)
Route Duration: 00h00m05s
Relay IP Nexthop: 192.168.13.3
Relay IP Out-Interface: GigabitEthernet0/0/2
Original nexthop: 10.10.3.3
Qos information : 0x0
AS-path 200, origin incomplete, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 1, not preferred for router ID
Aggregator: AS 200, Aggregator ID 192.168.45.4
Not advertised to any peer yet
属性介绍
只有当网络中存在路由反射器的情况下,并且当前查看的路由,是被' 反射” 过的。那么这个路由属性中,才会有 “ cluster-list ”属性
该属性中,包含的是路由在发射过程中,所经过的 “ cluster- 簇 ” 的名。那么,所谓的“ 簇 ”指的就是“ 路由反射器和客户端 ” 所组成的一个传输网络的范围。 那么莫仍情况下 簇 的名字就是路由反射器的 router-id ,但是可以人为修改。
该属性除了“ 影响路由选路 ” 以外,另外一个重要的作用就是: 在 簇之间防止环路! 即
当路由反射器收到一个路由的时候,如果发现其中包含了自己的 簇 ID 。则说明该路由在之前的传递过程中已经经过这歌反射器。如果再次接收的话,就会出现环路了。
所以:当发现簇列表中包含了自己的簇 ID 的时候,拒绝接收该路由
[R5]bgp 64512
[R5-bgp]peer 10.10.4.4 reflect-client
案例配置
R1:
interface loopback 9
ip address 192.168.99.99 32
R1:
interface loopback 9
ip address 192.168.99.99 32
如果想要修改 cluster id ,可以使用下面的命令:
R5: bgp 64512
peer 10.10.4.4 reflect-client
reflector cluster-id 55.1.1.1
quit
BGP local router ID : 6.6.6.6
Local AS number : 64512
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 192.168.99.99/32:
From: 192.168.67.7 (192.168.78.7) # 路由的更新源
Route Duration: 00h33m05s
Relay IP Nexthop: 192.168.67.7 # 经过递归查询后,所确定下来的下一跳 IP 地址
Relay IP Out-Interface: GigabitEthernet0/0/0 # 经过递归查询后,数据出接口
Original nexthop: 192.168.78.8 # 路由条目的下一跳 IP 地址
Qos information : 0x0
AS-path (64517) 800, origin igp, MED 0, localpref 100, pref-val 0, valid, exter
nal-confed, best, select, active, pre 255 # 路由属性
Advertised to such 1 peers:
10.10.5.5
BGP routing table entry information of 192.168.99.99/32:
From: 10.10.5.5 (192.168.56.5)
Route Duration: 00h00m06s
Relay IP Nexthop: 192.168.56.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 10.10.4.4
Qos information : 0x0
AS-path 100, origin igp, localpref 100, pref-val 0, valid, internal-confed, pre
255, IGP cost 2, not preferred for IGP cost # 没有优选的原因是因为 IGP cost
Originator: 4.4.4.4 # 起源 ID ,用于在一个 簇内,防止路由环路发生
Cluster list: 55.1.1.1 # 簇列表,用于在不同的 簇之间,防止环路
Not advertised to any peer yet
当比较路由条目的属性的时候,如果属性中存在 originator ID 那么就直接比较该参数,越小越好,如果没有该参数的话,则比较 router-id ,越小越好
其实,当 BGP 路由前面 8 个属性,都完全相同的时候,BGP 协议就已经认为多个路由是完全相同的了,但是,对于 BGO 而言,所发送出去的路由,永远是“ 只有 1 个 ” ,即在数据库中的那个符号 “ > ”,永远只有 1个。
如果我们对 BGP 协议,开启了路由表的“ 负载均衡 ” 功能,那么,只要前面 8 个原则相同,此时的多个路由条目,都会放入到路由表中。但是,被传输出去的。依然是“ 一个 ”。
BGP 协议,默认情况下没有开启负载均衡,如果想要开启的话,需要通过下面的命令:
BGP 100
maximum loac-balancing 3 # 指的是针对任何一个 BGP 路由,在路由表中下一跳 I呸 地址最多可以 3 个,并且该命令针对 IBGP 路由和 EBGP 路由,都起作用
maximum loac-balancing ibgp 4 # 仅仅对 BGP 的内部路由,开启负载均衡
maximum loac-balancing EBGP 4 # 仅仅对 BGP 的外部路由,开启负载均衡
maximum loac-balancing 1 # 这就是 “ 关闭负载均衡 ”
额外需要注意的是:
形成负载均衡的多个 BGP 路由器,他们的 as-path 属性,不能仅仅是长度相同,其中的 as-path 包含的每个 as-path 的顺序,都是完全相同的。
在 路由表中,BGP 协议的路由,和其他协议的路由,所关注的属性,都是相同的
R4 :
bgp 64512
preference 199 188 166 # 外部 BGP 优先级调整为 199
内部 BGP 优先级调整为 188
本地产生的 BGP 优先级调整为 166 ( 即汇总的 )
[R4-bgp]preference 199 188 166
在 R4 上,仅仅修改 10.10.55.55/32 的路由优先级为 222,其他的保持默认
acl 2055
rule 10 permit source10.10.11.11 0.0.0.0
quit
route-policy PRE permit source node 10
if-match acl 2055
apply preferece 222
quit
bgp 64512
preference route-policy PRE
quit
匹配路由
但是,反过来看:上诉的前缀列表 HAHA ,到底匹配了多个个路由呢?
应该是匹配了2 的 4 次方,16 个路由。但是这个 16 个路由,前面的 20 BIT ,都是相同的
但是网络掩码是 24 位,所以中间还是有 4 BIT 。是可以随意变化的,所以,一共有 2 的 4 次方。16个路由。
并且,还是连续的 16 个网段
所以,可以看到
但是,对于 ACL 而言,就是完全可以实现同时匹配那些不连续的路由条目。所以,ACL 匹配多个路由条目的时候,还是比较灵活的。
两者相同的点
团体属性,默认情况下,是不会在邻居之间自动传输的,如果想要在邻居之间传输的话,需要使用命令:
bgp ***
peer x.x.x.x advertise-communtiy ---> 向对方“ 发 ” 团体属性!
调用策略
R6-route-policy]if
[R6-route-policy]if-match ?
acl Specify an ACL
as-path-filter BGP AS path list
community-filter Match BGP community filter
cost Match metric of route
extcommunity-filter Match BGP/VPN extended community filter
interface Specify the interface matching the first hop of routes
ip IP information
ip-prefix Specify an address prefix-list
ipv6 IPv6 Information
mpls-label Give the Label
rd-filter Route-distinguisher filter
route-type Match route-type of route
tag Match tag of route
验证结果
在 BGP 协议中的路由过滤,都是针对“ 数据库 ” 的,所以要查看最终的效果,可以直接查看数据库:
针对所有邻居产生默认路由
即自己本地必须存在默认路由并且通过 network 的方式,将路由宣告进入到 BGP 的数据库,此时,BGP 协议,就会将该默认路由,发送给所有的 BGP 邻居
针对特定邻居产生默认路由
例如 : 在 R2 上针对 R1 这个特定的邻居产生默认路由:
bgp 100
peer 10.10.1.1 default-route-advertise --> 强制性的产生默认路由或者
peer 10.10.1.1 default-route-advertise
conditional-route-match-all 》》有条件的产生默认路由,并且要求该命令后面跟的 所有的条件路由都同时存在,此时才能向邻居发送默认路由
conditional-route-match-any ...#有条件的产生默认路由,此时的route-policy 匹 配的路由如果存在于本地的路由表中,那么就可以向邻居发送默认路由
可以在任何一个 BGP 路由器上没针对任何类型的 BGP 路由,配置手动汇总;并且汇总之后的结果,也很灵活,想怎么汇总就怎么汇总。
拓扑
配置如下:
基本配置
R1
undo terminal monitor
system-view
sysname R1
interface g0/0/0
ip address 192.168.14.1 24
quit
interface g0/0/1
ip address 192.168.16.1 24
quit
interface loopback 0
ip address 10.10.1.1 32
quit
bgp 100
router-id 1.1.1.1
peer 192.168.14.4 as-number 45
peer 192.168.16.6 as-number 45
network 10.10.1.1 32
quit
R2
undo terminal monitor
system-view
sysname R2
interface g0/0/0
ip address 192.168.24.2 24
quit
interface g0/0/1
ip address 192.168.26.2 24
quit
interface loopback 0
ip address 10.10.2.2 32
quit
bgp 200
router-id 2.2.2.2
network 10.10.2.2 32
peer 192.168.24.4 as-number 45
peer 192.168.26.6 as-number 45
quit
R3
undo terminal monitor
system-view
sysname R3
interface g0/0/0
ip address 192.168.34.3 24
quit
interface g0/0/1
ip address 192.168.36.3 24
quit
interface loopback 0
ip address 10.10.3.3 32
quit
bgp 300
router-id 3.3.3.3
network 10.10.3.3 32
peer 192.168.34.4 as-number 45
peer 192.16836.6 as-number 45
quit
R4
undo terminal monitor
system-view
sysname R4
interface g0/0/0
ip address 192.168.14.4 24
quit
interface g0/0/01
ip address 192.168.24.4 24
quit
interface g0/0/02
ip address 192.168.34.4 24
quit
interface g4/0/0
ip address 192.168.45.4 24
quit
interface loopback 0
ip address 10.10.4.4 32
quit
bgp 45
router-id 4.4.4.4
network 10.10.4.4 32
peer 192.168.14.1 as-number 100
peer 192.168.24.2 as-number 200
peer 192.168.34.3 as-number 300
peer 192.168.45.5 as-number 45
quit
R5
undo terminal monitor
system-view
sysname R5
interface g0/0/1
ip address 192.168.45.5 24
quit
interface g0/0/2
ip address 192.168.56.5 24
quit
interface loopback 0
ip address 10.10.5.5 32
quit
bgp 45
router-id 5.5.5.5
network 10.10.5.5 32
peer 192.168.45.4 as-number 45
peer 192.168.56.6 u tm,as-number 45
quit
R6
undo terminal monitor
system-view
sysname R6
interface g0/0/0
ip address 192.168.16.6 24
quit
interface g0/0/01
ip address 192.168.26.6 24
quit
interface g0/0/02
ip address 192.168.36.6 24
quit
interface g4/0/0
ip address 192.168.56.6 24
quit
interface loopback 0
ip address 10.10.6.6 32
quit
bgp 45
router-id 6.6.6.6
network 10.10.6.6 32
peer 192.168.16.1 as-number 100
peer 192.168.26.2 as-number 200
peer 192.168.36.3 as-number 300
peer 192.168.56.5 as-number 45
quit
R4上,针对 10.10.1.1/32 ,10.10.2.2/32 ,10.10.3.3/32 进行汇总,汇总后的路由条目是: 10.10.0.0/16
手动汇总,配置命令如下
[R4-bgp]aggregate 10.10.0.0 16 ?
as-set Generate the route with AS-SET path-attribute
attribute-policy Set aggregation attributes
detail-suppressed Filter more detail route from updates
origin-policy Filter the originate routes of the aggregate
suppress-policy Filter more detail route from updates through a Routing
policy
重要字段解释
detail-suppressed # 表示发送汇总路由的时候,“ 抑制 ” 所有的明细路由
suppress-policy # 表示基于该命令后面的 “ route-policy ” 包含的规则,进行有选择的抑制,不在 是“ 抑制所有明细路由 ”,优先级比 detail-suppressed 高。
as-set # 表示让汇总路由,继承所有明细路由的 “ as-path ” 属性中包含的 AS 号,如此以来可以 防止汇总路由在不同的 AS 之间,形成环路{ 该命令在汇总时,是必选命令 }
attribute-policy # 该参数后面跟的是,某一个 route-policy ,凡是在路由器上存在该 route-policy 所包含的明细路由,才能产生汇总,如果没有这些路由存在,就无法产生汇 总,所以这个参数也可以理解为:有条件的产生 BGP 汇总路由。
在 R4 上,直接进行汇总,不跟任何参数:发现汇总和明细都发
R4
bgp 45
aggregate 10.10.0.0 16
R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.10.0.0/16 127.0.0.1 0 i
*> 10.10.1.1/32 192.168.14.1 0 0 100i
*> 10.10.2.2/32 192.168.24.2 0 0 200i
*> 10.10.3.3/32 192.168.34.3 0 0 300i
*> 10.10.4.4/32 0.0.0.0 0 0 i
*>i 10.10.5.5/32 192.168.45.5 0 100 0 i
[R4]
此时我们去 R5 上查看 ,只有汇总路由,没有明细路由
在 R4上进行汇总,但是对部分路由进行抑制,比如: 仅仅抑制 10.10.2.2
acl 2002
rule permit source 10.10.2.2 0.0.0
quit
route-policy A permit node 10
if-match acl 2002
quit
bgp 45
aggregate 10.10.0.0 16 suppress-policy A
[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 6
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.10.0.0/16 127.0.0.1 0 i
*> 10.10.1.1/32 192.168.14.1 0 0 100i
s> 10.10.2.2/32 192.168.24.2 0 0 200i
*> 10.10.3.3/32 192.168.34.3 0 0 300i
*> 10.10.4.4/32 0.0.0.0 0 0 i
*>i 10.10.5.5/32 192.168.45.5 0 100 0 i
在 R4 上进行汇总以后,虽然汇总路由继承了很多类型的 BGP 属性,但是明细路由的 as-path 属性却没有继承,如此一来,导致 as-path 属性丢失,这样导致的结果,有可能是:让形成的 BGP 汇总路由,有可能形成环路
所以,在配置 BGP 汇总路由的时候,一定不要丢失该属性,所以需要添加 as-set 参数
配置汇总,不带 as-set 参数
R4
bgp 45
aggregate 10.10.0.0 16
此时,汇总路由的 as-path 是空的
R4
bgp 45
aggregate 10.10.0.0 16 as-set
此时,汇总路由的 as-path 不是空的,使用 { }将所有的明细路由的 as-path 全都包含起来
这种通过{ } 来包含的 as ,我们也称之为 as-set ( as 结合)
在 as-set 中,虽然包含的也是公有 as ,但是这些 as 是没有仍会顺序而言的,
但是,as-path 中的每个 as 号,都是有严格的顺序的,as-set 会在公网上,随着 bgp 路由一起传递。
假如说,我们在 R9 上,看到这样一个 as-path 的路由
999 32 659 { 100, 200, 300}
问题1:该路由是否被汇总过?------》 是的
问题 2 : 如果被汇总了,是在那个 as 进行的汇总 ? as 659
问题 3: 被汇总的明细路由,曾经穿越过那些 as ? 100/200/300
在 R4 上,进行 BGP 汇总,既然很多属性的继承规则,非常麻烦,所以我们可以基于自己的路由控制需求,明确的配置一些属性,通过 attribute-policy
例如,我们将 汇总路由 10.10.0.0/16 的 MED 设置为 2000,本地优先级设置为 444 ,起源属性为 1 ,那么配置如下
route-policy C permit node 10
apply cost 2000
apply local-preference 444
apply arigin igp
quit
bgp 45
aggregate 10.10.0.0 16 attribute-policy C
在 R4 上,针对 BGP 路由,进行有条件的汇总:即并不是任何一个明细路由存在都可以形成汇总 的,只有我们关注的明细路由存在,才可以形成汇总,使用的参数是 :origin-policy
比如:我们在 R4 上,希望明细路由 10.10.3.3/32 存在的时候,才可以形成汇总命令如下
ip ip-prefix 3.3 premit 10.10.3.3 32
route-polict D permit node 10
if-match ip-prefix 3.3
quit
bgp 45
aggregate 10.10.0.0 16 arigin-policy 0
首先我们看下 R 4 的路由
然后我们在R3 上
[R3-LoopBack0]undo ip address
然后可以在 R4 上看到 汇总路由消失了
重新在 R3 上添加 10.10.3.3 32
该特性,在 BGP 路由器上,默认是关闭的,如果开启的话,也仅仅是针对 EBGP 邻居之间的路由翻滚起作用,即:当 EBGP 邻居之间传递的路由非常不稳定,总是平凡的 up/down ,那么开启了 BGP 惩罚机制的 EBGP 邻居路由器,就回为这个 不稳定的路由,赋予 1个惩罚值,1000 ,每翻滚一次,惩罚值都会增加 1000,当惩罚值增加到 一定数值以后,改路由就开始被惩罚,前面的标志就变成 D,这个惩罚值的标准,默认是 2000.
但是该惩罚值也会随着时间的推移,自动的降低,每隔一段时间都会降低一次,并且每次都会降低一半。这个时间内,我们称之为半衰期,默认是 15分钟
如果翻滚导致的惩罚值增加的速度很慢,衰减的速度又很快,该路由的惩罚值一直都是在降低的,如果降低到一个标准,该路由就可以被重新使用了,这个标准称之为重用阈值,默认 750,一旦被重用了,那么该路由就可以放入到自己的路由表,同时也可以发送给其他的邻居设备。
比如 R1 的链路非常的不稳定,严重影响了R4 的稳定性,所以在 R4 上开启 BGP 尘封机制的命令是:
bgp 45
[R4]bgp 45
[R4-bgp]dampening ?
INTEGER<1-45> Half-life time (in minutes) for the penalty when reachable
route-policy Routing policy to specify criteria for dampening
# 如果直接回车,使用的就都是默认的参数了,如果想要修改默认参数的话,各个参数顺序如下
[R4-bgp]dampening 5 700 3000 5000
为了看到效果,我们可以在 R1 上;不断删除 loopback 0 ,然后重新添加 loopback 0 ,多来几次,然后查看 R4 得 BGP 数据库:
如果想要查看当前得 BGP 惩罚路由得具体信息,可以使用命令:
MD5 认证
加密对象是 TCP 连接,不是 BGP 报文;每次针对一个邻居,只能使用 1个密码;
R1 和 R4 之间的 MD5 认证:
R1
bgp 100
peer 192.168.14.4 password cipher HCIE
R4
bgp 45
peer 192.168.14.0 password cipher HCIE
key-chain 认证
加密对象和 MD5 相同,都是针对 TCP 连接,不是针对 BGP 报文。但是 key-chian 工具可以同时包含多个密码,并且可以基于不同的时间端,自动的更换密码,非常的方便和安全。
R2和R4 之间配置 key-chain 认证,在 2022年6月 26日。0 点至 3点之间。分别使用不同的密码进行加密和解密;
R2
[R2]keychain ABC mode absolute
[R2-keychain]key-id 1
[R2-keychain-keyid-1]send-time utc 00:00 2022-6-26 to 03:00 2022-6-26
[R2-keychain-keyid-1]qUIT
[R2-keychain]key-id 2
[R2-keychain-keyid-2]key-string HCIA
[R2-keychain-keyid-2]receive-time utc 00:00 2022-6-26 to 03:00 2022-6-26
[R2-keychain-keyid-2]quit
R4
[R4]keychain AAA mode absolute
[R4-keychain]ke
[R4-keychain]key-id 1
[R4-keychain-keyid-1]key-string HCIE
[R4-keychain-keyid-1]receive-time utc 00:00 2022-6-26 to 03:00 2022-6-26
[R4-keychain-keyid-1]quit
[R4-keychain]key-id 2
[R4-keychain-keyid-2]key-string HCIA
[R4-keychain-keyid-2]send-time utc 00:00 2022-6-26 to 03:00 2022-6-26
[R4-keychain-keyid-2]quit
[R4-keychain]quit
[R4]bgp 45
[R4-bgp]peer 192.168.24.2 keychain AAA
[R4-bgp]quit
[R4]
注意:
以上钥匙中所使用的时间,是根据配置设备的本地时间来计算的,所以,应该确保整个网络中的所有设备的时钟应该都是相同的,想要查看设备的时钟,使用命令是
display clack
GTSM ( 该机制不对 BGP 报文或者 TCP 连接进行加密,但是会检查 BGP 保温你得合法性)
该机制,主要是通过检查 BGP 邻居之间发送的 BGP 报文的 TTL 值,是不是在 GTSM 机制所规定的“ 合法的 TTL "范围内,如果不在的话,默认行为是丢弃这样的 TTL 报文。
peer x,x.x.x valid-ttl-hops
注意:
默认情况下,IBGP 邻居之间的 BGP 报文,TTL 默认是 255
默认情况下,EBGP 邻居之间的 BGP 报文,TTL 默认是 1
所谓的对等体组,指的是 peer-group,即,将很多很多具有相同配置的邻居,可以加入到同一个组中;然后我们的命令,仅仅是针对这个“ 组 ” 配置。然后属于该组的所有邻居设备。都可以共享使用这些所有的 BGP 配置命令,所以带来的好处有两个:
在上图中,在 R1上,与 AS 200 的边界设备,建立邻居的时候,因为对他们的配置命令都是类似的,所以可以使用对等体组
BGP peer-group: as-200 # 对等体组的名字
Remote AS: 200 # 对等体组属于的 as 号
Authentication type configured: None # 为对等体组配置的认证类型
ype : external # 对等体组的类型是 EBGP
PeerSession Members:
192.168.12.2 192.168.13.3
Peer Members:
192.168.12.2 192.168.13.3
查看对等体组的详细信息
拓扑
在上诉得拓扑中,我们在 AS 200 的边界设备 ( ASBR )--R2/R3,针对 AS 100 发过来的路由,配置入项策略,干掉 10.10.12.12/32为了实现路由的精准匹配,所以我们在 R2/R3 上,针对 R1 ,使用 ip-prefix 匹配 10.10.12.12 /32 配置命令如下:
在 R1 上宣告 多个 测试路由:
R1
[R1]interface LoopBack 0
[R1-LoopBack0]ip address 10.10.10.10 32
[R1-LoopBack0]quit
[R1]interface LoopBack 11
[R1-LoopBack11]ip address 10.10.11.11 32
[R1-LoopBack11]int loopback 12
[R1-LoopBack12]ip address 10.10.12.12 32
[R1-LoopBack12]quit
[R1]bgp 100
[R1-bgp]network 10.10.10.10 32
[R1-bgp]network 10.10.11.11 32
[R1-bgp]network 10.10.13.13 32
R2
[R2]ip ip-prefix 12.12 deny 10.10.12.12 32
[R2]ip ip-prefix 12.12 permit 0.0.0.0 0 less-equal 32
[R2]bgp 200
[R2-bgp]peer 192.168.12.1 ip-prefix 12.12 import
R3
[R3]ip ip-prefix 12.12 deny 10.10.12.12 32
[R3]ip ip-prefix 12.12 permit 0.0.0.0 0 less-equal 32
[R3-bgp]quit
[R3]bgp 200
[R3-bgp]peer 192.168.13.1 ip-prefix 12.12 import
[R3-bgp]qUIT
此时在 R2/R3 上的 BGP 数据库如下:以 R2 为例
但是,虽然 R2/R3 不接收10.10.12.12/32 这个路由,但是 R1 其实依然会发送该路由的,
那么,导致的结果就是:有一个废路由,无情的占用了 AS 之间的宝贵的链路的带宽资源,但所以,为了防止这些” 不想要的 路由“ 对中间链路资源的占用,我们可以考虑:在 R1 上这蒙迪欧 R2/R3 配置出向策略。
我们是 AS200 的网络工程师,是没有权限操作合作运营商-AS 100 的路由器的,所以我们,不能去配置 R1 ,也不能要求 AS 100的工程师去配置 R1,但是我们可以哎 AS100/AS 200 之间,建立 BGP 邻居关系的时候,提前协商号 BGP 的一种可选能力------ ORP
该能力:可以将自身所配置的 用作“ 入向策略 ”“ 前缀列表 ” 这个工具,发送给对端的 EBGP 邻居 R1,使用相同的 “ 前缀列表 ” ,用作" 出向策略 ",从而影响了 R1 的发送路由的结果,从而节省了 A100/ AS 200 之间的链路资源
配置如下:
在 R2 / R3上,针对 R1 ,开启 ORF 功能
R2
bgp 200
[R2-bgp]peer 192.168.12.1 capability-advertise orf ip-prefix both
R3
bgp 200
[R3-bgp]peer 192.168.13.1 capability-advertise orf ip-prefix both
在 R1 上,针对 R2/ R3 ,开启 ORF 功能
R1
bgp 100
[R1-bgp]peer as-200 capability-advertise orf ip-prefix both
配置完上述的命之后,批次之间的 BGP 邻居关系会端口,是因为:BGP 邻居之间的能力协商靠的是 OPEN 报文,而该报文只有在建立 TCP 连接之后才会发送,所以,一旦输入 ORF 能力协商,两边的 原有TCP 连接会断开,当再次建立的时候,才会发送 Open 报文。等待邻居从新建立之后,我们再次在 R1 上验证:发送个给 R2 的路由,已经不包含 10.10.12.12/32了。
R1 之所以在发送路由的时候,就直接干掉了 10.10.12.12/32 ,是因为: R1 收到了 R2 发送过来的 ip-prefix 并且用在了 R1 对R2 的出向: