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)

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 …

Im FortiOS 5.6.0, 5.6.1 und 5.6.2 gibt es mit der nativen VXLAN Implementation noch Probleme. Gewisser Multicast Traffic an die FortiGates des jeweils anderen Standortes wird nicht weitergeleitet. Diese Probleme wurden im 5.6.3 Release behoben.

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.

0 Responses to “VXLAN: L2 Traffic zwischen Standorten übertragen”


  • No Comments

Leave a Reply