Dieses Dokument führt Sie durch die erforderlichen Schritte, um Probleme zu vermeiden, die bei der Fragmentierung eines Pakets auftreten können. Ein Beispiel für ein Fragmentierungsproblem ist die Möglichkeit, einen Ping an eine vernetzte Ressource zu senden, aber die Unmöglichkeit, mit einer bestimmten Anwendung, z. B. E-Mail oder Datenbanken, eine Verbindung zu derselben Ressource herzustellen.
Stellen Sie sicher, dass die folgenden Anforderungen erfüllt sind, bevor Sie diese Konfiguration ausprobieren:
Verbindung zwischen VPN-Peers
Dieses Dokument ist nicht auf bestimmte Software- und Hardware-Versionen beschränkt.
In diesem Dokument wird die folgende Netzwerkeinrichtung verwendet:
Diese Konfiguration kann auch mit den folgenden Hardware- und Softwareversionen verwendet werden:
IOS-Router
PIX/ASA-Sicherheitsgeräte
Weitere Informationen zu Dokumentkonventionen finden Sie unter Cisco Technical Tips Conventions (Technische Tipps von Cisco zu Konventionen).
IP unterstützt eine maximale Länge von 65.536 Byte für ein IP-Paket. Die meisten Protokolle auf der Sicherungsschicht unterstützen jedoch eine viel kleinere Länge, die als Maximum Transmission Unit (MTU) bezeichnet wird. Basierend auf der unterstützten MTU kann es erforderlich sein, ein IP-Paket aufzubrechen (zu fragmentieren), um es über einen bestimmten Medientyp auf der Sicherungsschicht zu übertragen. Das Ziel muss dann die Fragmente wieder in das ursprüngliche, vollständige IP-Paket zusammensetzen.
Wenn Sie ein VPN zum Schutz von Daten zwischen zwei VPN-Peers verwenden, wird den ursprünglichen Daten zusätzlicher Overhead hinzugefügt, was eine Fragmentierung erforderlich machen kann. In dieser Tabelle sind Felder aufgeführt, die den geschützten Daten möglicherweise hinzugefügt werden müssen, um eine VPN-Verbindung zu unterstützen. Beachten Sie, dass mehrere Protokolle erforderlich sein können, wodurch sich die Größe des ursprünglichen Pakets erhöht. Wenn Sie beispielsweise eine L2L DMVPN IPSEC-Verbindung zwischen zwei Cisco Routern verwenden, bei der Sie einen GRE-Tunnel implementiert haben, benötigen Sie diesen zusätzlichen Overhead: ESP, GRE und den äußeren IP-Header. Wenn Sie eine IPSec-Client-Verbindung zu einem VPN-Gateway haben, wenn der Datenverkehr ein Adressgerät durchläuft, benötigen Sie diesen zusätzlichen Overhead für Network Address Translation- Traversal (NAT-T) sowie den äußeren IP-Header für die Tunnelmodusverbindung.
Wenn die Quelle ein Paket an ein Ziel sendet, legt sie einen Wert im Feld "Control Flags" der IP-Header fest, der die Fragmentierung des Pakets durch zwischengeschaltete Geräte beeinflusst. Das Kontrollflag ist drei Bit lang, aber nur die ersten beiden werden für die Fragmentierung verwendet. Wenn das zweite Bit auf 0 gesetzt ist, darf das Paket fragmentiert werden. Wenn es auf 1 gesetzt ist, darf das Paket nicht fragmentiert werden. Das zweite Bit wird allgemein als Nicht-Fragmentierungs-Bit (DF) bezeichnet. Das dritte Bit gibt an, wann die Fragmentierung auftritt, ob dieses fragmentierte Paket das letzte Fragment ist (auf 0 festgelegt) oder ob es weitere Fragmente (auf 1 festgelegt) gibt, aus denen das Paket besteht.
Es gibt vier Bereiche, die Probleme verursachen können, wenn eine Fragmentierung erforderlich ist:
Zusätzliche Gemeinkosten bei CPU-Zyklen und Arbeitsspeicher werden von den beiden Geräten benötigt, die Fragmentierung und Reassemblierung durchführen.
Wenn ein Fragment auf dem Weg zum Ziel verworfen wird, kann das Paket nicht wieder zusammengesetzt werden, und das gesamte Paket muss fragmentiert und erneut gesendet werden. Dies führt zu zusätzlichen Durchsatzproblemen, insbesondere in Situationen, in denen der betreffende Datenverkehr ratenbegrenzt ist und die Quelle Datenverkehr über den zulässigen Grenzwert sendet.
Bei der Paketfilterung und Stateful-Firewalls können Probleme bei der Verarbeitung der Fragmente auftreten. Wenn eine Fragmentierung auftritt, enthält das erste Fragment einen äußeren IP-Header, den inneren Header wie TCP, UDP, ESP und andere und einen Teil der Nutzlast. Spätere Fragmente des ursprünglichen Pakets kontrahieren einen äußeren IP-Header und die Fortsetzung der Nutzlast. Das Problem bei diesem Prozess ist, dass bestimmte Firewalls die inneren Header-Informationen in jedem Paket sehen müssen, um intelligente Filterentscheidungen zu treffen. Wenn diese Informationen fehlen, können sie versehentlich alle Fragmente mit Ausnahme des ersten verwerfen.
Die Quelle im IP-Header des Pakets kann das dritte Steuerbit so einstellen, dass es nicht fragmentiert wird, was bedeutet, dass, wenn ein zwischengeschaltetes Gerät das Paket empfängt und fragmentieren muss, das zwischengeschaltete Gerät es nicht fragmentieren kann. Stattdessen verwirft das zwischengeschaltete Gerät das Paket.
Die meisten Netzwerke verwenden Ethernet mit einem MTU-Standardwert von 1.500 Byte, der normalerweise für IP-Pakete verwendet wird. Um herauszufinden, ob eine Fragmentierung auftritt oder erforderlich ist, aber nicht durchgeführt werden kann (DF-Bit ist festgelegt), starten Sie zuerst Ihre VPN-Sitzung. Anschließend können Sie eine dieser vier Prozeduren verwenden, um die Fragmentierung zu ermitteln.
Pingen Sie ein Gerät am anderen Ende. Dabei wird davon ausgegangen, dass Ping-Signale über den Tunnel gesendet werden können. Wenn dies erfolgreich ist, versuchen Sie, über dasselbe Gerät auf eine Anwendung zuzugreifen. Wenn sich beispielsweise ein Microsoft E-Mail- oder Remotedesktop-Server im Tunnel befindet, öffnen Sie Outlook, und versuchen Sie, Ihre E-Mail herunterzuladen, oder versuchen Sie, Remotedesktop auf den Server herunter zu laden. Wenn dies nicht funktioniert und Sie die richtige Namensauflösung haben, besteht eine gute Chance, dass die Fragmentierung das Problem ist.
Verwenden Sie auf einem Windows-Gerät Folgendes: C:\> ping -f -l paketgröße_in_bytes ziel_IP_adresse.
Mit der Option -f wird angegeben, dass das Paket nicht fragmentiert werden kann. Mit der -l-Option wird die Länge des Pakets angegeben. Versuchen Sie es zunächst mit einer Paketgröße von 1.500. Beispiel: ping -f -l 1500 192.168.100. Wenn eine Fragmentierung erforderlich ist, aber nicht durchgeführt werden kann, erhalten Sie eine Meldung wie diese: Pakete müssen fragmentiert werden, aber DF-Satz.
Führen Sie auf Cisco Routern den Befehl debug ip icmp aus, und verwenden Sie den erweiterten Ping-Befehl. Wenn ICMP:dst (x.x.x.x)-Fragmentierung erforderlich und DF festgelegt erscheint, unerreichbar an y.y.y.y gesendet, wobei x.x.x.x ein Zielgerät ist, und y.y.y.y Ihr Router ist, teilt Ihnen ein zwischengeschaltetes Gerät mit, dass Fragmentierung erforderlich ist, da Sie jedoch das DF-Bit in der Echo-Anforderung setzen, kann ein zwischengeschaltetes Gerät es nicht in der Reihenfolge fragmentieren um sie an den nächsten Hop weiterzuleiten. Verringern Sie in diesem Fall allmählich die MTU-Größe der Pings, bis Sie einen Ping finden, der funktioniert.
Verwenden Sie für Cisco Security Appliances einen Erfassungsfilter.
ciscoasa(config)#access-list outside_test permit tcp any host 172.22.1.1 eq 80
Hinweis: Wenn Sie die Quelle wie eine andere belassen, kann der Administrator alle Network Address Translation (NAT) überwachen.
ciscoasa(config)#access-list outside_test permit tcp host 172.22.1.1 eq 80 any
Hinweis: Wenn Sie die Quell- und Zielinformationen umkehren, können Sie den zurückkehrenden Datenverkehr erfassen.
ciscoasa(config)# capture outside_interface access-list outside_test interface outside
Der Benutzer muss eine neue Sitzung mit Anwendung X starten. Nachdem der Benutzer eine neue Sitzung mit Anwendung X initiiert hat, muss der ASA-Administrator den Befehl show capture outside_interface eingeben.
Es gibt verschiedene Möglichkeiten, Probleme mit der Fragmentierung zu lösen. Diese Punkte werden in diesem Abschnitt behandelt.
Die statische MTU-Einstellung kann Probleme mit der Fragmentierung lösen.
MTU-Änderung auf dem Router:
Beachten Sie, dass das Gerät, das als VPN-Gateway fungiert, bei manueller Festlegung der MTU auf dem Gerät angewiesen wird, die empfangenen Pakete zu fragmentieren, bevor sie geschützt werden, und sie über den Tunnel zu senden. Dies ist besser, als wenn der Router den Datenverkehr schützt und ihn dann fragmentiert, ihn aber vom Gerät fragmentiert.
Warnung: Wenn Sie die MTU-Größe auf einer Geräteschnittstelle ändern, werden alle auf dieser Schnittstelle terminierten Tunnel deaktiviert und neu erstellt.
Verwenden Sie auf Cisco Routern den Befehl ip mtucommand, um die MTU-Größe an der Schnittstelle anzupassen, an der das VPN terminiert wird:
router (config)# interface type [slot_#/] port_# router (config-if)# ip mtu MTU_size_in_bytes
MTU-Änderung auf ASA/PIX:
Verwenden Sie auf ASA/PIX-Geräten den Befehl mtucommand, um die MTU-Größe im globalen Konfigurationsmodus anzupassen. Standardmäßig ist der MTU-Wert auf 1500 festgelegt. Wenn Sie z. B. eine Schnittstelle auf Ihrer Sicherheitsanwendung hatten, die den Namen Outside trug (wo das VPN terminiert wird) und Sie (mithilfe der im Abschnitt Fragmentierung erkennen aufgeführten Maßnahmen) festgestellt haben, dass Sie 1380 als Fragmentgröße verwenden möchten, verwenden Sie den folgenden Befehl:
security appliance (config)# mtu Outside 1380
Die maximale TCP-Segmentgröße kann Probleme mit der Fragmentierung lösen.
Hinweis: Diese Funktion funktioniert nur mit TCP; andere IP-Protokolle müssen eine andere Lösung verwenden, um IP-Fragmentierungsprobleme zu lösen. Selbst wenn Sie die IP-MTU auf dem Router festlegen, hat dies keinen Einfluss darauf, was die beiden End-Hosts im TCP-Drei-Wege-Handshake mit TCP-MSS aushandeln.
MSS-Änderung auf dem Router:
Bei TCP-Datenverkehr kommt es zu einer Fragmentierung, da der TCP-Datenverkehr in der Regel zum Transport großer Datenmengen verwendet wird. TCP unterstützt eine Funktion namens TCP Maximum Segment Size (MSS), mit der die beiden Geräte eine geeignete Größe für den TCP-Datenverkehr aushandeln können. Der MSS-Wert wird auf jedem Gerät statisch konfiguriert und stellt die Puffergröße für ein erwartetes Paket dar. Wenn zwei Geräte TCP-Verbindungen herstellen, vergleichen sie den lokalen MSS-Wert mit dem lokalen MTU-Wert innerhalb des Drei-Wege-Handshakes. Der jeweils niedrigere Wert wird an den Remote-Peer gesendet. Die beiden Peers verwenden dann den unteren der beiden ausgetauschten Werte. Gehen Sie folgendermaßen vor, um diese Funktion zu konfigurieren:
Verwenden Sie auf Cisco Routern den Befehl tcp adjust-mss an der Schnittstelle, an der das VPN terminiert wird.
router (config)# interface type [slot_#/] port_# router (config-if)# ip tcp adjust-mss MSS_Size_in_bytes
MSS-Änderung auf ASA/PIX:
Um sicherzustellen, dass die maximale TCP-Segmentgröße den von Ihnen festgelegten Wert nicht überschreitet und dass die maximale Größe nicht kleiner als eine angegebene Größe ist, verwenden Sie den Befehl sysopt connection im globalen Konfigurationsmodus. Um die Standardeinstellung wiederherzustellen, verwenden Sie die Form dieses Befehls. Der voreingestellte Maximalwert ist 1380 Byte. Die Funktion ist standardmäßig mindestens deaktiviert (auf 0 eingestellt).
So ändern Sie den standardmäßigen maximalen MSS-Grenzwert:
security appliance (config)# sysopt connection tcp-mss MSS_size_in_bytes
Hinweis: Wenn Sie die maximale Größe auf größer als 1380 festlegen, können Pakete in Abhängigkeit von der MTU-Größe (standardmäßig 1500) fragmentiert werden. Eine große Anzahl von Fragmenten kann die Leistung der Sicherheits-Appliance beeinträchtigen, wenn sie die Funktion Frag Guard verwendet. Wenn Sie die Mindestgröße festlegen, verhindert dies, dass der TCP-Server viele kleine TCP-Datenpakete an den Client sendet und die Leistung des Servers und des Netzwerks beeinträchtigt.
So ändern Sie den MSS-Mindestgrenzwert:
security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
Sicherheits-Appliance (config)# sysopt-Verbindung tcp-mss Minimum MSS_Size_in_Bytes
Hinweis: Lesen Sie den Abschnitt MPF Configuration to Allow Packets that Exceed MSS section des Dokuments PIX/ASA 7.X Problem: MSS Exceeded - HTTP Clients Cannot Browse to Some Web Sites (MSS-Pakete überschreiten), um weitere Informationen zu erhalten, damit die überschrittenen MSS-Pakete eine andere Methode darstellen.
Die PMTUD kann Probleme mit der Fragmentierung lösen.
Das Hauptproblem bei TCP-MSS ist, dass der Administrator wissen muss, welchen Wert er auf dem Router konfigurieren muss, um das Auftreten von Fragmentierung zu verhindern. Dies kann problematisch sein, wenn zwischen Ihnen und dem Remote-VPN-Standort mehr als ein Pfad vorhanden ist. Wenn Sie Ihre erste Abfrage durchführen, stellen Sie fest, dass die zweite oder dritte kleinere MTU statt der kleinsten auf der Routing-Entscheidung basiert, die in Ihrer ursprünglichen Abfrage verwendet wird. Mit der PMTUD können Sie einen MTU-Wert für IP-Pakete bestimmen, der eine Fragmentierung vermeidet. Wenn ICMP-Nachrichten von einem Router blockiert werden, ist die Pfad-MTU ungültig, und Pakete mit festgelegtem DF-Bit werden verworfen. Verwenden Sie den Befehl set ip df, um das DF-Bit zu löschen und die Fragmentierung und Übertragung des Pakets zuzulassen. Durch die Fragmentierung kann die Geschwindigkeit der Paketweiterleitung im Netzwerk verlangsamt werden. Zugriffslisten können jedoch verwendet werden, um die Anzahl der Pakete zu begrenzen, für die das DF-Bit gelöscht wird.
Drei Probleme können dazu führen, dass die PMTUD nicht funktioniert:
Ein zwischengeschalteter Router kann das Paket verwerfen und nicht mit einer ICMP-Nachricht antworten. Dies ist im Internet nicht sehr verbreitet, kann jedoch in Netzwerken üblich sein, in denen Router so konfiguriert sind, dass sie nicht mit Meldungen reagieren, die ICMP nicht erreichen kann.
Ein zwischengeschalteter Router kann mit einer Meldung antworten, dass ICMP nicht erreichbar ist. Diese Meldung wird jedoch beim Rücklauf durch eine Firewall blockiert. Dies kommt häufiger vor.
Die Meldung "ICMP unreachable" gelangt zurück zur Quelle, die Fragmentierungsmeldung wird jedoch ignoriert. Dies ist das ungewöhnlichste der drei Probleme.
Wenn das erste Problem auftritt, können Sie entweder das DF-Bit im IP-Header löschen, den die Quelle dort platziert hat, oder die TCP-MSS-Größe manuell anpassen. Um das DF-Bit zu löschen, muss ein zwischengeschalteter Router den Wert von 1 auf 0 ändern. Normalerweise geschieht dies über einen Router in Ihrem Netzwerk, bevor das Paket das Netzwerk verlässt. Dies ist eine einfache Codekonfiguration für einen IOS-basierten Router:
Router (config) # access-list ACL_# permit tcp any any Router (config) # route-map route_map_name permit seq# Router (config-route-map) # match ip address ACL_# Router (config-route-map) # set ip df 0 Router (config-route-map) # exit Router (config) # interface type [slot#/]port # Router (config-if) # ip policy router-map route_map_name
PMTUD- und GRE-Tunnel
Standardmäßig führt ein Router keine PMTUD für von ihm selbst generierte GRE-Tunnelpakete aus. Verwenden Sie die folgende Konfiguration, um die PMTUD an GRE-Tunnelschnittstellen zu aktivieren und den Router am MTU-Tuning-Prozess für Quell-/Zielgeräte für den Datenverkehr durch den Tunnel zu beteiligen:
Router (Konfiguration) # interface tunnel tunnel_#
Router (config-if) # tunnel path-mtu-discovery
Der Befehl tunnel path-mtu-discovery aktiviert die PMTUD für die GRE-Tunnelschnittstelle eines Routers. Der optionale age-timer-Parameter gibt die Anzahl der Minuten an, nach denen die Tunnelschnittstelle die maximal erkannte MTU-Größe zurücksetzt, minus 24 Byte für den GRE-Header. Wenn Sie unendlich für den Zeitgeber angeben, wird der Zeitgeber nicht verwendet. Der Parameter min-mtu gibt die Mindestanzahl von Bytes an, die den MTU-Wert umfasst.
PIX/ASA 7.x - Clear Don't Fragment (DF) oder die Verarbeitung großer Dateien oder Pakete.
Sie können immer noch nicht richtig auf das Internet, große Dateien oder Anwendungen über den Tunnel zugreifen, da die Fehlermeldung MTU size (MTU-Größe) angezeigt wird:
PMTU-D packet 1440 bytes greater than effective mtu 1434, dest_addr=10.70.25.1, src_addr=10.10.97.55, prot=TCP
Um dieses Problem zu beheben, müssen Sie das DF-Bit von der externen Schnittstelle des Geräts löschen. Konfigurieren Sie die DF-Bit-Richtlinie für IPSec-Pakete mit dem Befehl crypto ipsec df-bit im globalen Konfigurationsmodus.
pix(config)# crypto ipsec df-bit clear-df outside
Mit der Funktion "DF-Bit mit IPSec-Tunneln" können Sie angeben, ob die Sicherheits-Appliance das DF-Bit (Don't Fragment) aus dem gekapselten Header löschen, festlegen oder kopieren kann. Das DF-Bit im IP-Header bestimmt, ob ein Gerät ein Paket fragmentieren darf.
Verwenden Sie den Befehl crypto ipsec df-bit im globalen Konfigurationsmodus, um die Sicherheits-Appliance so zu konfigurieren, dass das DF-Bit in einem gekapselten Header angegeben wird.
Wenn Sie den IPSec-Datenverkehr im Tunnelmodus kapseln, verwenden Sie die clear-df-Einstellung für das DF-Bit. Mit dieser Einstellung kann das Gerät Pakete senden, die größer sind als die verfügbare MTU-Größe. Diese Einstellung ist auch dann angemessen, wenn Sie die verfügbare MTU-Größe nicht kennen.
Hinweis: Wenn weiterhin Fragmentierungsprobleme und verlorene Pakete auftreten, können Sie die MTU-Größe optional mit dem Befehl ip mtu tunnel interface manuell anpassen. In diesem Fall fragmentiert der Router das Paket, bevor es geschützt wird. Dieser Befehl kann in Verbindung mit der PMTUD und/oder der TCP-MSS verwendet werden.
Für diese Konfiguration ist derzeit kein Überprüfungsverfahren verfügbar.
Das Output Interpreter-Tool (OIT) (nur registrierte Kunden) unterstützt bestimmte show-Befehle. Verwenden Sie das OIT, um eine Analyse der show-Befehlsausgabe anzuzeigen.
Angenommen, der IPSec-Tunnel hat sich zwischen dem Router und PIX eingerichtet. Wenn Fehlermeldungen bei der Verschlüsselung angezeigt werden, wonach Pakete verworfen werden, führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Führen Sie einen Sniffer-Trace vom Client zum Server durch, um herauszufinden, welche MTU am besten zu verwenden ist.
Sie können auch den Ping-Test verwenden:
ping -l 1400 192.168.1.1 -f
192.168.1.1 ist die IP-Adresse des Remote-Computers.
Den Wert von 1400 um 20 reduzieren, bis eine Antwort vorliegt.
Hinweis: Der magische Wert, der in den meisten Fällen funktioniert, ist 1300.
Nachdem die maximale Segmentgröße erreicht wurde, passen Sie sie für die verwendeten Geräte entsprechend an:
PIX-Firewall:
sysopt connection tcpmss 1300
Router:
ip tcp adjust-mss 1300
Problem:
Sie können einen Ping zwischen den VPN-Netzwerken senden, aber es können keine Remotedesktopprotokoll- (RDP) und Citrix-Verbindungen über den Tunnel hergestellt werden.
Lösung:
Das Problem kann die MTU-Größe auf dem PC hinter PIX/ASA sein. Legen Sie die MTU-Größe für den Client-Computer auf 1300 fest, und versuchen Sie, die Citrix-Verbindung über den VPN-Tunnel herzustellen.
Überarbeitung | Veröffentlichungsdatum | Kommentare |
---|---|---|
1.0 |
19-Feb-2009 |
Erstveröffentlichung |