はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、前回の「【データセンタネットワーク編】EVPN-VXLANとは?(EVPN/VXLAN概要編)」で説明した内容の実機確認を行なっていきます。
動作確認では、アンダーレイを「OSPF」、オーバレイを「BGP」で設定し、iBGP構成のEVPN-VXLANを構築していきます。
実際に手を動かし、EVPN-VXLANを理解しよう!
検証環境の構成図
今回、EVE-NGで構築した検証環境は以下の構成になります。
上記の構成では、VXLANグループIDであるVNIは「10100」とし、VXLANのエンドポイントなるVTEPは「Router4」と「Router5」の2つのルータになります。
ここまでの説明だと「拠点A」と「拠点B」の通信は普通にできるのではないか?と思うと思います。
確かに経路やコストの設定方法次第では到達性が確保できると思います。
しかし、それはL2NWではなくL3NWになります。
やはり、L2NWで接続するためにはL2VPNを使うしかないのです。
では、早速EVPN-VXLANのConfigを見ていきましょう。
EVPN-VXLANのConfig(Nexus OS)
今回の検証では「Cisco Nexus OS」を利用しているため、このOSの設定例となります。
また、BGPやOSPFの基本的な設定に関する説明は割愛しますが、Configは最後に掲載します。
VTEP(エンドポイント)の設定
まず、VTEP特有の設定を以下に記載します。
feature interface-vlan
feature vn-segment-vlan-based
feature nv overlay
nv overlay evpn
fabric forwarding anycast-gateway-mac 2020.0000.00aa
vlan 100
vn-segment 10100
interface nve1
no shutdown
host-reachability protocol bgp
source-interface loopback0
member vni 10100
ingress-replication protocol bgp
evpn
vni 10100 l2
rd auto
route-target import auto
route-target export auto
router bgp 65000
neighbor 10.0.0.2
address-family l2vpn evpn
send-community
send-community extended
まずはNXOSの特徴でもありますが、利用する機能を「feature XXX」で定義する必要があります。
また、「nv overray evpn」から「vlan100」までの部分の説明は以下のとおりです。
nv overlay evpn #EVPNのEnable or Disable
fabric forwarding anycast-gateway-mac 2020.0000.00aa #VTEPの仮想MACアドレスを定義
vlan 100
vn-segment 10100 #VLANベースのVXLANを利用する際に必要なVNI定義
ここでの注意点は、同じNWに属させるVTEPでは「fabric forwarding anycast-gateway-mac」で指定するMACアドレスは同一にする必要があることです。
この理由は、VTEPを仮想的な1つのスイッチとして見立てるため、同一にする必要があります。
次に「nve」についてです。
interface nve1
no shutdown
host-reachability protocol bgp #到達可能性のアドバタイズメントにBGPを利用する設定
source-interface loopback0
member vni 10100 #VXLAN VNIとNVE IFを紐づける設定
ingress-replication protocol bgp #VNIのBUMトラフィック送受信のenable
NVEとは「EncapsulationとDecapsulationが発生する仮想IF」を指します。
このIF設定を行わないとEVPN-VXLANによるトンネルが生成されないのです。
最後に「EVPNとBGP」になります。
ここではEVPN-VXLANで利用するRD/RT値の設定を行い、BGPではL2VPNによる経路広報の設定も行います。
evpn
vni 10100 l2
rd auto
route-target import auto
route-target export auto
router bgp 65000
neighbor 10.0.0.2
address-family l2vpn evpn
send-community
send-community extended
VTEP(エンドポイント)以外の設定
VTEP以外の設定では、以下の設定街、EVPN-VXLANの設定という意味では他に必要ありません。
nv overlay evpn
router bgp 65000
neighbor 10.0.0.2
address-family l2vpn evpn
send-community
send-community extended
設定を終えた後は状態確認をしてみよう!
設定を終えた後は、状態確認を行なっていきましょう。
VTEPでの状態確認コマンドは以下のとおりとなります。
show ip ospf neighbors
show ip bgp summary
show ip route
show bgp l2vpn evpn summary
show bgp l2vpn evpn
show nve peers detail
まずは「show ip ospf neighbor」と「show ip bgp summary」による確認です。
Router4# show ip ospf neighbors
OSPF Process ID 100 VRF default
Total number of neighbors: 1
Neighbor ID Pri State Up Time Address Interface
10.0.0.2 1 FULL/ - 03:02:41 10.0.4.1 Eth1/2
Router4# show ip bgp summary
BGP summary information for VRF default, address family IPv4 Unicast
BGP router identifier 10.0.0.4, local AS number 65000
BGP table version is 16, IPv4 Unicast config peers 3, capable peers 3
7 network entries and 9 paths using 1948 bytes of memory
BGP attribute entries [3/516], BGP AS path entries [1/6]
BGP community entries [0/0], BGP clusterlist entries [0/0]
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.0.0.2 4 65000 194 194 16 0 0 03:02:32 4
10.0.0.3 4 65000 193 194 16 0 0 03:02:17 3
10.0.0.5 4 65000 193 193 16 0 0 03:02:01 1
上記出力よりPeerがしっかり張れていることがわかります。
その上で、「show ip route」によるルーティングテーブルの状態を見てみましょう。
Router4# show ip route
IP Route Table for VRF "default"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>
0.0.0.0/0, ubest/mbest: 1/0
*via 10.0.0.2, [200/0], 03:02:31, bgp-65000, internal, tag 65000
10.0.0.1/32, ubest/mbest: 1/0
*via 10.0.1.1, [200/0], 03:02:29, bgp-65000, internal, tag 1
10.0.0.2/32, ubest/mbest: 1/0
*via 10.0.4.1, Eth1/2, [110/20], 03:02:36, ospf-100, intra
10.0.0.3/32, ubest/mbest: 1/0
*via 10.0.4.1, Eth1/2, [110/30], 03:02:36, ospf-100, intra
10.0.0.4/32, ubest/mbest: 2/0, attached
*via 10.0.0.4, Lo0, [0/0], 03:20:45, local
*via 10.0.0.4, Lo0, [0/0], 03:20:45, direct
10.0.0.5/32, ubest/mbest: 1/0
*via 10.0.4.1, Eth1/2, [110/40], 03:02:13, ospf-100, intra
10.0.3.0/30, ubest/mbest: 1/0
*via 10.0.4.1, Eth1/2, [110/20], 03:02:36, ospf-100, intra
10.0.4.0/30, ubest/mbest: 1/0, attached
*via 10.0.4.2, Eth1/2, [0/0], 03:02:49, direct
10.0.4.2/32, ubest/mbest: 1/0, attached
*via 10.0.4.2, Eth1/2, [0/0], 03:02:49, local
10.0.5.0/30, ubest/mbest: 1/0
*via 10.0.4.1, Eth1/2, [110/30], 03:02:36, ospf-100, intra
100.1.1.1/32, ubest/mbest: 1/0
*via 10.0.1.1, [200/0], 03:02:29, bgp-65000, internal, tag 1
192.168.200.0/24, ubest/mbest: 1/0, attached
*via 192.168.200.254, Vlan100, [0/0], 03:20:45, direct
192.168.200.1/32, ubest/mbest: 1/0, attached
*via 192.168.200.1, Vlan100, [190/0], 03:19:25, hmm
192.168.200.254/32, ubest/mbest: 1/0, attached
*via 192.168.200.254, Vlan100, [0/0], 03:20:45, local
この状態を見ると「192.168.200.0/24」宛の経路は存在しますが、「192.168.200.254 direct or hmm」になっていることがわかるため、Router4から「192.168.200.2」への経路は見えない状態となっています。
では、L2VPNの状態をしっかりみていきましょう。
Router4# show bgp l2vpn evpn summary
BGP summary information for VRF default, address family L2VPN EVPN
BGP router identifier 10.0.0.4, local AS number 65000
BGP table version is 19, L2VPN EVPN config peers 3, capable peers 3
6 network entries and 6 paths using 1224 bytes of memory
BGP attribute entries [5/860], BGP AS path entries [0/0]
BGP community entries [0/0], BGP clusterlist entries [0/0]
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.0.0.2 4 65000 194 194 19 0 0 03:02:32 0
10.0.0.3 4 65000 193 194 19 0 0 03:02:17 0
10.0.0.5 4 65000 193 193 19 0 0 03:02:01 2
上記出力より各ルータとL2VPN EVPNによるBGP Peerが張れていることがわかります。
そして、受信経路を見てみるとどうなっているか?
Router4# show bgp l2vpn evpn
BGP routing table information for VRF default, address family L2VPN EVPN
BGP table version is 19, Local Router ID is 10.0.0.4
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 10.0.0.4:32867 (L2VNI 10100)
*>l[2]:[0]:[0]:[48]:[5001.0006.8064]:[0]:[0.0.0.0]/216
10.0.0.4 100 32768 i
*>i[2]:[0]:[0]:[48]:[5001.0007.8064]:[0]:[0.0.0.0]/216
10.0.0.5 100 0 i
*>l[3]:[0]:[32]:[10.0.0.4]/88
10.0.0.4 100 32768 i
*>i[3]:[0]:[32]:[10.0.0.5]/88
10.0.0.5 100 0 i
Route Distinguisher: 10.0.0.5:32867
*>i[2]:[0]:[0]:[48]:[5001.0007.8064]:[0]:[0.0.0.0]/216
10.0.0.5 100 0 i
*>i[3]:[0]:[32]:[10.0.0.5]/88
10.0.0.5 100 0 i
各MACアドレス宛のNetworkに対し、Nexthopがしっかり割り当てられています。
ちなみに「5001.0007.8064」はL2SW2のVLAN100に設定されたアドレスでした。
そして、最後にNVE IFの状態を見ていきます。
Router4# show nve peers detail
Details of nve Peers:
----------------------------------------
Peer-Ip: 10.0.0.5
NVE Interface : nve1
Peer State : Up
Peer Uptime : 03:02:00
Router-Mac : n/a
Peer First VNI : 10100
Time since Create : 03:02:00
Configured VNIs : 10100
Provision State : peer-add-complete
Learnt CP VNIs : 10100
vni assignment mode : SYMMETRIC
Peer Location : N/A
しっかりとPeer先がRouter5の「10.0.0.5」になっていることがわかります。
実際にL2SW1からL2SW2宛にPingとTracerouteを実行してもしっかり疎通可能です。
Host1#ping 192.168.200.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.200.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/9/16 ms
Host1#traceroute 192.168.200.2
Type escape sequence to abort.
Tracing the route to 192.168.200.2
VRF info: (vrf in name/id, vrf out name/id)
1 192.168.200.2 11 msec 10 msec *
Config一覧
この章ではVTEPとVTEP以外のルータの設定を記載します。(参考に)
VTEPルータの設定
!Command: show running-config
!Running configuration last done at: Wed Sep 25 04:53:21 2024
!Time: Wed Sep 25 04:59:30 2024
version 9.3(13) Bios:version
hostname Router4
vdc Router4 id 1
limit-resource vlan minimum 16 maximum 4094
limit-resource vrf minimum 2 maximum 4096
limit-resource port-channel minimum 0 maximum 511
limit-resource u4route-mem minimum 248 maximum 248
limit-resource u6route-mem minimum 96 maximum 96
limit-resource m4route-mem minimum 58 maximum 58
limit-resource m6route-mem minimum 8 maximum 8
nv overlay evpn
feature ospf
feature bgp
feature interface-vlan
feature vn-segment-vlan-based
feature lldp
feature nv overlay
no password strength-check
#username/password部分は割愛
ip domain-lookup
copp profile strict
rmon event 1 log trap public description FATAL(1) owner PMON@FATAL
rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL
rmon event 3 log trap public description ERROR(3) owner PMON@ERROR
rmon event 4 log trap public description WARNING(4) owner PMON@WARNING
rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO
fabric forwarding anycast-gateway-mac 2020.0000.00aa
vlan 1,100
vlan 100
vn-segment 10100
vrf context management
interface Vlan1
interface Vlan100
no shutdown
ip address 192.168.200.254/24
ip ospf passive-interface
ip router ospf 100 area 0.0.0.0
fabric forwarding mode anycast-gateway
interface nve1
no shutdown
host-reachability protocol bgp
source-interface loopback0
member vni 10100
ingress-replication protocol bgp
interface Ethernet1/1
switchport access vlan 100
speed 1000
interface Ethernet1/2
no switchport
speed 1000
ip address 10.0.4.2/30
ip ospf cost 10
ip ospf network point-to-point
ip router ospf 100 area 0.0.0.0
no shutdown
interface loopback0
ip address 10.0.0.4/32
ip ospf cost 10
ip ospf network point-to-point
ip router ospf 100 area 0.0.0.0
icam monitor scale
line console
line vty
boot nxos bootflash:/nxos.9.3.13.bin
router ospf 100
router-id 10.0.0.4
router bgp 65000
router-id 10.0.0.4
address-family ipv4 unicast
network 10.0.0.4/32
neighbor 10.0.0.2
remote-as 65000
update-source loopback0
address-family ipv4 unicast
address-family l2vpn evpn
send-community
send-community extended
neighbor 10.0.0.3
remote-as 65000
update-source loopback0
address-family ipv4 unicast
address-family l2vpn evpn
send-community
send-community extended
neighbor 10.0.0.5
remote-as 65000
update-source loopback0
address-family ipv4 unicast
address-family l2vpn evpn
send-community
send-community extended
evpn
vni 10100 l2
rd auto
route-target import auto
route-target export auto
VTEPではないルータの設定
!Command: show running-config
!Running configuration last done at: Wed Sep 25 04:51:42 2024
!Time: Wed Sep 25 04:55:57 2024
version 9.3(13) Bios:version
hostname Router2
vdc Router2 id 1
limit-resource vlan minimum 16 maximum 4094
limit-resource vrf minimum 2 maximum 4096
limit-resource port-channel minimum 0 maximum 511
limit-resource u4route-mem minimum 248 maximum 248
limit-resource u6route-mem minimum 96 maximum 96
limit-resource m4route-mem minimum 58 maximum 58
limit-resource m6route-mem minimum 8 maximum 8
nv overlay evpn
feature ospf
feature bgp
feature lldp
no password strength-check
rmon event 1 log trap public description FATAL(1) owner PMON@FATAL
rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL
rmon event 3 log trap public description ERROR(3) owner PMON@ERROR
rmon event 4 log trap public description WARNING(4) owner PMON@WARNING
rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO
ip route 0.0.0.0/0 Null0
vlan 1
vrf context management
interface Ethernet1/1
no switchport
speed 1000
ip address 10.0.1.2/30
no shutdown
interface Ethernet1/2
no switchport
speed 1000
ip address 10.0.4.1/30
ip ospf cost 10
ip ospf network point-to-point
ip router ospf 100 area 0.0.0.0
no shutdown
interface Ethernet1/3
no switchport
speed 1000
ip address 10.0.3.1/30
ip ospf cost 10
ip ospf network point-to-point
ip router ospf 100 area 0.0.0.0
no shutdown
interface loopback0
ip address 10.0.0.2/32
ip ospf cost 10
ip ospf network point-to-point
ip router ospf 100 area 0.0.0.0
icam monitor scale
line console
line vty
boot nxos bootflash:/nxos.9.3.13.bin
router ospf 100
router-id 10.0.0.2
router bgp 65000
router-id 10.0.0.2
address-family ipv4 unicast
network 10.0.0.2/32
neighbor 10.0.0.3
remote-as 65000
update-source loopback0
address-family ipv4 unicast
default-originate
address-family l2vpn evpn
send-community
send-community extended
neighbor 10.0.0.4
remote-as 65000
update-source loopback0
address-family ipv4 unicast
default-originate
address-family l2vpn evpn
send-community
send-community extended
neighbor 10.0.0.5
remote-as 65000
update-source loopback0
address-family ipv4 unicast
default-originate
address-family l2vpn evpn
send-community
send-community extended
neighbor 10.0.1.1
remote-as 1
update-source Ethernet1/1
address-family ipv4 unicast
各パケットの中身をのぞいてみよう!
設定と状態確認を終えたところで、各区間でパケットの中身を見てみましょう。
L2SW2<->VTEP(Router5)間のICMPパケット
最初に、ユーザを模擬したL2SW2からL2SW1にPingを打った際のパケットの状態をみていきます。
この区間では、EVPN-VXLANエリアに入っていないため、Encapsulationされていないパケットになることが想定となります。
WireSharkによるパケットキャプチャを実施すると想定通りになっていることがわかります。
EVPN-VXLANトンネル内を通過するパケットは?
次に、Encapsulationされている区間のパケットを見ていきましょう。
今回確認した区間はRouter2とRouter4間になります。
では、実際どうなのか?
上記パケットの中身を見るとしっかりEncapsulationされています。
イメージとしてはこんな感じです!
L2SW1とL2SW2に設定したVLAN100のMACアドレスはOriginal Ethernetヘッダに格納されていることがわかります。
EVPN-VXLANトンネル確立時のパケットは?
最後にEVPN-VXLANを確立した際に流れるBGPパケットの中身を見ていきます。
最初のパケットはNVE IFがUPした際にRouter5からRouter4に送信されたBGP Updateメッセージになります。
このパケットを見ると次のことがわかります。
- MP_REACH_NLRI
- AFI L2VPN(EVPN)によるUPDATEメッセージであること
- Nexthopを10.0.0.5で広報していること
- NLRI
- Route-Typeが「Type 2」の「MAC/IPアドレスの広報」
- RD値が「10.0.0.5:32867」
- MACアドレスが「50:01:00:07:80:64」
メッセージタイプ | 用途 |
Type1(Ethernet-AD Route) | – ESの経路とESに属するEVIリストの広報 |
Type2(MAC/IP Advertisement Route) | – MACアドレスやIPアドレスの広報(到達性も含む) – MAC/IPの紐付け |
Type3(Multicast E-Tag Route) | – マルチキャストトンネルのエンドポイント検知 |
Type4(Ethernet Segment Route) | – DF選択と冗長グループの選定 |
Type5(IP Prefix Route) | – IP Prefixの広報 |
次の画像は、EVPN Type3のマルチキャストトンネルのエンドポイントを通知している部分になります。
これらの内容は正常性確認で実行した「show bgp l2vpn evpn」の結果と一致します。
このメッセージはあくまでRouter5からRouter4へのUPDATEです。
次にRouter4からRouter5へのUPDATEメッセージも見ていきましょう。
同じように上記からL2SW1/Router4側の経路がUPDATEされていることがわかります。
マルチキャスト部分も同様です。
最後に
今回はEVPN-VXLANのiBGPによる構築を勉強したのでまとめてみました。
次回はeBGPによる構築もまとめていきたいと思います。