bgp 简单认证功能

原理概述
路由协议通常分为内部网关协议(IGP: Interior Gateway Protocol)和外部网关协议(EGP: Exterior Gateway Protocol)两大类。一般来讲,IGP用于自治系统AS(AutonomousSystem)内部,EGP用于AS之间。最早的IGP是一种称为GGP (Gateway-to-GatewayProtocol)的路由协议,而最早的EGP是一种称为EGP (Interior Gateway Protocol,注意,它与类别名EGP同名,现已被废除)的路由协议。目前,常见的IGP包括RIP、OSPF、IS-IS 等,而常见的EGP只有BGP ( Border Gateway Protocol)。
早期发布的BGP 3个版本分别是BGP-1、BGP-2和 BGP-3,这3个版本目前已停止使用,当前使用的版本是BGP-4(RFC4271)。BGP-4作为事实上的互联网外部路由协议标准,已被广泛应用于ISP ( Internet Service Provider)之间。
BGP虽然是一种动态路由协议,但它实际上本身并不产生路由、不发现路由、不计算路由,其主要功能是完成最佳路由的选择并在 BGP邻居之间进行最佳路由的传递。BGP选择了TCP作为其传输协议,端口号为179。
BGP支持无类域间路由CIDR (Classless Inter-Domain Routing),并且采用了触发增量更新方式,这大大地减少了BGP在传播路由信息时所占用的带宽,特别适用于在互联网上传播大量的路由信息。
BGP提供了丰富的路由属性(Attribute),通过对这些属性的操作和控制,BGP能够非常容易地实现丰富而灵活的路由策略。BGP还具有良好的扩展性,支持Multicast、VPN、IPv6等多种特性。
BGP的邻居关系分为IBGP ( Internal BGP)和EBGP (External BGP)两种:当两台BGP路由器位于同一AS 时(AS编号相同),它们的邻居关系为IBGP邻居关系;当两台BGP路由器位于不同的AS时(AS编号不同),它们的邻居关系为EBGP邻居关系。BGP没有自动建立邻居关系的能力,邻居关系必须通过手动配置来建立。

 实验目的
理解 BGP协议的应用场景
理解IBGP 与EBGP邻居的概念配置IBGP与EBGP邻居关系

 实验内容
R1与R2属于同一个运营商网络,AS编号为100,R1与R2之间的邻居关系为IBGP邻居关系。R3属于另一个运营商网络,AS编号为200,R3与R2之间的邻居关系为EBGP邻居关系。本实验中,路由器将分别采用物理接口和Loopback接口来进行IBGP和 EBGP邻居关系的建立。

 

 基本配置

R1:
sys
sysname R1
int loop 0
ip add 10.0.1.1 32
int g0/0/0
ip add 10.0.12.1 24
int g0/0/1
ip add 10.0.21.1 24
q

R2:
sys 
sysname R2
int loop 0
ip add 10.0.2.2 32
int g0/0/0
ip add 10.0.12.2 24
int g0/0/2
ip add 10.0.21.2 24
int g0/0/1
ip add 10.0.23.2 24
int g0/0/3
ip add 10.0.32.2 24
q

R3:
sys
sysname R3
int loop 0
ip add 10.0.3.3 32
int g0/0/0
ip add 10.0.23.3 24
int g0/0/1
ip add 10.0.32.3 24
q

 接下来将在R1和R2上使用直连物理接口来配置IBGP邻居关系。为了实现链路冗余,Rl与R2之间部署了两条链路,当其中一条物理链路出现故障时,另一条物理链路继续连通。

上述配置完成后,在R2上使用display bgp peer命令,查看BGP邻居关系。
如果配置速度比较快需要等他收敛一下状态

R1:
bgp 100
router-id 10.0.1.1
peer 10.0.12.2 as-number 100
peer 10.0.21.2 as-number 100
q

R2:
bgp 100
router-id 10.0.2.2
peer 10.0.12.1 as-number 100
peer 10.0.21.1 as-number 100
q

可以看到,R2现在有两个BGP邻居,分别使用了R1的GE 0/0/0和GE 0/0/1接口地址来表示,AS编号为100,与R2自己的AS编号相同,因此R2与R1为IBGP邻居。当前邻居状态为Established,表示邻居关系已完全建立。
在R1上将Loopback 0接口地址通告到BGP进程中。

 R1:
bgp 100
network 10.0.1.1 32
q

 可以看到,R2的BGP路由表中包含了两条去往10.0.1.1/32的路由,下一跳分别为10.0.12.1和10.0.21.1,这是因为R1与R2之间建立了两个IBGP邻居关系,BGP路由实现了冗余。
BGP是运行在TCP之上的,如果能让R1的Loopback 0接口与R2的Loopback 0接口建立起TCP会话,并使用Loopback 0接口的IP地址来建立BGP邻居关系,则可以让R1和R2只维护一个 BGP邻居关系即可。当R1与R2之间的一条链路出现故障时,TCP可以通过另外一条物理链路继续维持会话关系,这种方法在网络的稳定性方面和网络资源的节省上比直接使用物理接口来建立BGP邻居关系更具优势。
为了能使R1的 Loopback 0接口与R2的Loopback 0接口建立起TCP会话,需要在R1和R2上配置到达对方Loopback 0接口的静态路由。

 

R1:
ip route-static 10.0.2.2 32 10.0.12.2
ip route-static 10.0.2.2 32 10.0.21.2
bgp 100
undo peer 10.0.12.2 
undo peer 10.0.21.2
peer 10.0.2.2 as-number 100
q

R2:
ip route-static 10.0.1.1 32 10.0.12.1
ip route-static 10.0.1.1 32 10.0.21.1
bgp 100
undo peer 10.0.12.1
undo peer 10.0.21.1
peer 10.0.1.1 as-number 100
q

 可以看到,R1 与R2的邻居关系停留在Active状态,而非 Established,这说明R1与R2尚未正常建立起IBGP邻居关系。
在配置BGP邻居时所使用的P地址,应该互为BGP报文的源IP地址和目的I地址。默认情况下,BGP会使用去往邻居路由器的出接口的IP地址作为BGP报文的源地址。在上面的配置中,R2向R1发送BGP报文的源P地址和R1上指定的邻居地址10.0.2.2不一致,从而导致了R1无法和R2正常建立BGP 邻居关系。解决此问题的方法是通过命令来强制指定路由器发送BGP报文时所使用的源IP地址。
在R1上使用命令peer 10.0.2.2 connect-interface LoopBack 0,指定R1使用自己的 Loopback 0接口地址作为发送BGP报文时的源IP地址;R2上也需使用类似的

r1:   peer 10.0.2.2 connect-interface loop 0

r2:    peer 10.0.1.1 connect-interface loop 0

 总之,使用Loopback 接口建立BGP邻居关系与使用物理接口来建立邻居关系相比较,前者具有更好的稳定性,且能够减少设备资源的开销。

从前面的实验内容我们知道,使用物理接口来建立R1和R2的BGP邻居关系时,配置相对简单,并且能够实现邻居关系的冗余。但是,这样的配置会产生两个TCP会话和两个 BGP邻居关系,当有路由需要彼此通告时,会通过这两个邻居关系分别进行通告,因而比较消耗设备资源,并且链路的不稳定也会导致 BGP 邻居关系的不稳定。
接下来,我们将在R2和R3上使用Loopback 0接口来建立EBGP 邻居关系。

 我们知道,BGP 邻居关系建立的前提条件是要能够建立起TCP会话,而目前R2和R3上都不存在去往对方Loopback 0接口的路由,因此无法建立TCP会话。为了解决这个问题,可以在R2和R3上配置到达对方Loopback 0接口的静态路由。

R2:
bgp 100
peer 10.0.3.3 as-number 200
peer 10.0.3.3 connect-interface loop 0
q
ip route-static 10.0.3.3 32 10.0.23.3
ip route-static 10.0.3.3 32 10.0.32.3

R3:
bgp 200
router-id 10.0.3.3
peer 10.0.2.2 as-number 100
peer 10.0.2.2 connect-interface loop 0
q
ip route-static 10.0.2.2 32 10.0.23.2
ip route-static 10.0.2.2 32 10.0.32.2

可以看到,现在R3的邻居状态是Idle,说明R2与R3之间的EBGP邻居关系仍然未能正常建立。
原来,在默认情况下,EBGP邻居之间在发送BGP报文时,TTL值为1,所以EBGP默认要求邻居之间必须物理直连。但是,当R2和R3使用Loopback 0接口建立邻居关系时,由于使用的不是物理直连的接口,所以TTL值会被多减一次,成为0,最终使得BGP报文会被丢弃,从而导致邻居关系无法建立。为解决这一问题,可以修改EBGP邻居发送 BGP报文的TTL值,使报文的TTL值大于1。
在R2和R3上使用命令peer ebgp-max-hop 2,配置BGP报文的TTL值为2。
 r2:   peer 10.0.3.3 ebgp-max-hop 20

r3:    peer 10.0.2.2 ebgp-max-hop 20

 BGP支持简单的密码认证方式,也支持安全性更高的MD5认证方式。如果是MD5认证方式,路由器会根据BGP报文的某些字段和密钥计算出一个128比特的散列值,然后将 BGP报文连同散列值发送给邻居。邻居路由器收到之后,会在本地基于接收到的BGP报文和相同的密钥再进行一次Hash运算。如果计算出的散列值与接收到的散列值相同,则认证通过,邻居关系能够正常建立;如果不同,则认证不通过,邻居关系就不会建立,且所收到的BGP报文会被丢弃。

r1:   peer 10.0.2.2 password simple  123

r2:   peer 10.0.1.1 password simple  123

 

上面的实验中,BGP进行认证时使用的是一个固定的密钥,当需要变换密钥来增强安全性时,操作将非常繁琐,并且还会造成BGP连接的中断。为此,我们可以使用基于Keychain 的认证方式来实现密钥的周期性更换,并且对众多的密钥进行集中管理。使用Keychain的方式可以定义密钥的存活期,但应保证设备的系统时间一致,避免认证失败。在实际场景中,设备通常会使用NTP (Network Time Protocol)协议来保证时间的同步。
在Keychain方式下定义密钥的存活期分为Absolute 与Periodic两种模式。Absolute模式下,密钥Key的有效时间为一个绝对时间段;Periodic模式下,一个Key的有效时间为周期性的一段时间,分为Daily、Monthly、Weekly和 Yearly等。以Daily为例,一个Key 的有效时间为每一天的某一特定时间段。一个Keychain中可以有多个Key,最多可支持64个Key-ID。
Key具有多个属性,包括 Key-ID、认证算法、Key-String 以及Send-Time和Receive-Time,其中 Send-Time和 Receive-Time用来定义Keychain中某个Key-ID的Active 时间段。如果系统时间不在Send-Time或者 Receive-Time时间内,则该Key-ID不会被使用。
接下来,在 R1和R2上配置基于 Keychain的认证功能,Key-ID 为1,Key-String为huawei,选用Periodic Daily模式,每天08:00到18:00使用Key-ID 1对发送的BGP报文做Hash运算,每天08: 00到18:00使用Key-ID 1对接收到的BGP报文进行认证。

R1:
keychain key mode periodic daily
key-id 1
algorithm md5
key-string huawei
send-time daily 08:00 to 18:00
receive-time daily 08:00 to 18:00
bgp 100
undo peer 10.0.2.2 password 
peer 10.0.2.2 keychain key
q

R2;
keychain key mode periodic daily
key-id 1
algorithm md5
key-string huawei
send-time daily 08:00 to 18:00
receive-time daily 08:00 to 18:00
bgp 100
undo peer 10.0.1.1 password
peer 10.0.1.1 keychain key
q

显示信息表明,Keychain 的名称为 key,密钥的数量为1。显示信息还包括了处于活动状态的Key-ID信息。
在没有NTP来保证时间同步的情况下,尽管管理员可以手动调整时间以尽量保证时间的一致性,但这样做的精度很差。在这种情况下,可以使用下面的命令来配置接收容忍时间,避免由于时间不同步或者Key-ID的变更过程中存在的时间延迟而导致BGP报文认证失败的情况。接收容忍时间只对接收端的 Key有效,其原理就是延长了Receive-Timer时间。
当一个 Keychain 中有多个 Key-ID时,可以合理地给不同的 Key-ID设置不同的Send-Time和 Receive-Time,实现密钥的无缝隙周期性更换,并且不会导致BGP邻居关系的中断。当然,如果密钥的更换存在时间缝隙,但缝隙不超过180s(一个HoldTime周期),BGP连接也是不会中断的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值