VXLAN: L2 Traffic zwischen Standorten übertragen

Ein Subnetz, zwei Standorte. Dies ist auf dem FortiGate seit Version 5.4 auch ohne NAT möglich. Zur Verwendung kommt dazu ein Protokoll, welches es ermöglicht, Layer 2 Traffic über Layer 3 Netzwerke zu senden. Dieses Protokoll heisst Virtual eXtensible Local Area Network (VXLAN) und wurde im RFC 7348 zum Standard definiert. Zur Anwendung kommt dieses vor allem in Infrastrukturen grosser Provider oder in virtuellen Infrastrukturen, um Netzwerke an unterschiedlichen Standorten verfügbar zu machen.

Damit auf einfache Weise Datenpakete über das VXLAN gesendet werden können, wird auf dem FortiGate ein neues virtuelles Interface als Tunnelendpunkt angelegt. Diese „Tunnel End Point“ Interfaces werden VTEP (VXLAN Tunnel End Point) genannt. Wenn der VXLAN Tunnel über ein IPSec aufgebaut wird, gibt es kein zusätzliches Interface, da auf dem IPSec Interface die Encapsulation direkt auf VXLAN umgeschaltet wird. Ein zusätzliches logisches Interface wird daher nicht benötigt.

Über IPSec und ohne die Verwendung von VXLAN können zwei unabhängige Subnetze mit den selben Netzwerken an beiden Standorten verwendet werden. Jedoch können diese Netzwerke nicht als einzelnes durchgehendes Netz betrachtet werden, da beide pro Standort unabhängig verwendet werden. Adressen welche an Standort A verwendet werden, können an Standort B ebenfalls noch einmal verwendet werden. Ermöglicht wird dies durch das NAT, welches die Adressen für die Gegenseite in einen anderen Adressbereich verlegt. So kann der Adressbereich doppelt verwendet werden, ohne dass dies die Gegenseite stört. Die Kommunikation von einem Host an Standort A zu einem Host an Standort B erfolgt dabei nicht über die effektive Adresse des anderen Clients sondern über die per NAT maskierte Adresse, welche von der Firewall jeweils umgeschrieben wird.

VXLAN über IPSec support

Das Verwenden eines einheitlichen Netzwerks an beiden Standorten ist nur mit IPSec alleine nicht mehr lösbar. Dafür hat das FortiGate aber seit Version 5.4.0 das Virtual Extensible LAN Feature. Dieses legt einen Tunnel über die IPSec Verbindung, über welche auch Layer 2 Pakete gesendet werden können. Der VXLAN Tunnel an sich besteht von aussen sichtbar nur aus UDP Paketen mit Zielport 4789. Diese Pakete werden wiederum im IPSec (Internet Protocol Nr. 50 oder UDP Port 4500) gekapselt und verschlüsselt.

Natürlich gibt es auch bei dieser Funktion noch einige Bedingungen, welche erfüllt werden müssen, damit am Schluss alles funktioniert. Beispielsweise dürfen über beide Standorte hinweg keine Adressen doppelt vergeben werden. Auch die FortiGates benötigen von einander abweichende (aber im selben Subnetz befindliche) LAN IP Adressen.

Die Konfiguration der FortiGates ist dabei noch denkbar simpel. Auf beiden Firewalls wird jeweils ein Softwareswitch angelegt. Zum Switch wird jeweils das virtuelle IPSec Interface und das LAN Interface hinzu gefügt. Diese werden dann über den IPSec Tunnel übertragen. In der ARP Tabelle des FortiGates werden die MAC Adressen der Hosts am remote Standort jeweils mit dem virtuellen VXLAN Interface als Ziel hinterlegt.

Natürlich bestehen auch bei dieser Technologie noch Einschränkungen. So kann bisher jeweils nur ein einzelnes Subnetz über VXLAN over IPSec übertragen werden. Das Übertragen mehrerer Subnetze ist momentan möglich, wenn VXLAN nativ verwendet wird.

Eine simple Anleitung zum Implementieren des VXLAN über IPSec ist unter kb.fortinet.com zu finden. Noch detailliertere Informationen dazu sind unter kb.fortinet.com abgelegt.

VXLAN Nativ support

Achtung: dieses Feature ist auch mit Version 5.6 nicht auf allen Appliances verfügbar! Uns sind bisher folgende Modelle bekannt, welche VXLAN nicht mehr unterstützen werden: FGR 60D, FGR 90D, FGT 30D, FGT 30D-POE, FGT 60D, FGT 60D-POE, FGT 70D, FGT 70D-POE, FGT 80C, FGT 80CM, FGT 90D, FGT 90D-POE, FGT 94D-POE, FGT 98D-POE, FGT 200D, FGT 200D-POE, FGT 240D, FGT 240D-POE, FGT 280D-POE, FGT 600C, FGT 800C, FGT 1000C, FGT 3240C, FGT 3600C, FGT 5001C, FWF 30D, FWF 30D-POE, FWF 60D, FWF 60D-POE, FWF 80CM, FWF 81CM, FWF 90D, FWF 90D-POE, FWF 92D (Liste Sept. 2017)
Weitere Infos zur Kompatibilität sind unter diesem Link zu finden.

Mit Version 5.6.0 des FortiOS hat Fortinet das VXLAN Protokoll den FortiGates auch als native Funktion hinzugefügt. So kann nun beispielsweise ein MPLS Uplink zwischen Rechenzentren oder eine dark-fibre Verbindung als VXLAN Uplink verwendet werden. Dies eröffnet die Möglichkeit, mehrere Layer 2 Netzwerke über einen Layer Link zu übertragen.

Im Gegensatz zum IPSec-implementierten VXLAN Protokoll ist das native unverschlüsselt und daher nicht zur Übertragung über öffentliche Strecken geeignet. Jedoch können mit dem nativen VXLAN Protokoll mehrere Netzwerke ohne mühsamen Workaround übertragen werden – unter anderem auch über einen IPSec Tunnel.

Eine VXLAN Konfiguration will vorgängig gut durchgeplant sein. Denn bereits einfache Fehler können sehr grosse Auswirkungen auf den Betrieb der Infrastruktur haben. Beispielsweise sollte sinnvoller Weise nur ein DHCP Server im Netzwerk laufen. Da stellt sich dann allerdings die Frage, wie der Traffic ins Internet geroutet wird. Denn wenn ein einzelner DHCP Server alle Hosts bedient, erhalten standardmässig alle Hosts das selbe Gateway. Dieses sollte sich in den meisten Fällen aber je nach Standort unterscheiden, damit nicht der gesamte WAN Traffic über ein FortiGate gesendet wird.

Konfiguration eines nativen VXLAN

Grundsätzlich müssen für ein VXLAN keine Firewall Policies konfiguriert werden, da der Traffic einfach geswitcht werden kann und das Netzwerksegment daher nicht verlässt. Jedoch besteht im angelegten Softwareswitch die Option „set intra-switch-policy explicit“. Sobald diese mit explicit konfiguriert wurde (default: implicit), können auch Firewall Policies angelegt werden, welche den Traffic zwischen diesen Interfaces überwachen.

Ein natives VXLAN kann relativ einfach eingerichtet werden:

config system vxlan
   edit "vxlan1"
      set interface "wan2"
      set vni 1
      set remote-ip "10.0.0.2"
   next
   edit "vxlan2"
      set interface "wan2"
      set vni 2
      set remote-ip "10.0.0.2"
   next
end
config system interface
   edit "local1"
      set ip 10.10.10.1 255.255.255.0
      set allowaccess ping https ssh http
      set type switch
   next
   edit "local2"
      set ip 10.10.20.1 255.255.255.0
      set allowaccess ping https ssh http
      set type switch
   next
   edit "vxlan1"
      set type vxlan
      set interface "wan2"
   next
   edit "vxlan2"
      set type vxlan
      set interface "wan2"
   next
end
config system switch-interface
   edit "local1"
      set vdom "root"
      set member "internal2" "internal3" "vxlan1"
   next
   edit "local2"
      set vdom "root"
      set member "internal4" "internal5" "vxlan2"
   next
end

Sobald die Switches, die VTEP und die lokalen Interfaces konfiguriert wurden, werden die VXLAN Daten zwischen den FortiGates übertragen. In blau dargestellt finden Sie ein Beispiel, wie mehrere Netzwerke übertragen werden können. Für jedes weitere Netz werden einfach weitere Switches, VTEP und Tunnel angelegt.

Aber Achtung …

Unter FortiOS 5.6.x ist die VXLAN Implementation noch nicht stabil genug, dass wir ihnen diese empfehlen könnten. Bitte verwenden sie daher für produktive Umgebungen bitte eine FortiOS 6.0 Version oder höher.

Bei einer VXLAN Implementation muss beachtet werden, dass auf beiden FortiGates ein Softwareswitch angelegt werden muss. Der über Softwareswitches fliessende Traffic kann nicht von Netzwerkprozessoren beschleunigt werden. Dies bedeutet, dass dieser von der CPU des FortiGates verarbeitet werden muss und eine entsprechend höhere CPU Auslastung mit sich bringt.

FortiOS 6.2: Jetzt mit VLAN über VXLAN Support!

Seit FortiOS 6.2 wird auch die Übermittlung von VLAN Tags über ein VXLAN unterstützt. Im Wireshark sieht das versendete Frame dann so aus:

Wir können (von oben nach unten je eine Zeile) den Frame Header, den äusseren Ethernet 2 Header, den IPv4 Header, den UDP Header, den VXLAN Header, den inneren Ethernet 2 Header, den inneren VLAN Header, den inneren IPv4 Header und den ICMP Header sehen.

Konfigurieren können wir die VLANs im VXLAN folgendermassen:

config system interface
edit "vlan10"
set interface "local1"
set vlanid 10
next
end

Wir fügen dem VXLAN Softwareswitch namens „local1“ einfach das VLAN 10 hinzu.

VXLAN über SD-WAN: Auch dies ist möglich!

Um die Verfügbarkeit des VXLAN Setups weiter zu optimieren besteht die Möglichkeit, den VXLAN Traffic über ein SD-WAN senden zu lassen. Wenn beide Seiten redundant angebunden sind, kann eine gute Ausfallsicherheit erzielt werden. Wichtig ist, dass die Ziel IP über beide Internetverbindungen des Standorts erreichbar ist.

Fortinet hat für dieses Szenario im Tech-Tip Artikel „VXLAN with SD-WAN“ dokumentiert.

6 Antworten auf „VXLAN: L2 Traffic zwischen Standorten übertragen“

  1. Hallo Zusammen,

    ich habe VxLAN over IPSec zwischen zwei Fortigate 60E v6.2.3 konfiguriert.
    Zum Testen habe ich die zwei FWs an einem Router angeschlossen und es hat geklappt(Es kann die Geräte an der anderen FW erreichen)
    Nachdem ich die FWs in Betrieb genommen hatte (die FWs sind jetzt durch das Internet vebunden), ging die Ping nicht mehr .
    Hat jemend das gleiche Problem gehabt??

    1. Guten Tag Mouhanad
      Besten Dank für Deinen Kommentar.
      Wir bieten über unseren Blog keinen Support für technische Probleme. In diesem Konkreten Fall kommt erschwerend hinzu, dass eine allgemeine Aussage ohne Einblick in die Konfiguration leider nicht möglich ist.
      Ich kann Dir leider nur soweit Auskunft geben, dass uns bisher keine VXLAN relevanten Probleme unter FortiOS 6.2.3 bekannt sind.
      Wenn Du mögliche MTU Probleme ausgeschlossen hast und die Konfiguration (vor allem die IP Adressen der jeweiligen Gegenseite) geprüft hast und das Setup noch immer nicht funktioniert, steht Dir Dein zuständiger Support (Für Endkunden der Reseller; Für Reseller der Distributor; Und für alle auch der Fortinet Support direkt) sicher unterstützend zur Seite.
      Freundliche Grüsse
      Das Tech-Team der Boll

  2. Hallo Boll Techies

    Wie löst Fortigate das Thema der MTU bei VXLAN-over-IPSec-over-PublicInternet?

    Ein klassisches Ethernet-Segment bzw VLAN – bzw die End-Hosts – gehen davon aus dass sie MTU 1500 haben, zu jedem anderen Teilnehmer im gleichen Subnet – also auch jene jeweils jenseits des VXLAN-Tunnels.

    VXLAN-Encapsulation braucht alleine 50 Bytes zusätzlich, ein IPSec-Tunnel – je nach Modus – will nochmal seine 100bytes haben. Bei Transport über das öffentliche Internet sollte man gleich noch 8 bytes für PPPoE mit einrechnen.

    Bleiben also weniger als 1350 bytes Nutzlast, welche ein VXLAN-in-IPSec-in-PPPoE-over-PublicInternet-Paket als Nutzlast mitnehmen könnte.

    Was also machen die VXLAN-fähigen Fortis, wenn hier ein Host von der einen Seite mit einem 1500byte-Paket daherkommt, und es gern auf die andere Seite transportiert hätte? Fragmentieren? MSS-Clamping bei TCP? ICMP Fragmentation Needed schicken? Droppen?

    Das ist eine spannende Frage, weil ein VXLAN-„Encapsulator“ ist seiner Natur nach zunächst ein L2-Device, also eine Bridge. Bridges können aber weder fragmentieren noch Unreachables schicken oder TCP-Headers manipulieren.

    Das wär mal einen nachfolge-Artikel wert 🙂

    Gruss
    Marc

  3. Guten Tag zusammen,

    wird auch das Multicast Traffic transparent transportiert oder muss man unbedingt eine VXLAN-Interface von Typ „ipv4-multicast“ als „ip-version“ konfigurieren um den Multicast Verkehr zu erlauben?

    Danke und freundliche Grüsse.
    Samuel

    1. Guten Tag Samuel
      Besten Dank für Deinen Kommentar.
      Was innen durch den Tunnel gesendet wird hat keinen Einfluss auf das, was aussen am Tunnel geschieht. Das Konfigurations Flag „ipv4-multicast“ bezieht sich nur auf den äusseren Teil des Tunnels. Werden also die VXLAN Pakete über Unicast übertragen, wird „ipv4-unicast“ ausgewählt, werden die Pakete an mehrere Empfänger per Multicast gesendet, wird „ipv4-multicast“ angegeben.
      Zum beispiel:
      config system vxlan
      edit „vxlan“
      set interface „dmz“
      set vni 1234
      set ip-version ipv4-multicast
      set remote-ip „225.0.0.3“
      next
      end
      In diesem Beispiel werden die in VXLAN eingepackten Pakete also per Multicast an alle Geräte gesendet, welche auf die Adresse 225.0.0.3 hören.
      Ich hoffe, das hat deine Frage beantwortet.
      Freundliche Grüsse
      Das Tech-Team der Boll

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.