子网划分:
AS2内部用于建邻:172.16.0.0 32
AS2骨干区域:172.16.1.0 30
AS回环(用户):172.16.0.0 21 0~7
汇总172.16.0.0 21
对于实现as1与as3之间的不宣告通信,采用VPN
配置IP
R1
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.1.1.1/24 up up
LoopBack0 11.1.1.1/24 up up(s)
LoopBack1 192.168.1.1/24 up up(s)
R2
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 172.16.1.1/30 up up
GigabitEthernet0/0/1 12.1.1.2/24 up up
GigabitEthernet0/0/2 172.16.1.13/30 up up
LoopBack0 172.16.0.2/32 up up(s)
LoopBack1 172.16.2.1/24 up up(s)
R3
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 172.16.1.5/30 up up
GigabitEthernet0/0/1 172.16.1.2/30 up up
LoopBack0 172.16.0.3/32 up up(s)
LoopBack1 172.16.3.1/24 up up(s)
R4
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/1 172.16.1.6/30 up up
GigabitEthernet0/0/2 172.16.1.9/30 up up
LoopBack0 172.16.0.4/32 up up(s)
LoopBack1 172.16.4.1/24 up up(s)
R5
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 172.16.1.17/30 up up
GigabitEthernet0/0/2 172.16.1.14/30 up up
LoopBack0 172.16.0.5/32 up up(s)
LoopBack1 172.16.5.1/24 up up(s)
R6
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 172.16.1.21/30 up up
GigabitEthernet0/0/1 172.16.1.18/30 up up
LoopBack0 172.16.0.6/32 up up(s)
LoopBack1 172.16.6.1/24 up up(s)
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 78.1.1.1/24 up up
GigabitEthernet0/0/1 172.16.1.22/30 up up
GigabitEthernet0/0/2 172.16.1.10/30 up up
LoopBack0 172.16.0.7/32 up up(s)
LoopBack1 172.16.7.1/24 up up(s)
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/1 78.1.1.2/24 up up
LoopBack0 8.8.8.8/24 up up(s)
LoopBack1 192.168.2.1/24 up up(s)
如上图所示,每一个路由器的接口的IP配置如上
现在先配置AS2的IBGP的内部环境,使用ospf协议
配置命令
ospf 1 router-id 2.2.2.2
area 0
network 172.16.0.0 0.0.255.255
#然后更改回环的接口类型,默认是p2p,不改的话在其他路由上面看到的就是宣告的是32位掩码的loopback 1
int lo1
network-type broadcast
检查ospf的邻居建立display ospf peer brief,确保每个路由器的有两条建邻。
配置BGP协议
在AR1上面,AR8同样
bgp 1
router-id 1.1.1.1
peer 12.1.1.2 as-number 2
peer 12.1.1.2 ebgp-max-hop 2 #ebgp之间要改最大的下一跳,默认为1
AR2上面,这上面的配置命令有点多,我们先指定bgp私有as号,然后指定其属于as2的一个联邦。然后表示其还有一个联邦的64513as区域。然后我们就可以对其周边需要建邻的执行peer命令。
bgp 64512
router-id 2.2.2.2
confederation id 2
confederation peer-as 64513
peer 12.1.1.1 as-number 1
peer 172.16.0.3 as-number 64512
peer 172.16.0.3 connect-interface LoopBack0#建邻使用的是环回接口0,也是配的0.2/32的地址
peer 172.16.0.5 as-number 64513
peer 172.16.0.5 ebgp-max-hop 2 #不同联邦之间也是需要改最大的跳数
peer 172.16.0.5 connect-interface LoopBack0
后面的命令类似,R4,R5,R7一样
其中R3和R6差不多
bgp 64512
router-id 3.3.3.3
confederation id 2
peer 172.16.0.2 as-number 64512
peer 172.16.0.2 connect-interface LoopBack0
peer 172.16.0.4 as-number 64512
peer 172.16.0.4 connect-interface LoopBack0
依次配置号BGP之后,对于R1上面的11.1.1.1进行宣告。
network 11.1.1.0 255.255.255.0
然后会发现在R3和R5,R6上面也学得此路由,但是除了R5都是不优。是由于在IBGP中传路由不改属性的原因,而R5和R2之间也算EBGP关系所以会改下一跳。
我们所以需要改一下下一跳为本地出接口
peer 172.16.0.3 next-hop-local
peer 172.16.0.5 next-hop-local
然后再在R7上面也改一下
peer 172.16.0.4 next-hop-local
peer 172.16.0.6 next-hop-local
我们还需要打破IBGP内部的水平分割
比如将R4作为R3的反射客户端,R3作为RR。R7作为R6的反射客户端
peer 172.16.0.4 reflect-client#R3上面配置
peer 172.16.0.7 reflect-client#R6上面配置
此时11.1.1.1才能传递到R8上面
*> 11.1.1.0/24 78.1.1.1 0 2 1i
我们再宣告8.8.8.8也能传递到R1面了
*> 8.8.8.0/24 12.1.1.2 0 2 3i
然后我们再将AS2内部的所有环回宣告即可,然后再汇总。当时有点麻烦。我们直接宣告
#手写一条空接口的汇总
ip route-static 172.16.0.0 21 NULL 0
#宣告空接口
network 172.16.0.0 255.255.248.0
此时R1/8上面学到的
Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn*> 8.8.8.0/24 12.1.1.2 0 2 3i
*> 11.1.1.0/24 0.0.0.0 0 0 i
*> 172.16.0.0/21 12.1.1.2 0 0 2i
为了防止当R8访问不存在的172.16.0.0里面的网段的时候,增加多余的网络带宽。所以要在R7上面也写一个空接口ip route-static 172.16.0.0 21 NULL 0
最后再在R1和R8上面建立VPN即可。
#R1和R8同样配置,改一下ip为10.0.0.2 24即可
interface Tunnel0/0/0
ip address 10.0.0.1 255.255.255.0
tunnel-protocol gre
source 11.1.1.1
destination 8.8.8.8
然后再写一个静态,R8同样
ip route-static 192.168.2/1.0 24 Tunnel0/0/0
成果:
[r1]ping -a 192.168.1.1 192.168.2.1
PING 192.168.2.1: 56 data bytes, press CTRL_C to break
Reply from 192.168.2.1: bytes=56 Sequence=1 ttl=255 time=50 ms
。。。
round-trip min/avg/max = 20/38/50 ms
[r1]ping -a 11.1.1.1 8.8.8.8
PING 8.8.8.8: 56 data bytes, press CTRL_C to break
Reply from 8.8.8.8: bytes=56 Sequence=1 ttl=251 time=40 ms
。。。
round-trip min/avg/max = 30/38/50 ms
r1]ping -a 11.1.1.1 172.16.5.1
PING 172.16.5.1: 56 data bytes, press CTRL_C to break
Reply from 172.16.5.1: bytes=56 Sequence=1 ttl=254 time=20 ms
。。。
round-trip min/avg/max = 20/22/30 ms。。。
略
顺带一提,我们在as之间的路由器上面使用了peer <ip> next-hop-local并不是针对所有的经过该路由器的路由信息,都去改下一跳ip。
如果我们在R2这个路由器上面下一跳不使用这条命令,而使用以下命令:
route-policy demo permit node 10
apply ip-address next-hop peer-address
peer 127.16.0.3 route-policy demo export
peer 127.16.0.5 route-policy demo export
也能成功更改下一跳变为本地ip,但是这样会打破bgp的as-by-as规则,当8.8.8.8这条路由传递进来的时候,经过R2这个路由器的时候所有路由的下一跳变为本地ip,即为127.16.0.2此时再传递到R3上面时会触环(因为这条是经过下面的62513传递过来的,经过了ebgp会优先选择),此时它去往8.8.8.8的路由有两条172.16.0.7(不优),127.16.0.2(优)
R2上面127.16.0.7的下一跳为0.3和0.5,走0.3则会形成环路。
所以我们可以看出,next-hop-local不是针对所有的路由都改下一跳。
我们如果硬要用路由策略的话,就要只针对11.1.1.1过去的改下一跳就可以了
ip ip-prefix nex permit 11.1.1.0 24
route-policy demo permit node 10
if-match ip-prefix
apply ip-address next-hop peer-address
route-policy demo permit node(由于隐含拒绝所有未匹配到的路由,所以搞张空表)