iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0

Lab

本實驗拓樸如下,前提上一章節拓樸。

Spine01

對於 Spine01 配置,只賦予 L3 路由功能。

- set:
    system:
      hostname: spine01
    interface:
      swp1:
        description: to leaf01
        ip:
          address:
            192.168.10.1/30: {}
      swp2:
        description: to leaf02
        ip:
          address:
            192.168.20.1/30: {}
    vrf:
      default:
        router:
          static:
            1.1.1.1/32:
              via:
                192.168.10.2: {}
            2.2.2.2/32:
              via:
                192.168.20.2: {}

leaf01

- set:
    system:
      hostname: leaf01
      global:
        anycast-mac: 44:38:39:FF:00:AA
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                '10010': {}
            '20':
              vni:
                '10020': {}
    interface:
      lo:
        ip:
          address:
            1.1.1.1/32: {}
      swp4:
        description: to spine01
        ip:
          address:
            192.168.10.2/30: {}
      swp1:
        description: to server01
        bridge:
          domain:
            br_default:
              access: 10
      swp2:
        description: to server02
        bridge:
          domain:
            br_default:
              access: 20
      vlan10: # VLAN 10 的 L3 閘道 (Anycast)
        ip:
          address:
            10.1.10.1/24: {}
          vrf: red
      vlan20: # VLAN 20 的 L3 閘道 (Anycast)
        ip:
          address:
            10.1.20.1/24: {}
          vrf: blue
    nve:
      vxlan:
        enable: on
        source:
          address: 1.1.1.1
        flooding:
          enable: on
          # Configures VXLAN head end replication, where the switch replicates BUM traffic and sends individual copies to remote destinations.
          head-end-replication:
            2.2.2.2: {}

    vrf:
      red: {}
      blue: {}
      default:
        router:
          static:
            2.2.2.2/32:
              via:
                192.168.10.1: {}
  1. VXLAN
  • 建立 single VXLAN device (vxlan48)

  • 映射 VLAN 10 至 VNI 10010;VLAN 20 至 VNI 10020

  • 將 VXLAN 設備新增至預設網橋 br_default

        bridge:
        domain:
          br_default:
            vlan:
              '10':
                vni:
                  '10010': {}
              '20':
                vni:
                  '10020': {}
    

    這樣配置當數量一多對管理也是不方便,可參閱官方的自動映射 VLAN 至 VXLAN

  1. 洪水抑制 (Flooding)

配置使用了 Head-end Replication (HER)。當 leaf01 收到 VLAN 10 的廣播包時,它會手動複製一份封裝成 VXLAN 丟給 2.2.2.2。
可用 nv show nve vxlan 確保 head-end-replication 列表包含對方的 Loopback IP。

  1. Anycast Gateway 配置分析

在分散式閘道(Distributed Gateway)架構中,有一些細節需要學生注意:
Anycast MAC: leaf01 定義了 44:38:39:FF:00:AA,為了讓虛擬機在 Leaf 之間遷移時不需更新 ARP,兩台 Leaf 的 anycast-mac 必須相同。

  1. VTEP 身份與底層源位址 (NVE Source)

這定義交換機在 VXLAN 隧道中身分證的地方。來源位址,leaf01 使用 1.1.1.1;leaf02 使用 2.2.2.2 作為隧道的起點與終點。透過 nve.vxlan.enable: on 開啟 VXLAN 數據平面轉送功能。

leaf02


- set:
    system:
      hostname: leaf02
      global:
        anycast-mac: 44:38:39:FF:00:AA
    bridge:
      domain:
        br_default:
          vlan:
            '10':
              vni:
                '10010': {}
            '20':
              vni:
                '10020': {}
    interface:
      lo:
        ip:
          address:
            2.2.2.2/32: {}
      swp4:
        description: to spine01
        ip:
          address:
            192.168.20.2/30: {}
      swp1:
        description: to server01
        bridge:
          domain:
            br_default:
              access: 10
      swp2:
        description: to server02
        bridge:
          domain:
            br_default:
              access: 20
      vlan10: # VLAN 10 的 L3 閘道 (Anycast)
        ip:
          address:
            10.1.10.2/24: {}
          vrf: red
      vlan20: # VLAN 20 的 L3 閘道 (Anycast)
        ip:
          address:
            10.1.20.2/24: {}
          vrf: blue
    nve:
      vxlan:
        enable: on
        # Configures the local tunnel IP address for VXLAN tunnels.
        source:
          address: 2.2.2.2
        flooding:
          enable: on
          head-end-replication:
            1.1.1.1: {}

    vrf:
      red: {}
      blue: {}
      default:
        router:
          static:
            1.1.1.1/32:
              via:
                192.168.20.1: {}

Server

  1. Server01
$ ip add
...
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  link/ether 0c:65:f6:8c:00:00 brd ff:ff:ff:ff:ff:ff
  inet 10.1.10.10/24 brd 10.1.10.255 scope global enp2s0
     valid_lft forever preferred_lft forever
  inet6 fe80::e65:f6ff:fe8c:0/64 scope link proto kernel_ll
     valid_lft forever preferred_lft forever
  1. Server03
$ ip add
...
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 0c:50:fd:79:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.1.10.20/24 brd 10.1.10.255 scope global enp2s0
      valid_lft forever preferred_lft forever
    inet6 fe80::e50:fdff:fe79:0/64 scope link proto kernel_ll
      valid_lft forever preferred_lft forever

配置驗證

  1. Underlay 底層連通性驗證

VXLAN 仰賴 VTEP(Virtual Tunnel Endpoints)之間的 L3 連通。
leaf01 的 VTEP IP 為 1.1.1.1;leaf02 的 VTEP IP 為 2.2.2.2。Spine01 設定了靜態路由,將流量導向正確的 Leaf 介面(swp1/swp2)。

# 使用 Loopback IP 作為來源
$ ip vrf exec default  ping 2.2.2.2 -I 1.1.1.1
PING 2.2.2.2 (2.2.2.2) from 1.1.1.1 : 56(84) bytes of data.
64 bytes from 2.2.2.2: icmp_seq=1 ttl=63 time=1.02 ms
64 bytes from 2.2.2.2: icmp_seq=2 ttl=63 time=1.13 ms

  1. VXLAN 疊加層 (Overlay) 配置驗證

驗證 VLAN 如何映射到 VNI,以及如何處理廣播/未知單播流量。根據配置 VNI 映射表如下

VLAN VNI 關聯 VRF 目的
10 10010 red 延伸 Server01 與 Server03 的 L2 網路
20 10020 blue 延伸 Server02 與 Server04 的 L2 網路
# head-end-replication 列表包含對方的 Loopback IP
$ nv show nve vxlan
                        operational  applied
------------------------  -----------  -------
enable                    on           on
mac-learning              off          off
port                      4789         4789
arp-nd-suppress           on           on
mtu                       9216         9216
flooding
  enable                  on           on
  [head-end-replication]  2.2.2.2      2.2.2.2
source
  address                 1.1.1.1      1.1.1.1
mlag
  shared-address          none         none
encapsulation
  dscp
    action                derive       derive
decapsulation
  dscp
    action                derive       derive
  1. VRF 與 L3 Gateway 整合驗證

因 VRF 隔離性,VLAN 10 被指派給 vrf red;VLAN 20 被指派給 vrf blue。Server01 (VLAN 10) 與 Server02 (VLAN 20) 即使接在同一台 Leaf 上,也絕對無法互通,因為它們在不同的路由表(VRF)中。

$ ping 10.1.20.10 -c2
PING 10.1.20.10 (10.1.20.10) 56(84) bytes of data.
From 10.1.10.1 icmp_seq=1 Destination Host Unreachable
From 10.1.10.1 icmp_seq=2 Destination Host Unreachable

--- 10.1.20.10 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1010ms
  1. vxlan 介面學到遠端 Server 的 MAC

vxlan48 裝置是預設系統建立的名稱,預設上所有 VXLAN 的相關映射都會關聯此 vxlan48

cumulus@leaf01:mgmt:~$ bridge fdb show | grep "00:00:00:00:00:00"
00:00:00:00:00:00 dev vxlan48 dst 2.2.2.2 src_vni 10010 self permanent
00:00:00:00:00:00 dev vxlan48 dst 2.2.2.2 src_vni 10020 self permanent

Wireshark

  1. server01 (10.1.10.10) 發起 Ping 到 server03 (10.1.10.20)
    觀察 spine01 到 leaf02 線路的封包。

alt text

當封包經過 Spine01 時,學生會在 Wireshark 看到以下「洋蔥式」層級:

層級 關鍵欄位 預期數值(根據配置)
Outer Ethernet MAC Address source:leaf01-swp4/destination:spine01-swp1
Outer IP Source / Dest IP 1.1.1.1 -> 2.2.2.2 (VTEP 點對點)
UDP Header Dest Port 4789 (IANA 標準 VXLAN 埠號)
VXLAN Header VNI 10010 (對應 VLAN 10)
Inner Ethernet MAC Address source:server01/destination:server03
Inner IP Source / Dest IP 10.1.10.10 -> 10.1.10.20

以下是第二個封包內容:

Frame 2: Packet, 148 bytes on wire (1184 bits), 148 bytes captured (1184 bits) on interface -, id 0
Ethernet II, Src: 0c:2d:73:94:00:02 (0c:2d:73:94:00:02), Dst: 0c:31:30:f0:00:04 (0c:31:30:f0:00:04)
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 2.2.2.2 # Outer IP
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    Total Length: 134
    Identification: 0xa542 (42306)
    000. .... = Flags: 0x0
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 63
    Protocol: UDP (17)
    Header Checksum: 0xd01f [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 1.1.1.1
    Destination Address: 2.2.2.2
    [Stream index: 0]
User Datagram Protocol, Src Port: 34037, Dst Port: 4789 # UDP Header
Virtual eXtensible Local Area Network # VXLAN Header
    Flags: 0x0800, VXLAN Network ID (VNI)
    Group Policy ID: 0
    VXLAN Network Identifier (VNI): 10010
    Reserved: 0
Ethernet II, Src: 0c:65:f6:8c:00:00 (0c:65:f6:8c:00:00), Dst: 0c:50:fd:79:00:00 (0c:50:fd:79:00:00) # Inner Ethernet
    Destination: 0c:50:fd:79:00:00 (0c:50:fd:79:00:00)
    Source: 0c:65:f6:8c:00:00 (0c:65:f6:8c:00:00)
    Type: IPv4 (0x0800)
    [Stream index: 2]
Internet Protocol Version 4, Src: 10.1.10.10, Dst: 10.1.10.20 # Inner IP
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    Total Length: 84
    Identification: 0x324a (12874)
    010. .... = Flags: 0x2, Don't fragment
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 64
    Protocol: ICMP (1)
    Header Checksum: 0xe03f [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 10.1.10.10
    Destination Address: 10.1.10.20
    [Stream index: 1]
Internet Control Message Protocol

雖然 Outer IP 都是 1.1.1.1 到 2.2.2.2,但 Leaf 如何區分這屬於哪個 VRF?是依靠 VNI (Virtual Network Identifier) 欄位。

  1. 觀察 BUM 流量與 HER (Head-end Replication)

配置開啟了 head-end-replication,可以觀察 ARP 請求(廣播流量)。會看到一個為 ARP Request (Broadcast) 的 VXLAN 封包。雖然是廣播,但在 Underlay 網路中,它被封裝成單播 (Unicast) 傳送給 2.2.2.2。這就是 HER 的運作原理,在進入隧道前由 Leaf 進行複製。

alt text

第14個封包 Protocol 欄位顯示為 ARP,且 Info 顯示 Who has 10.1.10.20? Tell 10.1.10.10。ARP Request 在二層網路(Layer 2)中屬於廣播 (Broadcast) 流量。在傳統交換機中,這類封包會從所有介面 Flood 出去。

HER 的定義是,由進入隧道的入口交換機 (Ingress VTEP) 負責將廣播封包複製成多份,並以單播 (Unicast) 的方式傳送給所有遠端 VTEP。封包結構可以看到

  1. Outer IP: 來源 IP 為 1.1.1.1 (leaf01),目標 IP 為 2.2.2.2 (leaf02)。這證明了原本是廣播的 ARP 請求,被包裝成了一個點對點的單播封包(Unicast)。
  2. 封裝結構:可以看到 Internet Protocol Version 4 (底層路由) 封裝了 User Datagram Protocol (Port 4789),接著是 Virtual eXtensible Local Area Network (VXLAN),最內層才是真正的 Address Resolution Protocol。

上一篇
NVUE - VXLAN
下一篇
NVUE - BGP
系列文
ToR 的復仇-頂架也能跑馬拉松13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言