虛擬可擴充套件區域網文件

VXLAN 協議是一種隧道協議,旨在解決 IEEE 802.1q 中 VLAN ID 限制(4096個)的問題。透過 VXLAN,識別符號的大小擴充套件到 24 位(16777216個)。

VXLAN 由 IETF RFC 7348 描述,並已由多家供應商實現。該協議透過 UDP 執行,使用一個單一目的埠。本文件描述了 Linux 核心隧道裝置,Openvswitch 也有一個獨立的 VXLAN 實現。

與大多數隧道不同,VXLAN 是一個 1 對 N 網路,而不僅僅是點對點。VXLAN 裝置可以以類似於學習型網橋的方式動態學習其他端點的 IP 地址,或者使用靜態配置的轉發條目。

VXLAN 的管理方式與其兩個最近的鄰居 GRE 和 VLAN 類似。配置 VXLAN 需要使用與 VXLAN 最初合併到上游核心版本相匹配的 iproute2 版本。

  1. 建立 VXLAN 裝置

    # ip link add vxlan0 type vxlan id 42 group 239.1.1.1 dev eth1 dstport 4789
    

這將建立一個名為 vxlan0 的新裝置。該裝置透過 eth1 使用多播組 239.1.1.1 來處理轉發表中沒有條目的流量。目的埠號設定為 IANA 分配的值 4789。Linux 的 VXLAN 實現在 IANA 選擇標準目的埠號之前就已經存在,並預設使用 Linux 選擇的值以保持向後相容性。

  1. 刪除 VXLAN 裝置

    # ip link delete vxlan0
    
  2. 顯示 VXLAN 資訊

    # ip -d link show vxlan0
    

可以使用新的 bridge 命令建立、銷燬和顯示 VXLAN 轉發表。

  1. 建立轉發表條目

    # bridge fdb add to 00:17:42:8a:b4:05 dst 192.19.0.2 dev vxlan0
    
  2. 刪除轉發表條目

    # bridge fdb delete 00:17:42:8a:b4:05 dev vxlan0
    
  3. 顯示轉發表

    # bridge fdb show dev vxlan0
    

以下 NIC 功能可能表明支援 UDP 隧道相關的解除安裝(最常見的是 VXLAN 功能,但對特定封裝協議的支援是 NIC 特定的)

  • tx-udp_tnl-segmentation

  • tx-udp_tnl-csum-segmentation

    能夠對 UDP 封裝幀執行 TCP 分段解除安裝

  • rx-udp_tunnel-port-offload

    對 UDP 封裝幀進行接收端解析,這允許 NIC 執行協議感知解除安裝,例如內部幀的校驗和驗證解除安裝(僅適用於不支援協議無關解除安裝的 NIC)

對於支援 rx-udp_tunnel-port-offload 的裝置,可以透過 ethtool 查詢當前已解除安裝的埠列表

$ ethtool --show-tunnels eth0
Tunnel information for eth0:
  UDP port table 0:
    Size: 4
    Types: vxlan
    No entries
  UDP port table 1:
    Size: 4
    Types: geneve, vxlan-gpe
    Entries (1):
        port 1230, vxlan-gpe