配置BGP/MPLS IP VPN採用GRE隧道示例
組網需求
說明:
AR150&160&200不支援該場景。
某企業網路如圖1所示:
分支機構1透過CE1連線PE1接入VPN骨幹網。
分支機構2透過CE2連線PE2接入VPN骨幹網。
在骨幹網中,PE裝置具備MPLS能力,P裝置不具備MPLS能力。
企業要求使用GRE隧道建立PE間的直連鏈路,不使用LSP隧道,透過IP協議轉發VPN報文。
圖1 配置BGP/MPLS IP VPN採用GRE隧道組網圖
拓撲圖
配置思路
本例配置主要思路是:
1。 在P、PE之間配置OSPF,實現骨幹網的IP連通性。
2。 在PE之間建立GRE隧道,使VPN報文透過該隧道進行傳輸。
3。 在PE上配置VPN例項,並與CE相連的介面和相應的VPN例項繫結,以接入VPN使用者。
4。 由於P裝置不支援MPLS功能,所以不能使用LSP隧道傳輸VPN資料,我們可以透過在PE上配置隧道策略,指定VPN流量使用的隧道型別為GRE,在配置VPN例項時,應用該隧道策略。這樣VPN報文就能透過GRE隧道進行傳輸。
在PE與CE之間建立EBGP來交換路由資訊,使CE能學到對端CE的介面路由,實現分支機構CE1和CE2的互通。
操作步驟
配置各介面IP地址
# 配置CE1。
system-view
[Huawei] sysname CE1
[CE1] interface gigabitethernet 1/0/0
[CE1-GigabitEthernet1/0/0] ip address 10。1。1。1 24
[CE1-GigabitEthernet1/0/0] quit
# 配置PE1,需要繫結VPN例項的介面,先不要配置IP地址,繫結時會將介面下所有配置刪除。
system-view
[Huawei] sysname PE1
[PE1] interface gigabitethernet 2/0/0
[PE1-GigabitEthernet2/0/0] ip address 172。1。1。1 24
[PE1-GigabitEthernet2/0/0] quit
[PE1] interface loopback 1
[PE1-LoopBack1] ip address 1。1。1。9 32
[PE1-LoopBack1] quit
# 配置P。
system-view
[Huawei] sysname P //給路由器命名
[P] interface gigabitethernet 1/0/0 //進入介面模式
[P-GigabitEthernet1/0/0] ip address 172。1。1。2 24 //配置介面的IP地址
[P-GigabitEthernet1/0/0] quit
[P] interface gigabitethernet 2/0/0
[P-GigabitEthernet2/0/0] ip address 172。2。1。1 24
[P-GigabitEthernet2/0/0] quit
# 配置PE2,需要繫結VPN例項的介面,先不要配置IP地址,繫結時會將介面下所有配置刪除。
system-view
[Huawei] sysname PE2 // 給華為裝置命名
[PE2] interface gigabitethernet 2/0/0 // 進入介面模式
[PE2-GigabitEthernet2/0/0] ip address 172。2。1。2 24 //配置介面IP地址
[PE2-GigabitEthernet2/0/0] quit //退出介面模式
[PE2] interface loopback 1 //進入環回口1
[PE2-LoopBack1] ip address 2。2。2。9 32 //給環回口配置Ip地址
[PE2-LoopBack1] quit //退出介面模式
# 配置CE2。
system-view
[Huawei] sysname CE2 //給華為路由器命名
[CE2] interface gigabitethernet 1/0/0 //進入介面模式
[CE2-GigabitEthernet1/0/0] ip address 10。2。1。1 24 //配置介面的IP地址
[CE2-GigabitEthernet1/0/0] quit //退出介面模式
在骨幹網上配置IGP協議,實現骨幹網PE之間的互通
# 配置PE1。
[PE1] ospf 1
[PE1-ospf-1] area 0
[PE1-ospf-1-area-0。0。0。0] network 1。1。1。9 0。0。0。0
[PE1-ospf-1-area-0。0。0。0] network 172。1。1。0 0。0。0。255
[PE1-ospf-1-area-0。0。0。0] quit
[PE1-ospf-1] quit
# 配置P。
[P] ospf 1 //開啟OSPF程序1
[P-ospf-1] area 0 //進入OSPF程序1的區域0
[P-ospf-1-area-0。0。0。0] network 172。1。1。0 0。0。0。255 //在區域0下宣告網路
[P-ospf-1-area-0。0。0。0] network 172。2。1。0 0。0。0。255 //在區域0下宣告網路
[P-ospf-1-area-0。0。0。0] quit //退出OSPF區域0
[P-ospf-1] quit //退出OSPF程序1
# 配置PE2。
[PE2] ospf 1
[PE2-ospf-1] area 0
[PE2-ospf-1-area-0。0。0。0] network 2。2。2。9 0。0。0。0
[PE2-ospf-1-area-0。0。0。0] network 172。2。1。0 0。0。0。255
[PE2-ospf-1-area-0。0。0。0] quit
[PE2-ospf-1] quit
配置完成後,PE1、P、PE2之間應能建立OSPF鄰居關係,執行display ospf peer命令可以看到鄰居狀態為Full。執行display ip routing-table命令可以看到PE之間互相學習到對方的Loopback1路由。
配置GRE隧道
# 配置PE1。
[PE1] interface tunnel 0/0/1 //進入GRE隧道介面
[PE1-Tunnel0/0/1] tunnel-protocol gre //該介面下使用GRE協議
[PE1-Tunnel0/0/1] source loopback 1 //指定源埠
[PE1-Tunnel0/0/1] destination 2。2。2。9 //指定目標埠
[PE1-Tunnel0/0/1] ip address 20。1。1。1 24 //配置隧道介面地址
[PE1-Tunnel0/0/1] quit //退出隧道介面
# 配置PE2。
[PE2] interface tunnel 0/0/1
[PE2-Tunnel0/0/1] tunnel-protocol gre
[PE2-Tunnel0/0/1] source loopback 1
[PE2-Tunnel0/0/1] destination 1。1。1。9
[PE2-Tunnel0/0/1] ip address 20。1。1。2 24
[PE2-Tunnel0/0/1] quit
在PE裝置上使能MPLS基本能力
# 配置PE1。
[PE1] mpls lsr-id 1。1。1。9 //配置MPLS的LSR-ID
[PE1] mpls //開啟MPLS程序
[PE1-mpls] quit
# 配置PE2。
[PE2] mpls lsr-id 2。2。2。9
[PE2] mpls
[PE2-mpls] quit
在PE裝置上配置VPN例項,將CE接入PE,並在PE上應用隧道策略,指定使用GRE隧道轉發VPN報文
# 配置PE1。
[PE1] tunnel-policy gre1
[PE1-tunnel-policy-gre1] tunnel select-seq gre load-balance-number 1
[PE1-tunnel-policy-gre1] quit
[PE1] ip vpn-instance vpn1
[PE1-vpn-instance-vpn1] ipv4-family
[PE1-vpn-instance-vpn1-af-ipv4] route-distinguisher 100:1
[PE1-vpn-instance-vpn1-af-ipv4] vpn-target 100:1 both
[PE1-vpn-instance-vpn1-af-ipv4] tnl-policy gre1
[PE1-vpn-instance-vpn1-af-ipv4] quit
[PE1-vpn-instance-vpn1] quit
[PE1] interface gigabitethernet 1/0/0
[PE1-GigabitEthernet1/0/0] ip binding vpn-instance vpn1
[PE1-GigabitEthernet1/0/0] ip address 10。1。1。2 24
[PE1-GigabitEthernet1/0/0] quit
# 配置PE2。
[PE2] tunnel-policy gre1 //配置隧道策略
[PE2-tunnel-policy-gre1] tunnel select-seq gre load-balance-number 1
[PE2-tunnel-policy-gre1] quit
[PE2] ip vpn-instance vpn1
[PE2-vpn-instance-vpn1] ipv4-family
[PE2-vpn-instance-vpn1-af-ipv4] route-distinguisher 100:2
[PE2-vpn-instance-vpn1-af-ipv4] vpn-target 100:1 both
[PE2-vpn-instance-vpn1-af-ipv4] tnl-policy gre1
[PE2-vpn-instance-vpn1-af-ipv4] quit
[PE2-vpn-instance-vpn1] quit
[PE2] interface gigabitethernet 1/0/0
[PE2-GigabitEthernet1/0/0] ip binding vpn-instance vpn1
[PE2-GigabitEthernet1/0/0] ip address 10。2。1。2 24
[PE2-GigabitEthernet1/0/0] quit
配置完成後,在PE裝置上執行display ip vpn-instance verbose命令可以看到VPN例項的配置情況。各PE能Ping通相連的CE。
說明:
當PE上有多個綁定了同一個VPN的介面,則使用ping -vpn-instance 命令ping對端PE接入的CE時,要指定源IP地址,即要指定ping -vpn-instance vpn-instance-name -a source-ip-address dest-ip-address命令中的引數-a source-ip-address,否則可能ping不通。
PE與CE之間建立EBGP對等體關係,引入VPN路由
# 配置CE1。
[CE1] bgp 65410
[CE1-bgp] peer 10。1。1。2 as-number 100
[CE1-bgp] import-route direct
[CE1-bgp] quit
# 配置PE1。
[PE1] bgp 100
[PE1-bgp] ipv4-family vpn-instance vpn1
[PE1-bgp-vpn1] peer 10。1。1。1 as-number 65410
[PE1-bgp-vpn1] import-route direct
[PE1-bgp-vpn1] quit
[PE1-bgp] quit
# 配置CE2。
[CE2] bgp 65420 //開啟BGP程序
[CE2-bgp] peer 10。2。1。2 as-number 100 //配置BGP對等體鄰居
[CE2-bgp] import-route direct //引入直連線口地址
[CE2-bgp] quit
# 配置PE2。
[PE2] bgp 100
[PE2-bgp] ipv4-family vpn-instance vpn1
[PE2-bgp-vpn1] peer 10。2。1。1 as-number 65420
[PE2-bgp-vpn1] quit
[PE2-bgp] quit
配置完成後,在PE裝置上執行display bgp vpnv4 vpn-instance peer命令,可以看到PE與CE之間的BGP對等體關係已建立,並達到Established狀態。
以PE1為例:
[PE1] display bgp vpnv4 vpn-instance vpn1 peer
BGP local router ID : 1。1。1。9
Local AS number : 100
VPN-Instance vpn1, Router ID 1。1。1。9:
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10。1。1。1 4 65410 6 3 0 00:01:14 Established 3
在PE之間建立MP-IBGP對等體關係
# 配置PE1。
[PE1] bgp 100 //進入BGP 100的程序
[PE1-bgp] peer 2。2。2。9 as-number 100 // 配置BGP對等體鄰居
[PE1-bgp] peer 2。2。2。9 connect-interface loopback 1 //配置BGP更新源
[PE1-bgp] ipv4-family vpnv4 //配置BGP的Vpnv4路由
[PE1-bgp-af-vpnv4] peer 2。2。2。9 enable //配置BGP的Vpn4對等體鄰居
[PE1-bgp-af-vpnv4] quit //退出IPv4的Vpnv4的配置模式
[PE1-bgp] quit
# 配置PE2。
[PE2] bgp 100
[PE2-bgp] peer 1。1。1。9 as-number 100
[PE2-bgp] peer 1。1。1。9 connect-interface loopback 1
[PE2-bgp] ipv4-family vpnv4
[PE2-bgp-af-vpnv4] peer 1。1。1。9 enable
[PE2-bgp-af-vpnv4] quit
[PE2-bgp] quit
配置完成後,在PE裝置上執行display bgp vpnv4 all peer命令,可以看到PE之間的BGP對等體關係已建立,並達到Established狀態。
[PE1] display bgp vpnv4 all peer
BGP local router ID : 1。1。1。9
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
2。2。2。9 4 100 4 7 0 00:02:54 Established 0
Peer of IPv4-family for vpn instance :
VPN-Instance vpn1, Router ID 1。1。1。9:
10。1。1。1 4 65410 122 119 0 01:57:43 Established 3
檢查配置結果
配置完成後,CE能學到對端CE的介面路由,CE間可以互相Ping通。
以CE1為例:
[CE1] display ip routing-table 10。2。1。0
Route Flags: R - relay, D - download to fib
————————————————————————————————————————
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
10。2。1。0/24 EBGP 255 0 D 10。1。1。2 GigabitEthernet1/0/0
[CE1] ping 10。2。1。1
PING 10。2。1。1: 56 data bytes, press CTRL_C to break
Reply from 10。2。1。1: bytes=56 Sequence=1 ttl=253 time=1 ms
Reply from 10。2。1。1: bytes=56 Sequence=2 ttl=253 time=1 ms
Reply from 10。2。1。1: bytes=56 Sequence=3 ttl=253 time=1 ms
Reply from 10。2。1。1: bytes=56 Sequence=4 ttl=253 time=10 ms
Reply from 10。2。1。1: bytes=56 Sequence=5 ttl=253 time=1 ms
——- 10。2。1。1 ping statistics ——-
5 packet(s) transmitted
5 packet(s) received
0。00% packet loss
round-trip min/avg/max = 1/2/10 ms
配置檔案
CE1的配置檔案
#
sysname CE1
#
interface GigabitEthernet1/0/0
ip address 10。1。1。1 255。255。255。0
#
bgp 65410
peer 10。1。1。2 as-number 100
#
ipv4-family unicast
undo synchronization
import-route direct
peer 10。1。1。2 enable
#
return
PE1的配置檔案
#
sysname PE1
#
ip vpn-instance vpn1
ipv4-family
route-distinguisher 100:1
tnl-policy gre1
vpn-target 100:1 export-extcommunity
vpn-target 100:1 import-extcommunity
#
mpls lsr-id 1。1。1。9
mpls
#
interface GigabitEthernet1/0/0
ip binding vpn-instance vpn1
ip address 10。1。1。2 255。255。255。0
#
interface GigabitEthernet2/0/0
ip address 172。1。1。1 255。255。255。0
#
interface LoopBack1
ip address 1。1。1。9 255。255。255。255
#
interface Tunnel0/0/1
ip address 20。1。1。1 255。255。255。0
tunnel-protocol gre
source LoopBack1
destination 2。2。2。9
#
tunnel-policy gre1
tunnel select-seq gre load-balance-number 1
#
bgp 100
peer 2。2。2。9 as-number 100
peer 2。2。2。9 connect-interface LoopBack1
#
ipv4-family unicast
undo synchronization
peer 2。2。2。9 enable
#
ipv4-family vpnv4
policy vpn-target
peer 2。2。2。9 enable
#
ipv4-family vpn-instance vpn1
peer 10。1。1。1 as-number 65410
import-route direct
#
ospf 1
area 0。0。0。0
network 1。1。1。9 0。0。0。0
network 172。1。1。0 0。0。0。255
#
return
P的配置檔案
#
sysname P
#
interface GigabitEthernet1/0/0
ip address 172。1。1。2 255。255。255。0
#
interface GigabitEthernet2/0/0
ip address 172。2。1。1 255。255。255。0
#
ospf 1
area 0。0。0。0
network 172。1。1。0 0。0。0。255
network 172。2。1。0 0。0。0。255
#
return
PE2的配置檔案
#
sysname PE2
#
ip vpn-instance vpn1
ipv4-family
route-distinguisher 100:2
tnl-policy gre1
vpn-target 100:1 export-extcommunity
vpn-target 100:1 import-extcommunity
#
mpls lsr-id 2。2。2。9
mpls
#
interface GigabitEthernet1/0/0
ip binding vpn-instance vpn1
ip address 10。2。1。2 255。255。255。0
#
interface GigabitEthernet2/0/0
ip address 172。2。1。2 255。255。255。0
#
interface LoopBack1
ip address 2。2。2。9 255。255。255。255
#
interface Tunnel0/0/1
ip address 20。1。1。2 255。255。255。0
tunnel-protocol gre
source LoopBack1
destination 1。1。1。9
#
tunnel-policy gre1
tunnel select-seq gre load-balance-number 1
#
bgp 100
peer 1。1。1。9 as-number 100
peer 1。1。1。9 connect-interface LoopBack1
#
ipv4-family unicast
undo synchronization
peer 1。1。1。9 enable
#
ipv4-family vpnv4
policy vpn-target
peer 1。1。1。9 enable
#
ipv4-family vpn-instance vpn1
peer 10。2。1。1 as-number 65420
#
ospf 1
area 0。0。0。0
network 2。2。2。9 0。0。0。0
network 172。2。1。0 0。0。0。255
#
return
CE2的配置檔案
#
sysname CE2
#
interface GigabitEthernet1/0/0
ip address 10。2。1。1 255。255。255。0
#
bgp 65420
peer 10。2。1。2 as-number 100
#
ipv4-family unicast
undo synchronization
import-route direct
peer 10。2。1。2 enable
#
return