BGP(边界网关协议)是很重要的路由协议,由于其路径属性我将其与RIP(路由信息协议)一起归类在DV协议大类。
ps.由于是XMIND转DOC复制到CSDN。。。图片全部上传失败。。服了(ˉ▽ˉ;)...
pps.导图原图还超过5MB图片大小限制如下。凑活看下。。
由于BGP实在是太重要了,后面可能考虑与DV协议剥离,先挖个坑吧
目录
触发更新-- ip rip triggered--ser口下开启--单播
passive- interface-只收不发路由更新表,不将本机路由宣告出去
单播宣告:neighbor 1.1.1.1【结合passive-interface】
no auto-summary//不自动汇聚宣告,防止掩码信息消失导致的路由黑洞
ip default-network 12.0.0.0(写成主类)如写成ip default-network 12.1.1.0
External BGP/Internal BGP(内部BGP/外部BGP)
BGP防环机制iBGP防环机制-水平分割eBGP防环机制-ASpath
nei 1.1.1.1 255.255.255.0 remote-as 200 //指定邻居 和 AS
network 1.1.1.1 ma 255.255.255.255 //产生路由不激活接口
通过lookback口建立邻居nei 1.1.1.1 update-souce lookback0
nei 1.1.1.1 ebgp-multohop 2 //eBGP需要注意跳数
nei 1.1.1.1 next-hop-self //eBGP通告里注意改变下一跳
BGP只能单播发现邻居,建立邻居与宣告命令分离,与IGP区分
no bgp default ipv4-uncast //意味着除ipv4外也可以承载多协议,须在特定地址族下激活
bgp asnotation dot //以dot型显示AS号,默认整数型
bgp log-neighbor-change //显示bgp相关状态
DV【距离矢量】特点
路由汇总
DV协议可以在任何地方进行路由汇总
- 传递的是全网路由表
LS协议只能由边界进行路由汇总
- 传递的是邻居状态
RIP
全量更新--30秒全量更新
UDP 520
触发更新-- ip rip triggered--ser口下开启--单播
RIP防环机制
水平分割-不反向传递
- no ip-split-horizon
16hop-防止过度传递
路由毒化-16跳
毒性反转-反水平分割
报文
request-respond
UDP520
224.0.0.9
单播邻居
passive- interface-只收不发路由更新表,不将本机路由宣告出去
单播宣告:neighbor 1.1.1.1【结合passive-interface】
show
show ip rip database
show ip rip
config
route rip
no auto-summary//不自动汇聚宣告,防止掩码信息消失导致的路由黑洞
version 2
network 2.2.2.2
- network不支持tag,重分布支持
- network 0.0.0.0 不发request
redistribute static
default-information originate
ip default-network 12.0.0.0(写成主类)如写成ip default-network 12.1.1.0
问题
收敛慢--传递整张表
错误传递-基于传闻的路由协议
定期发送-路由环路【rip】
EIGRP
命令
show
- show ip ei nei
• UPDATE
• HELLO
- show ip ei topology
- clear ip ri nei s0/1
config
- nei 1.1.1.1 f0/1
- clear ip eigrp 100
- router ei 100
- net 1.1.1.0【宣告网络】
• 宣告公网IP到EIGRP tunnel会导致链路翻滚
- net 1.2.3.4【宣告接口】
- no auto-summary【15.X默认关闭】非主类宣告
- nei 1.2.3.4 f0/0
报文
报文内容
- TTL=2
- 9个k值
HELLO
- 第一个hello表示邻居建立成功
update
- next hop
• next-hop是AS的下一跳,不是路由的下一跳
• 内部ibgp需要达到外部的ebgp需要邻居改next-hop
- netmask
- sequence
- acknowledge【除hello】
- 不一定有路由信息,第一个没有仅表示开始传输
query
- 路由查询,请求
reply
- 响应请求,单播回包
ack
状态机
hello时间小于死亡时间【5-15】
- 小于1T[1.54Mbps]hello60秒
RTP实时传输协议-seq=ack【单播】
- 显式ack
• 除HELLO外均需要ACK
- 隐式ack
• 工作报文如update替代
EIGRP防环机制
水平分割
- 隧道口关闭水平分割,2隧道案例
路由毒化-query
毒性反转
特性
增量更新/减量更新
支持等价/不等价负载均衡
- 支持4条路由的等价负载均衡
- no ip cef
- 子主题 3
DUIL[弥散更新算法]
- metric(K值全AS域有效)
• K1=时延delay
• 100us
• K3=带宽bandwidth
• 可靠性reliability
• 255/255
• 读写负载loading
• 1
• MTU
• 三层MTU,全路径最小
- FC(可行性条件)条件
• show ip ei topo
• show ip ei topo all-link
• FD可行距离/AD宣告距离【当收到的AD小于FD路由可用】
TLV结构【type、length、内容】
- 扩展性
- 不认识跳过即可
快速收敛
- hello包短
- 触发更新
高级距离矢量协议
支持组播和广播宣告
- 224.0.0.10
支持VLSM/不连续子网
- update发送掩码
- 不会宣告一个大类网段,反掩码
支持任意点手动汇总,发的是路由表,不是链路状态
- 接口下配置路由汇总 ip summary-address ei 100 1.0.0.0 255.0.0.0
- 自动在汇总路由器生成null0路由,防止默认路由导致的黑洞
- 汇总路由生效前提为本地有明细路由
- 汇总路由的FD为明细路由最小的FD
- EIGRP默认汇总AD为5
100%无环路--算法决定
建立条件
- AS号
- K值
- HOLD TIME
- 认证相同
- 邻居类型一致【单播/组播】
- HELLO可达
BGP(Border Gateway Protocol)
基本概念
通俗说
- BGP是承载协议,IGB是乘客协议
- BGP不产生路由,通过network/聚合/import引入路由
- 基于策略的路由协议,丰富的过滤、路由策略丰富的度量机制,为路由附带属性信息
- 增强型DV距离矢量协议,以AS为距离的DV协议
- 是否传播路由表由是否存在明细路由决定,由IGP逐跳转发(路由表同步机制)
- TCP179建立邻居关系,三层可达即可建立邻居,即非直连也可以建立连接
- 支持增量触发更新,无周期更新路由表机制
- 一个路由器只能运行一个BGP AS
BGP使用理由
- 上万甚至十万条路由
- 支撑MPLS/VPN的应用,传递客户VPN路由
- 策略能力强,可以很好的实现路由决策与数据控制
- 占用资源多,推动换设备
AS(Autonomous System)自治系统
- 取值范围(1-65536-4294967295)
• 公有:1-64511,65536-4294967295
• 私有:64512-65535
- 表示形式
• 整数型(1-4294967295)
• bgp asnotation dot //思科切换为dot形式
• dot型 X.X(X=1-65535)华为默认
• 使用as-notation plain切换为整数形式
对等体组(peer group)
- 针对eBGP AS全互联场景减少大量配置命令
- 配置步骤
• 创建模板 neighbor DZH peer-group
• group DZH internal
• 填充模板内容 neighbor DZH update-source lo0
• peer DZH connect-interface
• 针对邻居应用模板 neighbor 1.1.1.1 peer-group DZH
BGP的三张表
- Neighbor table (邻居表)
- BGP table (forwarding database)(BGP表,转发表)
• 发布或从邻居学到的BGP路由信息,包含到目的网络所的有路径和每条路径的BGP信息
- IP routing table(IP路由表)
• 目标网络的最优路由才会写入BGP的路由表
External BGP/Internal BGP(内部BGP/外部BGP)
- BGP邻居关系建立在不同AS时为EBGP,EBGP 邻居关系,默认需要直接连接(connected)
- BGP运行在同一个AS内部的路由器之间时,称作IBGP,邻居不需要直连
BGP防环机制iBGP防环机制-水平分割eBGP防环机制-ASpath
- 总结
• iBGP防环机制-水平分割(没有eBGP aspath机制)
• eBGP学习到的可以传给iBGP
• iBGP学习到的不传递给iBGP邻居,不要二手消息,使用全互联学习
• eBGP防环机制-ASpath
• ASpath中有与自身相同的AS号则拒绝接受相关路由
• 路由反射器防环-RR
• 联邦方案防环
• mpls vpn防环-So0
- Internal BGP(iBGP)
• iBGP水平分割防环,iBGP路由不传递给其它iBGP邻居
• 场景:多iBGP场景下路由的重复泛洪导致路由环路C-A-B-C
• 解决方案
• IGP同步Synchronization:不做全互联前提下解决BGP路由黑洞
• 路由反射器RR解决MESH邻居多、配置复杂的缺点
• BGP联邦
• TTL默认255
- External BGP(eBGP)
• AS path
• 以短为优
• 路由汇总会丢失AS path
• 不接收包含自身AS号的eBGP路由
• igp的tag位类属于AS号
• TTL默认1
• nei x.x.x.x ebgp-multihop 2
• nei x.x.x.x disable-connected-check //物理层TTL还是1
• 【hw】peer x.x.x.x ebgp-max-hop xx
• 场景:使用lookback口建立邻居,一个子网一个TTL,需要修改默认TTL
防止BGP路由黑洞
- 出现场景
• AS域内没有运行BGP的路由器,导致该路由器没有到达AS域外的路由
- 解决方案
• iBGP全互联
• 内部BGP iBGP
• 外部BGP eBGP
• 部署路由反射器
• MPLS VPN
• 路由重分发
• 开启IGB同步,只有IGB存在的路由表才写入BGP
• iBGP与IGP同步路由表,只有本地拥有到目的网段的IGP路由才会通过eBGP传递给eBGP邻居
• iBGP有且best
• eBGP有且best
• 需要iBGP路由表和IGP路由表均最优则会同步给eBGP邻居,路由同步的本质是IGP对应路由是否在BGP路由表中最优
• 防止路由黑洞
• 过时技术,思科默认关闭,华为不支持开启
报文类型
Open Message:构建邻居
- AS Number
- Router ID
• bgp route-id x.x.x.x
- Hold time(180s)
- 能力值(举例)
• 路由刷新
• 是否支持多协议(IPV4\IPV6\L2TP\VPNV4\VPNV6)
• AS号位数
Keepalive
- 每60s一次维护邻居关系(hold time180,3次超时BGP邻居中断)
- 前两个keeplive用于确认open
- 抓包只能看到hold time不能看到keeplive时间
- keepalive应用层没任何数据
- 使用keepalive进行隐式确认/TCP的ACK进行显式
Update
- Network Layer Reachability Information(NLRI)(网络可达信息:网络前缀)
• 网段
• 掩码
- Path Attribute属性
• 起源:IGP/EGP
• As Path
• 下一跳
• 本地优先级
• 公认必遵属性
- 发生network动作时会发出update报文,邻居使用tcp ack对update进行确认
Notifacation
- 收到差错报文将会将BGP邻居down
- Open 消息错误
- Update消息错误
- 保持时间超时
- 状态机错误
- 终止
Route Refresh
- 手动刷新路由表时发送
- 刷新方式
• 软清
• clear bgp * soft in/out //刷新本端BGP路由表,向对端请求BGP路由,发出route refresh报文(show ip bgp nei可以验证route flush报文数量变化+debug ip bgp)
• clear bgp * soft //不区分方向
• HW
• reset bgp x.x.x.x export
• reset bgp x.x.x.x import
• 硬清
• HW
• reset bgp x.x.x.x
状态机
idle
- 邻居处于idle状态可能原因
• 没有放开ebgp多跳
• 使用环回口建立eBGP邻居
• 没激活特定ip地址族
• 管理down
• nei x.x.x.x sh
• peer x.x.x.x ignore
• 没有指定更新源 // 本端nei/peer和对端指定的nei/peer要一致,否则可能会idel/active来回跳
• 没有路由到指定的邻居//active和idle反复
• AS号错误//active和idle反复
connect
- TCP握手、连接 --- 传输层、网络层问题
- 重传计时器60,倍数重连
active
- 邻居有问题可能对端是idle状态
- 对端无响应open
- 参数不一致
• 邻居没有更新源路由
• 指定as号码有误
• 认证错误
• 没有邻居相关配置
open-sent
- 尝试建立BGP邻居
- 单向open,没收到keeplive
openconfirm
- 双向open,收到keeplive
establish
- 正常状态
BGP路由信息处理机制
源是否产生路由
- 看数据库
- 看路由表
源是否更新
- 看源是否向外更新宣告,有过滤策略
• sh ip bgp nei x.x.x.x advertised-routes
• dis bgp routing-table peer x.x.x.x advertise-routes
• nei x.x.x.x soft-reconfiguration inbound
• show ip bgp nei x.x.x.x received-routes //查看入方向接受的bgp路由
本地是否最优
- BEST、有效的路由不一定出现在路由表内 --- 管理距离
- 看数据库
- 看路由表
是否向目的宣告
基本实施
nei 1.1.1.1 255.255.255.0 remote-as 200 //指定邻居 和 AS
network 1.1.1.1 ma 255.255.255.255 //产生路由不激活接口
通过lookback口建立邻居nei 1.1.1.1 update-souce lookback0
- 链路冗余备份
- 环回口稳定,不因接口down导致邻居关系不可达
- 注意:保证lookback可以相互可达,静态路由都可以
nei 1.1.1.1 ebgp-multohop 2 //eBGP需要注意跳数
nei 1.1.1.1 next-hop-self //eBGP通告里注意改变下一跳
能ping通且tcp179通
- show tcp brief
- debug ip tcp brief
- debug ip bgp //undebug all
BGP只能单播发现邻居,建立邻居与宣告命令分离,与IGP区分
计时器
keepalive
- 60S保活
- 180S死亡
- keepalive 计时器不会在Open消息中交互
• 如果手工配置的keepalive timer小于min(holdtime)/3,则取配置值如果当前手工配置
• 如果当前手工配置的keepalive timer 大于min(holdtime)/3,则取两台BGP邻居间holdtime的最小值HOLDTIME
• 两端 Holdtime不一致,双方接受较小的的时间
- BGP不周期性更新路由,仅在需要时更新,触发更新等待时间IBGP peer为5SEBGP peer为30S,等待内BGP仍收集路由,导致eBGP收敛较慢
BGP特性
基于TCP
- TCP 179
- show tcp brief/dis tcp stu
- 指定TCP会话发起方
增量更新触发更新(没有定期更新)
周期性发送keeplive维持会话
丰富的度量值
认证(非加密)
- 认证信息在TCP报文头部!!!option字段内
- 每一个和BGP相关的TCP报文均会带此option
- 使用MD5认证
下一跳自我
- 问题:在iBGP邻居中会把eBGP路由携带的更新源作为自己的下一跳,而iBGP路由无法抵达eBGP邻居导致路由黑洞,无法转发eBGP流量
- 解决方案
• 重分布外部路由到iBGP中
• 在BGP边界针对外部邻居添加next-hop-self,更改iBGP的下一条为iBGP自己
- nei x.x.x.x next-hop-self
- peer x.x.x.x next-hop-local
- next-hop-unchange
• 中间为传输网络时可以
BGP产生路由方式
- network命令
• 和邻居关系无关,仅仅产生路由而已,要求mask掩码精准,除非主类自然掩码
• 可以通告静态、直连、IGP路由
• 增加度量值属性:MED;且MED等于IGP的AD/优先级
- 重分布/路由引入
• redistribute connected //重分布直连注意下一跳自我
• import-route direct route-policy Direct
• route-palicy Direct permit nade 10
• if-match interface LoopBack3
• if-match acl 2000
- aggregate聚合产生路由
• 起源属性发生变化,?
• 需要本地RIB有至少一条明细
- BGP产生的默认路由
主动、被动端
- 端口较大一端主动发起TCP会话,主动连接对端的179
- 如一端使用peer-group,则使用端一定是被动端
- 如果两端被动则无法建立邻居关系
- 查看TCP会话
• show tcp brief
• dis tcp stu
- 命令
• nei x.x.x.x transport connection-mode 【active/passive】
• peer x.x.x.x listen-only
移除私有AS号码
- 私有AS号码不能出现在公网,故需隐藏
- 删除私有AS号码可能会造成路由环路
- 华为:如果在as-path中存在公有和私有的删除私有AS会报错,因为经过了公网,移除私有AS有可能引起环路
- 思科:如as-path中存在公有和私有AS,删除私有AS命令将报错
• nei x.x.x.x remove-pricate-as all
• nei x.x.x.x remove-pricate-as all replace-sa //移除私有AS并将自身AS填充其中,不会影响AS-PATH长度
• 自身是私有AS,不能实施
• 公有AS邻居是私有AS也无法实施,需要跨AS
AS欺骗
- 采用伪AS号与对端建立eBGP邻居,华为的As Path只携带伪造的AS号;思科的增加
- nei x.x.x.x local-as xxxxx
- peer x.x.x.x fake-as xxxxx
- peer x.x.x.x public-as-only
动态邻居(dynamic neighbor)
- peer-group应用于一个子网
- 侦听被动方式建立BGP邻居
- 配置步骤
• 创建模板 neighbor DZH peer-group
• 填充模板内容 neighbor DZH update-source lo0
• 针对邻居应用模板 bgp listen range 172.0.0.0/24 peer-group DZH(172为对端IP)0.0.0.0/0【全网段RR常用】
下一跳行为
- eBGP的下一跳默认保持,需要在ASBR指定下一跳自我
- 把AS间直连路由引入IGP,使下一跳可达
• redistribution interface e0/0 route-map conn
• route-map comm
• match interface e0/0
• 不要通过BGP引入直连,因为通过邻居协议引入邻居路由不稳定
- 多点接入子网的下一跳,类似于icmp 的重定向
- 下一跳不变
• neighbor x.x.x.x next-hop-unchanged
• 只能用于ebgp环境下的多跳场景
• 在采用eBGP对等体发布路由时不改变下一跳,在采用RR的跨域optionC方式组网中
- 内部设备的下一跳
update-source 更新源
- BGP默认不能自动发现邻居,而需指定peer IP(neighbor)更新源默认为出口IP,查路由
- 只有配置的peer IP与邻居指定的update-source相同时被正常建立peer关系,仅需一方满足即可
• R2本地到1.1.1.0的静态路由,改配为默认路由,我们会发现BGP连接依然能建立,因为此例中R2为BGP连接的被动者,R1有明细路由即可主动发起连接。如R1到2.2.2.0的明细静态路由改为默认,R1将"no route to peer"
• EBGP邻居建立将检查直连路由默认TTL=1,而R1的loopback到R2至少2跳,需配置 neighbor xxxx ebgp-mul 2
• 为防环,两端默认路由互指BGP邻居无法建立,一边静态,一边默认可以
BGP路由通告
- 存在多条路径
• BGP Speaker 从EBGP 获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP)
• BGP Speaker 从IBGP获得的路由不向它的IBGP相邻体通告(避免环路,水平分割;存在路由RR的情况除外)
• BGP Speaker从IBGP获得的路由是否通告给它的EBGPpeer要视IGP和BGP同步的情况来决定
- 不存在多条路径
• BGP Router只选取最优的路由(BEST)传递给BGP peer
BGP路由汇总
- 需要考虑的问题
• BGP路由属性的继承
• 起源代码
• AS-PATH
• 团体属性
• 路由黑洞,明细路由将会被抑制,主类路由将被转发
- BGP的自动汇总summary automatic
• summary automatic默认关闭
• 自动汇总功能对汇总路由的把控较差,只能够将路由汇总成主类网络路由,无法做到精细化的掩码控制
• 自动汇总功能只对本地采用import-route命令注入的BGP路由有效
• import-route注入的BGP路由按主类网络进行汇总(按照IP地址所属类别的缺省网络掩码进行计算),明细路由被抑制
- BGP的手工汇总
• network命令/原则(不建议)
• 路由起源设备发起
• IGP已有的、静态路由、直连路由路由才能network给邻居
• 通过写静态路由产生到宣告路由的BGP,和可达性无关由于静态一直存在导致路由黑洞
• 手工汇总的骚操作--路由清洗
• 路由汇总注意写黑洞路由,防止路由黑洞
• 下一跳指向null接口防止次优路径、路由环路
• aggregate命令【推荐】
• aggregate注意事项
• 聚合必须要有明细路由
• 手工汇总aggregate-address
• 手工汇总aggregate-address 不加任何关键字,则明细也传递,汇总路由也传递
• summary-only 参数只传递汇总,明细被抑制。这种情况汇总将丢失明细路由 AS_PATH 属性,存在隐患,比如汇总路由规避了水平分割导致路由环路
• aggregate detail-suppressed 过滤全部明细
• 只宣告汇总路由,抑制明细
• aggregate suppress-policy 过滤部分明细
• permit 被过滤
• deny被放行
• 前缀抑制列表虽然调用route-policy,但route-policy只能用于匹配(if-match),不能用于设置属性(不能用apply命令)
• summary-only as-set 继承明细属性
• As-path: 将收到的所有明细路由的 as 号都放置在{}中,计算 AS_Path 长度时这些 AS 只被算为 1 个 AS,该列表为无序AS 列表
• Origin: 继承最差的 origin 属性
• Community: 继承所有明细路由的 community,形成一个列表
• MED 不继承
• LP 取明细路由中 LP 的最大值
• NEXT_HOP 汇总路由为 0.0.0.0(因为汇总路由为本地产生)
• 继承的3个属性
• aggregate-address 汇总地址 suppress-map xxx as-set
• 宣告聚合及特定明细(抑制特定明细路由)
• route-map 最后隐含deny any ,而 suppress-map 不同
• 被抑制列表引用的前缀列表permit代表抑制!deny标识允许!!要带上suppress关键字的含义
• 被 route-map 匹配(permit)的路由将被过滤,其他放行
• aggregate-address 汇总地址设置属性 attribute-map abc
• 更改汇聚路由的属性(注,仅仅对汇总路由产生作用,对明细不起效)。
• aggregate-address 汇总地址 as-set advertise-map
• aggregate-address 汇总所有明细均被抑制,advertise-map 匹配条目的明细如果全都挂了,则汇总消失,(只要 advertise-map 匹配的明细有一条在,汇总就在)
• 汇总路由继承 advertise-map 匹配明细路由的 BGP 路径属性
• aggregate origin-policy 汇总地址当明细全部消失汇总消失
• Origin-policy调用一个route-policy,使用if-match语句匹配明细路由。aggregate产生的汇总相当于为明细路由产生,只要明细路由有一条活跃,汇总路由就会被通告,如果匹配的明细路由都失效,汇总路由随之消失
• aggregate 172.16.0.016 detail-suppressed origin-policy ori产生的汇总路由172.16.0.0/16与ori中匹配的路由强关联,被ori匹配的子网即本例中detail-suppressed没有抑制172.16.10.0/24及172.16.11.0/24这两条明细路由
• aggregate-address 1.1.1.0 255.255.255.252 ?
• advertise-map Set condition to advertise attribute
• 依据宣告者的属性进行过滤
• as-confed-set Generate As confed set path information
• as-set Generate As set path information
• 聚合的同时增加自身的as-path
• 可以防止路由环路
• 还原原有的AS PATH
• attribute-map set attributes of aggregate
• route-map Set parameters of aggregate
• summary-only Filter more specific routes from updates
• HW
• HW:aggregate 1.1.1.0 255.255,255.252 detail-suppressed
• 如果是i和?的聚合路由将是 ?,igp>egp>incomplete
• cisco
• 如果是i和?的聚合路由将是 i
• 仅会宣告汇总,明细路由将会被抑制
• suppress-map Conditionally filter more specific routes from updates
• 有条件的抑制部分路由分发
• 修改属性参数
- 命令
• HW
• summary automatic
• cisco
• auto-summary
BGP路由反射器介绍(RR)
- 解决问题
• 邻居过多
• 会话过多
• 配置复杂
• 排障困难
- 理念
• 修改了iBGP水平分割的防环机制,允许iBGP对等体间更新路由,无需全互联的iBGP架构
• 将RR与client共同构成一个反射簇,将簇当作一个逻辑的整体,但配置只有RR有,RR只通告或反射它知道的最佳路径
- 角色
• 路由反射器(Route Reflector)
• 客户机(Client)
• 非客户机(Non-Client)
• eBGP邻居
- 实施:指定客户端即可
• peer x.x.x.x reflect-client
• neighbor x.x.x.x route-reflector-client
- RR基本概念、路由更新规则
• 为维护BGP 拓扑一致性RR在反射路由时不修改BGP某些属性,包括 NH、AS_PATH、LOCAL_PREF 和 MED,且增加 ORIGINATOR 和 CLUSTER_LIST 用于防环
• 如果路由学习至非 client IBGP 对等体,则反射给所有 client 及 EBGP 邻居
• 如果路由学习至一 client,则反射给所有非 client IBGP 邻居和除了该 client 以外的所有 client
• 如果路由学习至 EBGP 邻居,则反射给所有 client 和非 client IBGP 邻居
• 路由更新规则
• 从 client 收到的路由将更新给所有邻居{ client 、Non-client、eBGP}
• 打破水平分割,收到 client 收到的哪怕是水平的也会更新回 client
• 非非不传(RR从Non-client学习到的路由不传递给Non-client)
• 从Non-client收到的路由将更新给 client
• eBGP收到的路由更新给client 、Non-client
- RR场景设计(层次化路由反射)
• 会话设计
• Client只需维护与RR之间的IBGP会话
• AS 内的RR与RR之间需要建立IBGP的全互连
• Non-Client与Non-Client之间需要建立IBGP全互
• RR与Non-Client之间需要建立IBGP全互连
• 非反射器的路由器可参与 IBGP 全互联也可配置为反射器的 client
• 路由反射器规划原则
• 路由反射器将传输 AS(transit AS)分割成小单元,也就是反射簇
• 每个簇包含反射器及其 client
• 不支持路由反射器功能的路由器可以充当单路由器簇或充当 client
• 路由反射簇(cluster)
• 含义:一个AS内多台RR
• 风险:RR间将引入路由环路风险
• 簇(Cluster)
• Cluster_ID标识Cluster,通常会使用Loopback地址作为Cluster_ID,每一个簇都有唯一的簇 ID
• CLUSTER_ID是 4 字节的 IP 形式的标示符
• CLUSTER_ID默认情况下是RR自己的BGP router ID
• 多个 RR 用来为一个或多个 client服务,这些 RR 都配置相同的 CLUSTER_ID
• 一个Cluster里可以包括一个或多个RR
• 一个Client可以同时属于多个Cluster
• 路由反射簇Cluster包括反射器RR及其 Client
• 当一条路由被反射器反射后,该反射器(该簇)的 Cluster-ID 就会被添加至路由的 Cluster-list 属性中
- RR场景下的防环规则(路由反射器使用的可选过渡属性)
• 条件:必须被路由反射器反射之后才会增加的特性
• Originator ID(起源ID)
• 第一次反射路由,RR插入起始者的rid,客户端收到包含自身的rid的路由条目则不加表
• Cluster_List(簇列表)
• 当反射器收到一条 Cluster-list 属性已经包含该簇的 ClusterID 的路由时,该路由基于防环的目的将不被反射
- 冗余 RR 环境
• 一个簇中拥有多台 RR,Client 与每一台RR 有物理连接并建立 BGP peer关系
• Client 不知道自己的 Client身份,因此 RR 可以成为别人的 Client
- 路由反射器的实施
• RR配置
• 修改 cluster-id
• bgp client-to-client reflection
• client 到 client 反射默认开启,如果是全互联,此命令加 no,则关闭客户间反射
BGP的联邦特性
- 联邦理念
• BGP防环的被动方案,将联邦AS【大AS】划分为若干小联邦成员AS【成员AS】
• 小AS建立eBGP对等体关系,小AS内建立RR,通过分层分区解决iBGP路由环路问题
- 联邦风险/难点
• 配置复杂,风险过大
• 拓扑不清晰
• 排障不方便
- 联邦设计原则
• 成员AS使用私有AS号码
- 联邦特性
• 联邦成员AS间本地优先属性(正常在IBGP之间更新)可以使用
• 下一跳属性在联邦中保持原有的下一跳
• 需要使用nexthopself
• 公布给联邦路由MED属性在整个联邦范围内予以保留
• 路由的LP属性在整个联邦范围内予以保留
• 在联邦范围内,将成员AS号压入AS_PATH,但不公布到联邦外,并且使用TYPE3、4的AS_PATH
• AS_PATH中的联邦AS号用于在联邦内部避免环路
- 联邦内成员AS间防环关键字段
• AS_CONFED_SEQUENCE
• 去往特定目的所经过的有序AS列表,用法与AS_SEQUENCE类似,只是AS_CONFED_SEQUENCE仅在联邦内AS使用
• 该属性不会传递出联邦,外界不会知晓内部联邦AS环境
• AS_CONFED_SET
• 去往特定目的所经过的无序AS列表,用法与AS_SET完全一致,只是AS_CONFED_SET用于联邦内AS使用
- 联邦和RR的比较
- 联邦的配置与实现
• R3配置
• R4配置
• R5配置
• 1、eBGP邻居使用环回口建立peer注意多跳配置2、bgp confederation iden为联邦AS3、bgp confederation peers 64513表明为联邦成员eBGP,非AS64513为普通AS,可以配置多个
团体community属性(可见路由策略.xmaind)
- 可选过渡私有属性,在BGP对等体间传播,不受AS限制,使多个AS的一组BGP共享策略,简化路由策略的应用和维护难度
- 产生路由、收发更新路由时新增/修改团体属性
- 默认不传输此属性,需手工指定
- 团体属性是针对邻居收到路由后的动作,自身不受约束
- 分类
• 自定义团体属性
• 扩展团体属性
• 众所周知的团体属性
• internet表示可以向任何对等体发送匹配的路由。缺省情况下,所有的路由都属于lnternet团体。
• no advertise表示不向任何对等体发送匹配的路由。即收到具有此属性的路由后,不能发布给任何其他的BGP对等体。
• no-export表示不向AS外发送匹配的路由,但发布给其它子自治系统。即收到具有此属性的路由后,eBGP邻居将不能发布到本地AS之外AS。
• no-export-subconfed表示不向AS外发送匹配的路由,也不发布给其它子自治系统。即收到具有此属性的路由后,不能发布给任何其他的子自治系统。
• additive表示追加路由的团体属性
BGP路径属性(Path Attributes)/选路原则
BGP路由优先级、选路原则
华为设备BGP选路原则(对比思科设备,几乎相同)当到达同一目的地存在多条路由时,BGP依次对比下列属性来选择路由:1.优选协议首选值(PrefVal)最高的路由。(对比思科权重weight),协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效。2.优选本地优先级(Local_Pref)最高的路由。如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理3.依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由。(对比思科,本地起源即本地通告产生的路由)4.优选AS路径(AS Path)最短的路由(对比思科相同,此为公认必遵属性)5.依次优选origin类型为IGP、EGP、Incomplete的路由。(对比思科相同,此为公认必遵属性)6.对于来自同一AS的路由,优选MED值最低的路由。7.依次优选EBGP路由、IBGP路由、LocalCross路由、RemoteCross路由。8.优选到BGP下一跳IGP度量值(metric)最小的路由(6、7、8选路原则也相同,此处思科如果在前8条选路原则选择不出最优路由则可以使能负载均衡,华为也有相同的属性,命令为maximum load-balancing[ebgp|ibgp]number,配置BGP负载分担的最大等价路由条数。缺省情况下,BGP负载分担的最大等价路由条数为1,即不进行负载分担)华为并未说明优选更“老”(即建立时间更久)的BGP9.优选Cluste List最短的路由。(对比思科,华为在此处第9条和第10条颠倒)10.优选RouterID最小的设备发布的路由(可以由路由反射器的originator ID代替)11.优选从具有最小IPAddress的对等体学来的路由。
- 选路原则
• 前提:next-hop可达
• 去往同一网络BGP路由装载到BGP路由表中进行路由优选,最优(Best)路由才有可能加载到全局路由表中(还需要比较路由优先级)
• BGP只会将其选择出来的最优路由通告给其他对等体
• 严格按照顺序比较路由属性,如果当前属性可以选出最优路由,BGP将不进行后续的比较
- 世界恋爱组织亚洲办公室,墓碑下的(MEML),半兽人(ORC)
• world
• weight权重/PreValue
• 越高越优先
• 厂商私有的度量值,只在本地有效,不会在出方向将此传递给邻居,但可以指定某个邻居收到的权重
• cisco
• 缺省情况下,通过本路由器宣街、重分布或者汇总的路由的weight为32768,从BGP邻居学习到的路由的weight为0
• love
• local preference本地优先级
• HW
BGP的缺省本地优先级,该值越大则优先级越高。[Router-bgp]default local-preference preference缺省情况下,BGP本地优先级的值为100。配置不同本地优先级会影响BGP的路由选择。当一个运行BGP的路由器有多条路由到达同一目的地址时,会优先选择本地优先级最高的路由。本地优先级属性仅在IBGP对等体之间交换,不通告给其他AS。
• CISCO
BGP条目的缺省local preference值为100.local preference值可以在IBGP邻居之间传递,在EBGP邻居之间不能传递,对于从EBGP邻居学习到的BGP条目,local preference值为100,这个值可以通过命令bgp default local-preference修改
• 本地优先级影响出AS的路由,在iBGP邻居间传递,故在ASBR上进行相关配置,用于内部路由选择出AS节点
• organize
• source local 本地起源
• 本地起源的路由的优于从邻居学习到的
• aisa
• as-path
• office
• Origin起源代码
• i>e>?
• M
• MED多出口分离器
• E
• EBGP>IBGP
• M
• IGP的Metric
• L
• load balance
• O
• OLD,建立时间更久的EBGP(HW没有)
• R
• Router ID更小的
• C
• Cluster_list更短的
- 关于选路原则
• 优选具有最大Preferred-Value的路由
• 优先级定义
• 注意route-map建立permit的node
• 优选具有最大Local_Preference的路由
• 本地有效
• 越大越优先
• 优选起源于本地的路由
• 本地生成的路由优先级高于从邻居学来的路由
• 汇总路由优先级高于非汇总路由
• aggregate命令生成的手动汇总路由的优先级高于通过summary automatic命令生成的自动汇总路由
• network命令引入的路由的优先级高于import-route命令引入的路由
• import-route命令引入的路由优先级最低
• 优选AS_Path最短的路由
• 不建议修改AS属性
• 实在要用叠加原有的,不要覆盖
• apply as-path xxx additive在已有AS_Path基础上追加xxx
• apply as-path xxx overwrite将已有AS_Path值替换(覆盖)成xxx
• apply as-path none overwrite清空路由的AS_Path属性
• AS path短的优先,不关注AS_PATH长度
• bap bestpath as-path ignore //隐藏命令
• AS_PATH规则补充
• 汇总的AS_Set长度为1,无论AS_Set中包括多少AS,仅做1来计算
• AS_confed_seq和AS_confed_set类型不参与AS_Path长度计算
• Origin(IGP>EGP>Incomplete)
• 修改origin属性
• 优选MED最小的路由
• 优选EBGP对等体所通告的路由
• 优选到Next_Hop的IGP度量值最小的路由
• BGP路由负载分担
• 优选Cluster_List最短的路由
• 优选Router-ID最小的BGP对等体发来的路由
• 优选Peer-IP地址最小的对等体发来的路由
BGP路径属性 Path Attributes
- 公认属性【必须识别的】Well-Known
• 公认必遵属性Well-known mandatory
所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错认任意(Well-known discretionary)
• Origin起源代码
• 类型
• i (internal)network引入
• ? (incomplete)协议引入的路由
• e EGP
• As Path(可以为空,但必须携带)
• 1AS_SET
• 所经路径上的无序AS号列表
• 2AS_SEQUENCE
• 所经路径上的有序AS号列表
• 3AS_CONFED_SET
• 4AS_CONFED_SEQUENCE
• 联邦涉及
• 非联邦涉及
• 防环:EBGP对等体之间传递,IBGPB居时不修改AS-path
• 选路:路由优选的依据
• 原path前叠加
• AS_PATH作用
• Next Hop 下一跳属性
• 指定到达目标网络的下一跳地址
• 路由器学习到BGP路由后,对路由的Next_Hop属性值进行检查,该值(IP地址)必须本地路由可达,如果不可达,则这条BGP路由不可用
• Next_Hop在EBGP及IBGP场景的缺省操作
• 向EBGP传递路由时Next Hop设置为自身更新源IP地址
• 收到EBGP路由后传递给IBGP peer保持Next Hop值不变
• 需要使用next-hop-self告知AS内到达ASBR的路由
• 将eBGP更新源IP重分发到iBGP所在的AS内
• BGP peer中类ICMP redirect messages机制
• 某条BGP路由的Next_Hop地址与EBGP对等体(更新源)同网段,该路由Next_Hop保持不变并传递给BGP对等体
• NLRI网段和peer同网段的不同IP,BGP默认激活该优化策略
• 公认自决属性Well-known discretionary
所有BGP路由器都可以识别-但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中
• 本地优先级 local_prefence属性
• 本地优先级,公认自决属性,用于告诉AS中的路由器,哪条路径是离开AS的首选路径
• Local_Preference越大越优,缺省Local_Preference为0
• network及重发布到BGP的路由,Local_Preference缺省100
• 只发给IBGP对等体,不传递给EBGP对等体
• EBGP对等体收到Local_Preference NLRI触发Notifacation报文
• 可以在AS边界路由器上使用import策略修改Local_Preference属性
• bgp default local-preference 命令可修改缺省Local_Preference值
• Atomic_Aggregate 原子聚合属性
• 一个标记
• 必须要识别,updata报文携带
- 可选属性【可不识别的】Opional
• 可选传递属性Optional transitive
可选过渡(Optional transitive).BGP路由器可以选择是否在Update消息中携带这种属性。接收的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并使用到这种属性可选非过渡
• 自身可不识别,但传输给第三方进行识别即可
• Community 团体属性
• 可理解为路由标记,不关注具体路由前缀以简化路由策略的执行
• community默认不传递,需要指定peer后传递,且community是列表格式
• community属性值格式
• Community属性值长度为32个比特,4个字节
• 呈现形式
• 十进制整数格式
• 十六进制AA:NN格式,AA表示AS号,NN为自定义编号
• community属性类型
• internet,Internet(well-known community attributes)
• 所有路由都可以匹配的
• no-advertise,Do not advertise to any peer(well-known community attributes)
• 该条路由不能传递给任何BGP对等体
• no-export,Do not export to external peers(well-known community attributes)
• 该条路由不能传递给EBGP对等体(联邦EBGP对等体除外)
• no-export-subconfed,Do not send outside a sub-confederation(well-known community attributes)
• 该条路由不能传递给EBGP对等体(包括联邦EBGP对等体)
• none,No community attribute
• aggregator聚合者 --标记路由器BGP ID、AS号等
• 汇总路由丢失明细路径属性给下游peer告警,提示“汇总点”及汇总地AS
• 可选非传递属性Optional non-transitive
可选非过渡(Optional non-transitive)BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别这种属性,将丢弃这种属性,不必再转发给邻居路由器
• 每台设备均要识别,否则属性不会传递
• MED(Multi Exit Discriminator)多出口分离器
• 向外部peer定义进入AS首选路径,当入口有多个,使用MED影响其他AS选择进入路径
• 用于影响AS 间BGP选路,MED传递给EBGP后,peer在其AS内传递路由时携带MED值,该MED不会传递给下一个AS
• NLRI默认不携带MED,MED属性值越小则BGP路由越优,network时等于IGP cost或直连的cost=0
• 缺省MED = 0,可使用default med影响import-route及aggregate产生汇总路由
• bestroute med-none-as-maximum将该路由MED值按最大4294967295处理
• 关于MED属性的注意事项
• 缺省只比较来自同一对等体AS的BGP路由的MED值,去往不同AS不比较MED(可配置)
• compare-different-as-med比较不同AS的路由MED
• IBGP间传递MED值默认保留传递,不改变也不丢失
• MED只影响直接相邻的AS不跨AS传递
• EBGP PEER是否携带MED
• 本地始发(network或import-route引入)缺省携带MED属性发送给EBGP对等体
• EBGP学习再通告给另一EBGP不携带MED
• bestroute med-confederation
• ASPath中不包含外部自治系统(不在联盟范围内的自治系统)号时才比较MED值的大小
• AS_Path中包含外部自治系统号,则不进行比较
• deterministic-med
• 不同AS收到的相同路由选路时,首先按AS_Path最左边AS号分组。先组内比较,再用组内优选路由和其他组的优选路由比较,消除选路结果和路由接收顺序相关性
• Originator ID(起源ID)【属性类型9】
• 防止在路由反射器和客户机/非客户机产生环路
• 由RR服务器产生,携带本地AS内部路由发起者的router id
• 动作
• 当一条路由第一次被RR反射时,RR将Originator_ID属性加入这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID
• 当其它BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID,如果两个ID相同,BGP Speaker会忽略掉这条路由,不做处理
• Cluster_List(簇列表)【属性类型10】
• 防止AS内部环路
• 由RR服务器产生
• 默认等于RR的RID,可手动配置
• 由cluster_id组成,描述了路由所经过的RR的路径,类比路由经过的AS_PATH
• 用于一个AS内多个RR的场景,RR间的路由防环
• 动作
• 当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。如果Cluster_List为空,RR就创建一个
• 当RR接收到一条更新路由时,RR会检查Cluster_List。如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由
• huawei:本地优先级preferred_value
• 本地有效不传播给任何BGP对等体
• 本地始发默认Preferred_Value为0,从其他peer学到的路由缺省也为0
• 华为私有属性
- 公认自决属性/部分的
• 时间
• 权重
命令
no bgp default ipv4-uncast //意味着除ipv4外也可以承载多协议,须在特定地址族下激活
bgp asnotation dot //以dot型显示AS号,默认整数型
network
- network x.x.x.x mask 255.0.0.0
bgp log-neighbor-change //显示bgp相关状态
show/display
- show
• show ip bgp summary //查看BGP状态汇总
• V BGPv4版本
• AS 对端的As
• msgrcvd 接收到的数据包
• msgsend 发送的数据包
• tblver BGP表刷新次数
• INQ 入站队列
• OUTQ 出站队列
• show ip bgp //查看bgp路由表,看是否best
• next-hop下一跳不可达,到达其它AS的转发地址
• BGP数据库不是最优,第一考虑路由是否可达,考虑如iBGP传递有无配置下一跳自我
• show ip bgp neighbor //查看bgp邻居
• show ip bgp x.x.x.x //查看到某条明细路由的详情
• show ip bgp peer-group //查看peer-group详情
• show bgp ipv4 unicast //查看bgp数据库
• show ip bgp rib-failure //查看放入路由表失败的原因【如管理距离低导致】
• show ip bgp peer-group //查看bgp peer-group
• show ip route x.x.x.x //查看到达某个目的的下一跳
- display
• dis bgp peer //查看bgp邻居汇总
• display bgp routing-table //查看BGP数据库
• dis bgp routing-table x.x.x.x 查看某个明细路由的信息
• dis ip routing-table protocol bgp//查看某个路由协议路由表
• dis ip route-table protocle ospf //
• dis ip route-table x.x.x.x //查看某个目的ip的路由
- HW:debugging bgp update
- cisco:debug ip bgp updates
neighbor
- lookback口到物理口TTL减1
• neighbor 1.1.1.1 disable-connected-check //关闭直连检测
• Router(config-router)#neighbor {ip-address | peer-group-name}ebgp-multihop [ttl]
- neighbor 1.1.1.1 remote-as 123456
- neighbor 1.1.1.1 active
- neighbor {ip-address | peer-group-name} shutdown //管理性关闭bgp邻居,邻居状态处于idle admin状态
- neighbor 1.1.1.1 transport connect-mode active//调整指定BGP邻居为主动发起
- 指定更新源
• peer 1.1.1.1 connect-interface lo0
• neighbor 1.1.1.1 update-source lo0 //指定更新源IP
• 与对端指定的neighbor一致,此场景只影响三次握手,只要一边正确即可
• 方便在其它BGP查看本机的源,不要以设备接口IP为源
• 保证BGP邻居不受接口状态影响提高BGP邻居稳定性
- neighbor 1.1.1.1 ebgp-multihop xx
- neighbor 1.1.1.1 next-hop-self //避免非直连路由黑洞,改写下一跳为自己,而不是源的IP
- neighbor 1.1.1.1 distribute-list 10 out //本设备转载,向邻居update时出站过滤掉
- neighbor 1.1.1.1 password dzh
清BGP邻居
- clear ip bgp 1.1.1.1 //硬清除BGP邻居
• TCP链接重新建立
• open
• update
- clear ip bgp X soft (针对AS号/邻居IP软清邻居)
• clear ip bgp * soft in
• 主动发refresh
• 对端update
• clear ip bgp * soft out
• 本端直接update给对端
- clear ip bgp * //清除所有BGP邻居关系
- HW
• refresh bgp all im
• refresh bgp all ex
最佳实践
- 更新源使用环回口
- 修改TTL配置或取消TTL检查
- iBGP全互联/部署RR
- iBGP配置下一跳自我