各个路由器的端口ip地址配置如下
<code class="language-plaintext hljs">[r1]dis ip int brief
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.1.1.1/24 up up
LoopBack0 1.1.1.1/32 up up(s) </code>
<code class="language-plaintext hljs">[r2]dis ip int brief
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.1.1.2/24 up up
GigabitEthernet0/0/1 23.1.1.2/24 up up
LoopBack0 2.2.2.2/32 up up(s) </code>
<code class="language-plaintext hljs">[r3]dis ip int brief
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/1 23.1.1.3/24 up up
GigabitEthernet0/0/2 34.1.1.3/24 up up
LoopBack0 3.3.3.3/32 up up(s) </code>
<code class="language-plaintext hljs">[r4]dis ip int brief
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 45.1.1.4/24 up up
GigabitEthernet0/0/2 34.1.1.4/24 up up
LoopBack0 4.4.4.4/32 up up(s) </code>
<code class="language-plaintext hljs">[r5]dis ip int brief
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 45.1.1.5/24 up up
LoopBack0 5.5.5.5/32 up up(s) </code>
配置IGP协议
在同一个AS内部,配置IGP(这里以OSPF为例)协议,实现内部网络互通,为BGP协议打底,因为想要建立起BGP的邻居关系,要跟邻居TCP可达,也就是能够通信。
<code class="language-plaintext hljs">[r2]
ospf 1
area 0.0.0.0
#
interface GigabitEthernet0/0/1
ospf enable 1 area 0.0.0.0
#
interface LoopBack0
ospf enable 1 area 0.0.0.0</code>
<code class="language-plaintext hljs">[r3]
ospf 1
area 0.0.0.0
network 0.0.0.0 255.255.255.255</code>
<code class="language-plaintext hljs">[r4]
ospf 1
area 0.0.0.0
#
interface GigabitEthernet0/0/2
ospf enable 1 area 0.0.0.0
#
interface LoopBack0
ospf enable 1 area 0.0.0.0</code>
配置BGP协议
在R1上配置BGP进程和EBGP邻居关系。
<code class="language-plaintext hljs">[r1]
bgp 100
router-id 1.1.1.1
peer 12.1.1.2 as-number 200 </code>
在R2上配置BGP进程,EBGP邻居关系和IBGP邻居关系。
<code class="language-plaintext hljs">[r2]
bgp 200
router-id 2.2.2.2
peer 4.4.4.4 as-number 200
peer 4.4.4.4 connect-interface LoopBack0
peer 12.1.1.1 as-number 100
peer 4.4.4.4 next-hop-local </code>
在R4上配置BGP进程,EBGP邻居关系和IBGP邻居关系。
注意:r3上不需要配置bgp协议。
<code class="language-plaintext hljs">[r4]
bgp 200
router-id 4.4.4.4
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 45.1.1.5 as-number 300
peer 2.2.2.2 next-hop-local </code>
在R5上配置BGP进程,EBGP邻居关系。
<code class="language-plaintext hljs">[R5]
bgp 300
router-id 5.5.5.5
peer 45.1.1.4 as-number 200 </code>
查检查R1 R2 R4 R5的邻居关系是否起来。
<code class="language-plaintext hljs">[r1]dis bgp peer
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
12.1.1.2 4 200 41 40 0 00:37:35 Established 2</code>
<code class="language-plaintext hljs">[r2]dis bgp peer
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
4.4.4.4 4 200 40 42 0 00:37:55 Established 1
12.1.1.1 4 100 41 43 0 00:38:23 Established 1</code>
<code class="language-plaintext hljs">[r4]dis bgp peer
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
2.2.2.2 4 200 42 41 0 00:38:24 Established 2
45.1.1.5 4 300 41 42 0 00:38:54 Established 1</code>
<code class="language-plaintext hljs">[r5]dis bgp peer
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
45.1.1.4 4 200 42 42 0 00:39:26 Established 1</code>
状态为Established 表示邻居关系建立成功。
路由宣告和引入
在BGP进程中,使用network命令宣告本地路由或使用import命令引入其他协议的路由,并观察邻居间的路由更新信息。
<code class="language-plaintext hljs">[r1]
bgp 100
network 1.1.1.1 255.255.255.255</code>
<code class="language-plaintext hljs">[r5]
bgp 300
network 5.5.5.5 255.255.255.255</code>
查看路由更新信息
<code class="language-plaintext hljs">[r1-bgp]dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 0.0.0.0 0 0 i
*> 5.5.5.5/32 12.1.1.2 0 200 300i</code>
<code class="language-plaintext hljs">[r5-bgp]dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 45.1.1.4 0 200 100i
*> 5.5.5.5/32 0.0.0.0 0 0 i</code>
<code class="language-plaintext hljs">[r2]dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 12.1.1.1 0 0 100i
*>i 5.5.5.5/32 4.4.4.4 0 100 0 300i</code>
<code class="language-plaintext hljs">[r4]dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.1.1.1/32 2.2.2.2 0 100 0 100i
*> 5.5.5.5/32 45.1.1.5 0 0 300i</code>
此时路由已经传过去了,但是r1和r5之间现在是ping不通的,因为在r3中出现了路由黑洞,它没有去往r1和r5的路由
<code class="language-plaintext hljs">[r3]dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost Flags NextHop Interface
2.2.2.2/32 OSPF 10 1 D 23.1.1.2 GigabitEthernet0/0/1
3.3.3.3/32 Direct 0 0 D 127.0.0.1 LoopBack0
4.4.4.4/32 OSPF 10 1 D 34.1.1.4 GigabitEthernet0/0/2
23.1.1.0/24 Direct 0 0 D 23.1.1.3 GigabitEthernet0/0/1
23.1.1.3/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
23.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
34.1.1.0/24 Direct 0 0 D 34.1.1.3 GigabitEthernet0/0/2
34.1.1.3/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
34.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0</code>
这时我们要在r2和r4中的ospf进程下引入bgp路由,让r3学习到这两条路由。
<code class="language-plaintext hljs">[r2]ospf 1
[r2-ospf-1]import-route bgp</code>
<code class="language-plaintext hljs">[r4]ospf 1
[r4-ospf-1]import-route bgp</code>
此时再去看r3的路由表。
<code class="language-plaintext hljs">[r3]dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 15 Routes : 15
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 O_ASE 150 1 D 23.1.1.2 GigabitEthernet0/0/1
2.2.2.2/32 OSPF 10 1 D 23.1.1.2 GigabitEthernet0/0/1
3.3.3.3/32 Direct 0 0 D 127.0.0.1 LoopBack0
4.4.4.4/32 OSPF 10 1 D 34.1.1.4 GigabitEthernet0/0/2
5.5.5.5/32 O_ASE 150 1 D 34.1.1.4 GigabitEthernet0/0/2
23.1.1.0/24 Direct 0 0 D 23.1.1.3 GigabitEthernet0/0/1
23.1.1.3/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
23.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
34.1.1.0/24 Direct 0 0 D 34.1.1.3 GigabitEthernet0/0/2
34.1.1.3/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
34.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/2
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
</code>
r3学习到了去往1.1.1.1和5.5.5.5的路由。
用户测试
<code class="language-plaintext hljs"><r1>ping -a 1.1.1.1 5.5.5.5
PING 5.5.5.5: 56 data bytes, press CTRL_C to break
Reply from 5.5.5.5: bytes=56 Sequence=1 ttl=252 time=40 ms
Reply from 5.5.5.5: bytes=56 Sequence=2 ttl=252 time=50 ms
Reply from 5.5.5.5: bytes=56 Sequence=3 ttl=252 time=30 ms
Reply from 5.5.5.5: bytes=56 Sequence=4 ttl=252 time=30 ms
Reply from 5.5.5.5: bytes=56 Sequence=5 ttl=252 time=40 ms
<r1>tracert -a 1.1.1.1 5.5.5.5
traceroute to 5.5.5.5(5.5.5.5), max hops: 30 ,packet length: 40,press CTRL_C to break
1 12.1.1.2 30 ms 10 ms 10 ms
2 23.1.1.3 20 ms 20 ms 20 ms
3 34.1.1.4 50 ms 30 ms 30 ms
4 45.1.1.5 30 ms 40 ms 40 ms </code>
<code class="language-plaintext hljs"><r5>ping -a 5.5.5.5 1.1.1.1
PING 1.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 1.1.1.1: bytes=56 Sequence=1 ttl=252 time=40 ms
Reply from 1.1.1.1: bytes=56 Sequence=2 ttl=252 time=40 ms
Reply from 1.1.1.1: bytes=56 Sequence=3 ttl=252 time=40 ms
Reply from 1.1.1.1: bytes=56 Sequence=4 ttl=252 time=50 ms
Reply from 1.1.1.1: bytes=56 Sequence=5 ttl=252 time=40 ms
<r5>tracert -a 5.5.5.5 1.1.1.1
traceroute to 1.1.1.1(1.1.1.1), max hops: 30 ,packet length: 40,press CTRL_C to break
1 45.1.1.4 20 ms 30 ms 20 ms
2 34.1.1.3 20 ms 20 ms 20 ms
3 23.1.1.2 40 ms 20 ms 30 ms
4 12.1.1.1 40 ms 30 ms 40 ms </code>
实验完成。