Layer 2 Forwarding Protokoll Im Rahmen der Veranstaltung Communication Technologies I SS 2005 Ausgearbeitet von: Dominik Bossdorf, Mirko Schäfer Inhalt: 1. Layer 2 Forwarding Protokoll a. Motivation und Ziele 2. Exkurs OSI Layer 2 a. Netze mit Punkt-zu-Punkt Verbindungen b. Netze mit Vielfachzugriff 3. Exkurs a. PPP Protokoll b. SLIP c. PAP / CHAP Authentifizierung 4. Detailansicht L2F Paket a. L2F Header b. L2F Management Pakete 5. Einsatz und Praxisbeispiele a. Serverseitige Erweiterung von Netzten b. L2F Protokoll Verbindungshandshake 6. Fazit und Bewertung a. Vergleich VPN Protokolle b. Stärken und Schwächen 7. Quellenangaben und Worterläuterungen 1. Layer Two Forwarding Protokoll Das in dieser Ausarbeitung behandelte Datenprotokoll wird in der RFC2341 beschrieben und spezifiziert. Das Layer Two Forwarding Protokoll (im weiteren Text als L2F bezeichnet) ist eine Entwicklung entstanden in einem Kooperationsprojekt von unter anderem Cisco Systems,AT&T und Northern Telecom, und war eines der ersten Protokollansätze zur Erstellung von Virtuellen Netzwerken in einer bestehenden Infrastruktur. Mittlerweile ist das L2F Protokoll auf Grund der fortgeschrittenen technischen Entwicklung und der bestehenden Probleme durch das L2TP (Layer Two Tunneling Protokoll) abgelöst worden. a. Motivation und Ziele Motivation bzw. Ziel der Implementierung war es unter anderem den ISPs* eine Möglichkeit zu schaffen ein physikalisches Einwahlinterface vom eigentlichen NAS* zu trennen und somit eine höhere Flexibilität und Sicherheit im ISP Einwahlnetz zu schaffen ohne die verwendeten PPP Datenpakte entpacken zu müssen. Des Weiteren sollte es möglich sein mehrere PPP Verbindungen zu einem Datenstrom zusammenzufassen bzw. einen Tunnel zu erzeugen den dann mehrere Verbindungen gleichzeitig nutzen können. Dabei sollten diese Eigenschaften möglichst Protokollneutral dem Enduser zur Verfügung gestellt werden ohne das dieser Änderungen an seiner Hard oder Software durchzuführen hat. Diese Anforderungen und Eigenschaften wurden daraufhin im L2F implementiert. Eine Möglichkeit dieses zu erreichen ist nötigen Datenpakete bereits auf einem niedrigeren OSI* Layer zu modifizieren, zu kapseln bzw. weiterzuleiten. 2. Exkurs OSI Layer 2 Der OSI Layer 2 wird als Sicherungsschicht oder Data Link Layer bezeichnet. Hauptaufgabe der Sicherungsschicht ist es der Vermittlungsschicht (Layer 3) einen Datenkanal frei von Übertragungsfehlern zur Verfügung zu stellen. Dazu werden die zu übertragenden Daten in Daten Rahmen (Data Frames) aufgeteilt und dann sequenziell übertragen. War die Übertragung des Frames erfolgreich erfolgt die „Rück“ Übertragung eines Bestätigungsrahmens (Acknowledgement Frame) durch den Empfänger. Häufig sind auch Techniken zur Flusskontrolle und Fehlerbehebung in diese Teilschicht implementiert. Netzwerke können in der Sicherungsschicht in 2 Gruppen aufgeteilt werden. a. Netze mit Punkt-zu-Punkt Verbindungen Bei Punkt-zu-Punkt Verbindungen besteht eine direkte und exklusive Verbindung zwischen zwei Stationen so das bei Duplex - Übertragungen eine Kollision von Datenpaketen auf Grund von vielfach Zugriffen auf den Übertragungskanal ausgeschlossen werden kann. Protokolle die auf dieser Ebene zum Einsatz kommt sind das HDLC* oder SLIP* Protokoll. Bekannter und immer noch im Einsatz ist jedoch das Point-To-Point (PPP) Protokoll. Dieses Protokoll baut über ein geeignetes Übertragungsmedium eine Kommunikationsverbindung mit zwei Teilnehmern auf. Dabei werden Authentifizierung, Flusskontrolle, Fehlererkennung bzw. Korrektur und Datenkompressionsmechanismen durch das Protokoll zwischen den Teilnehmern verhandelt und angewandt. Es ermöglicht so eine Interoperabilität der verschiedensten Netzwerkstrukturen. Dabei können durch das gleiche Medium mehrere PPP Verbindungen zur gleichen Zeit existieren. b. Netze mit Vielfachzugriff Bei Netzwerken mit Vielfach Medienzugriffen z.B. Ethernet, Token Ring muss das eingesetzte Netzwerkprotokoll vor allem den Medienzugriff durch die teilnehmenden Stationen überwachen und regulieren. Zu diesem Zweck wurde eine extra Teilschicht in der Sicherungsschicht implementiert. Der als MAC-Teilschicht* bezeichnete Sub-Layer beinhaltet sämtliche Mechanismen zur „Verkehrs, Sende und Empfangsregulierung“. Exemplarisch eingesetzte Verfahren zur Kanalzuteilung in einem solchen Netz sind z.B. das CSMA,CSMA/CD (Ethernet, WLAN) FDMA, TDMA (GSM), Token (TokenRing Netz). Der grossteil der heutzutage eingesetzten LANs arbeiten nach dem Mehrfachzugriffs Verfahren während in WANs mehrheitlich Punkt-zu-Punkt Verbindungen zum Einsatz kommen. 3. Exkurs PPP-Protokoll, SLIP und PAP / CHAP Da das L2F-Paket in seiner Payload entweder PPP- oder aber SLIP-Pakete aufnehmen kann, folgt nun eine kurze Erläuterung der wichtigsten Protokolleigenschaften. a. PPP-Protokoll Beim Point-to-Point Protokoll handelt es sich um ein Protokoll der Sicherungsschicht , welches , wie der Name schon sagt , über eine Punkt-zu-Punkt-Verbindung arbeitet und 2 Endpunkte miteinander verbindet. Das Protokoll arbeitet über verschiedene Arten von Wählleitungen und ist heutzutage ein bevorzugtes Protokoll zur Einwahl von privaten Nutzern bei ihren Internet-Service-Provider über Wählleitungen (z.B. ISDN oder Modem). Für statische Verbindungen wird meist eine abgewandelte Form, wie zum Beispiel PPPoE (Point-to-Point over Ethernet) bei DSL benutzt. Das PPP ist in der Lage verschiedenste Protokolle der Vermittlungsschicht ( z.B. IP, IPX, AppleTalk , DECnet ..) in sich zu kapseln und so von einem Verbindungspunkt zum anderen zu transportieren . Das Format des PPP-Rahmens Flag : Jeder PPP-Frame beginnt und endet jeweils mit einem Flag mit dem Wert 01111110. Adresse: Der Wert dieses Feldes ist immer 11111111 Kontrolle: Auch hier ist der einzige mögliche Wert mit 00000011 vorgegeben. Sowohl der Kontroll-, als auch der Adress-Wert werden laut Spezifikation [RFC 1662] zu einem späteren Zeitpunkt definiert, was aber bis heute noch nicht geschehen ist. Somit sind diese beiden Werte entweder mit den festgelegten Werten zu besetzten, oder der Sender braucht diese Werte nicht zu senden, was dann natürlich 2 Byte Overhead erspart. Protokoll: Hier wird angegeben welches höhere Protokoll der Vermittlungsschicht im PPP gekapselt ist. Beispiele sind IP ( hexadezimal 21), AppleTalk (hexadezimal 29 ) oder auch DECnet (hexadezimal 27). Eine ausführliche Aufstellung aller Protokollcodes findet sich in der RFC1700. Payload: Dieses Feld enthält die eigentlichen gekapselten Daten, die von einem Protokoll der Vermittlungsschicht über die PPP-Verbindung gesendet werden. Prüfsumme: Dieses Feld enthält die Prüfsumme um eventuelle Bitfehler in einem übertragenem Rahmen zu erkennen. b. SLIP (Serial Line Internet Protocol) Das SLIP wird verwendet um eine IP-Verbindung zwischen 2 Computer herzustellen, die über eine Serielle Schnittstelle miteinander verbunden sind. Mit SLIP sind sehr einfache Verbindungen möglich, indem einfach die Oktets eines IPPaketes über ein serielles Kabel gesendet werden. SLIP besitzt weder eine Fehlererkennung, noch eine Adressierung. Das muss durch ein höherschichtiges Protokoll übernommen werden. c. PAP (Password Authentication Protocol) und CHAP (Challenge Handshake Authtentication Protocol) Das Layer 2 Forwarding Protkoll benutzt zur Authentifizierung beim Aufbau eines Tunnels entweder das CHAP- oder das PAP-Protokoll. Sowohl das CHAP-, als auch das PAP-Protokoll wurden ursprünglich entwickelt, um eine Authentifizierung von Einwahlen via PPP zu ermöglichen. Das PAP-Protokoll benutzt zur Authentifizierung ein Passwort welches allerdings im Klartext übertragen wird, was das Protokoll natürlich anfällig für das Mitlauschen des Passwortes durch potentielle Angreifer macht. Diese Schwachstelle versucht das CHAP-Protokoll durch Verschlüsselung zu korrigieren. Es benutzt zur Authentifizierung zwischen Server und Client einen 3-Wege Handshake. Wenn eine Verbindung besteht, kann jede Seite eine Anforderung zur Authentifizierung der Gegenseite stellen. Hierzu wird eine zufällig erzeugte Nummer oder String zusammen mit dem eigenem Hostnamen an die sich zu authentifizierende Seite geschickt. Die Gegenseite sucht anhand des Hostnamens in einer internen Datei nach dem zum jeweiligen Passwort für die Gegenseite und bildet über dieses, zusammen mit der Zufallszahl einen Hashwert. Dieser wird dann zur Gegenstelle übertragen. Die Gegenstelle vergleicht diesen Hashwert mit einem Hashwert, den sie selbst aus dem eigenem Passwort und der Zufallszahl gebildet hat. Stimmen beide Werte überein, dann wird die Verbindung akzeptiert, andernfalls wird sie verworfen. Der Vorteil dieser Authentifizierungsmethode ist der, das keine Passwörter übertragen werden, sondern nur Hashwerte, aus denen der Schlüssel nicht wieder errechnet werden kann. (Einweg-Hashfunktionen) 4. Detailansicht L2F Paket Das durch das L2F erstellte und übertragene Datenpaket lässt sich in 3 Teile separieren, in den L2F Header, die Payload und eine optionale Checksumme. a. der L2F Header Flags: Diese Felder geben die Nutzung der optionalen Felder an. Sind sie auf 1 gesetzt, wird das jeweilige Feld genutzt. Sie stehen für Payload Offset (F), Key (K), Sequence (S) und Checksum (C). P steht für Priority und gibt an, ob der jeweilige Empfänger der Payload bevorzugt behandelt werden soll. Version: Dieses Feld definiert die Version der L2F-Software die dieses Packet erzeugt hat. Das Feld muss den Wert 001 enthalten. Protocol: Hier wird definiert, welches Protokoll innerhalb des L2F Paketes transportiert wird. Mögliche Werte sind: 0x00 für Illegales Paket 0x01 für L2F Management Pakete zum Auf- und Abbau eines Tunnels bzw. zur Verwaltung der darin geführten Verbindung. 0x02 für PPP Pakete 0x03 für SLIP Pakete Wenn ein Paket mit einem anderen Wert empfangen wird, so wird es als ungültiges Paket angesehen. Sequence: Das Sequence Feld wird benutzt, falls das S Bit am Anfang des Headers auf 1 gesetzt ist. Bei Paketen vom Typ L2F Management muss, bei allen anderen kann es gesetzt werden. Durch die Sequence Nummer kann auf verlorene oder doppelt gesendete Pakete reagiert werden. Jede Sequenz von Paketen beginnt mit einer Sequence Nummer von 0. Jedes folgende Paket erhält die um 1 erhöhte Nummer. Die Fenstergröße für sequenzierte Pakete beträgt 127, das bedeutet wenn ein Paket kleiner oder gleich der Sequenz-Nummer des vorher empfangenen Paketes ist, bzw. um 127 größer ist, wird es verworfen. Multiplex ID: Dieser Wert definiert und identifiziert eine einzelne Verbindung innerhalb eines Tunnels. Dieses Feld kann jeden 16-bit Wert annehmen, außer dem Wert 0 , welcher für den Tunnel an sich steht. Client ID :Hier bekommt jeder einzelne Tunnel einen Wert. Lenght: In diesem Feld wird die Größe des gesamten L2F Paketes angegeben. Ist das empfangene Paket kleiner als der übermittelte Wert in diesem Feld, wird es verworfen, ist es länger werden die restlichen Bytes ignoriert. Offset: Dieses Feld ist vorhanden, wenn das F Bit gesetzt ist. Hier wird angegeben wie viele Bits nach dem L2F Header die eigentliche Payload beginnt. Ist der Wert z.B. 0 , dann beginnt die Payload sofort nach dem Header. Key: Auch dieses Feld wird nur genutzt, falls das entsprechende Bit (K) gesetzt ist. Dieser Schlüssel wird am Anfang der Verbindung zwischen den beiden Punkten ausgehandelt. Wenn ein empfangenes Paket nicht den erwarteten Schlüssel hat, wird es verworfen. Payload: Hier sind die eigentlichen Nutzdaten ( also PPP- oder SLIP-Frames) enthalten. Checksum:Wenn das C Bit gesetzt ist , steht hier eine 16-bit CRC Checksumme, die über das gesamte Paket inklusive Header und Flags berechnet wird. b. L2F Management Pakete Wenn im Feld Protocol des Headers L2F steht, bedeutet das, dass L2F Management Pakete in der Payload des Paketes gesendet werden. Die L2F Management Pakete werden z.B. benutzt um einen Tunnel aufzubauen oder zu schließen. Einige Beispiele für solche Management Pakete sind: L2F_CONF: Diese Nachricht wird gesendet, um einen Tunnel zwischen NAS und Home Gateway aufzubauen. L2F_OPEN: Diese Message steht , falls die MultiplexID auf 0 steht ,für die Beendigung der Setup-Phase des Tunnels und für den eigentlichen Tunnelaufbau. Falls die MultiplexID auf einen Wert größer als 0 gesetzt ist, steht sie für eine weitere Verbindung in einem schon bestehendem Tunnel. L2F_ECHO: Hiermit wird die Erreichbarkeit eines Clients überprüft. L2F_ClOSE: Zum Schließen eines Tunnels kann diese Message zu jeder Zeit von beiden Seiten der Verbindung gesendet werden. Falls die MultiplexID 0 ist, wird der ganze Tunnel geschlossen, ist sie größer steht sie für die Beendigung einer einzelnen Verbindung im Tunnel Dies waren die wichtigsten Management Messages .Von diesen vier Messages gibt es jeweils noch abgewandelte Formen, auf die wir aber hier nicht näher eingehen werden, da diese Vier das Prinzip der Management Messages im Großen und Ganzen erklären. 5. Einsatz und Praxisbeispiel Motivation bzw. Ziel der Implementierung war es unter anderem ein beliebiges OSI Layer 3 Protokoll z.B. (TCP/IP, IPX/SPX, Apple-Talk....) ,über eine bereits bestehende (Internet) Standart-Verbindung (z.B. PPP und TCP/IP über ISDN) , zwischen zwei bestimmten Netzwerken ohne zusätzliche Hard oder Software zu benutzen. Speziell wollte man mit Hilfe des L2F einzelne, externe Rechner in ein bestehendes Netzwerk integrieren ohne das Netzwerkprotokoll ändern zu müssen. [Einsatzbeispiel 1] a. Serverseitige Erweiterung von Netzwerken Einen Grossteil dieser Arbeit erledigt zwar schon das PPP Protokoll aber mit Hilfe des L2F sollte es möglich sein den Einwahlserver mit dem physikalischen Verbindungsinterface vom Server dessen Dienste man nutzen möchte zu trennen ohne die übertragenen Datenpakete erneut routen oder modifizieren zu müssen. L2F Intra Net 1 ung d n i erb P Verbindung 2 PP P PP V PPP Ver bind Network Access Server ung 3 PPP Verbindung 1 Client 1 PPP Verbindung 2 Client 2 ISP Einwahlserver 1 L2F PPP Verbindung 3 ISP Einwahlserver 2 Client 3 Hier ist auch eine weitere Eigenschaft des L2F zu erkennen. Durch das den Einsatz von L2F Verbindungen (schwarz markiert) können im ISP Netz eine Vielzahl von PPP Verbindungen (blau markiert) zur selben Zeit durch den gleichen Tunnel geleitet werden. Dies spart in den ISP Backbonenetzen wertvolle Ressourcen und ermöglicht eine flexiblere Skalierung. b. L2F Verbindungshandshake am Beispiel einer virtuellen Wählverbindung eines Remote-Users in ein Firmennetzwerk. Der Network Acces Server des ISP des Remote Users muss L2F unterstützen und die notwendigen Daten für den Tunnel haben. Der Remote User wählt sich z.B. via ISDN bei seinem ISP ein und authentifiziert sich für den Internetzugang. Anhand des Usernamens und der im NAS gespeicherten Einträge erkennt der NAS das Ziel der Verbindung und stellt einen Tunnel zwischen sich und dem Home Gateway des Remote Users her. Nun fordert das Home Gateway noch eine weitere Authentifizierung des Nutzers, falls diese gelingt, besteht nun eine virtuelle Verbindung zwischen Remote-User und Home Gateway. Als erstes wählt sich der Remote User z.B. per ISDN beim NAS seines ISP ein. Der NAS weiß nun anhand des Usernamens und seiner gespeicherten Daten, dass ein Tunnel zum Home Gateway des Users gewünscht wird. Nun beginnt der Tunnelaufbau zwischen Network Access Server und Home Gateway, falls noch keiner besteht. Die Verbindung wird mit Hilfe der L2F-Management-Pakete aufgebaut. Der Verbindungsaufbau beginnt mit einer L2F-Request Configuration Nachricht (L2F_CONF). Hier wird der Name des NAS ( NAS_name) sowie eine Zufallszahl (Challenge) zur Authentifizierung des NAS beim Gateway übergeben. Die Client-ID (CLID) ist auf 0 gesetzt, da zurzeit noch keine Verbindung existiert. Im Proto Feld steht L2F, was für gekapselte L2F Management Pakete in der Payload der L2F Pakete steht. Im Feld Assigned_CLID steht die erwartete Client-ID , die die Verbindung später hat. IP-Netz NAS Home Gateway L2F_CONF Proto=L2F ,Seq=0 ,MID=0,CLID=55,Key=0 Name: Gateway_name Challenge: Rnd2 Assigned_CLID: 66 Als nächstes antwortet der Home Gateway dem NAS. Die Nachricht enthält jetzt als Client-ID den vom NAS vorgegebenen Wert, den Namen des Home-Gateways, eine zweite Zufallszahl zur Authentifizierung des Gateways beim NAS , sowie seine erwartete Client-ID. Im 3. Schritt wird die L2F öffnet nun der NAS den Tunnel mit einer Accept Configuration Nachricht (L2F_OPEN). Die Sequence Nummer wird jeweils um eins erhöht und die Client-ID wird mit dem von der Gegenseite gegebenen Wert besetzt. Die Antwort besteht aus einem MD5 Hashwert der vorher vom Gateway gesendeten Zufallszahl und Passwort des Gateway, welches auch intern im NAS gespeichert ist. Dieser Wert wird auch im Feld Key übermittelt. Nun antwortet der Home Gateway ebenfalls mit einer Accept Configuration Nachricht mit seiner jeweiligen Client Id und seinem Key aus der zuvor übermittelten Zufallszahl und seinem Passwort . Wenn sich nun beide Seiten mittels der übermittelten Schlüssel bei ihrem jeweiligem Gegenüber authentifiziert haben, besteht nun ein Tunnel zwischen Gateway und NAS. Für den Remote User besteht allerdings immer noch nur eine Verbindung zum NAS des ISP. Jetzt muss sich der Remote User noch bei seinem Home Gateway für einen direkten Zugang authentifizieren. Wenn sich der Remote User mittels CHAP bei seinem ISP authentifiziert hat, kennt der ISP somit die Response des eigenen CHAP-Handshakes. Über den Tunnel wird nun eine L2F_OPEN Nachricht mit den vom Client empfangenen Daten sowie die Zufallszahl der Challenge an das Gateway gesendet. Dieses überprüft nun die Legitimität des Users anhand der lokal gespeicherten Daten und gibt den Tunnel frei oder lehnt die Verbindung ab. Nun ist die Verbindung zwischen Client und Home Gateway offen für PPP- oder SLIPPakete. Wird der Tunnel nicht mehr benötigt, kann er mittels L2F_CLOSE geschlossen werden. 5. Fazit und Bewertung Im folgenden Teil sollen nun die bisher beschriebenen Kernpunkte des Layer Two Forwarding Protokolls noch einmal kurz zusammengefasst und bewertet werden. Schon der Status „historic“ der RFC macht deutlich das es sich beim Layer Two Forwarding Protokoll um eine Technik handelt die heute nicht mehr zum Einsatz kommt. Jedoch sind zentrale Grundsätze und dort entwickelte Techniken noch in heutigen Protokollen im Einsatz so das das Wissen um das Layer Two Forwarding Protokoll hilft die momentan eingesetzten Techniken zu verstehen. a. Vergleich gängiger VPN Protokolle Die folgende Tabelle stellt noch einmal die gängigsten VPN Protokolle in zentralen Eigenschaften gegenüber und erleichtert somit die technische Einordnung des L2F. Eigenschaft / Protokoll Authentifizierung des Nutzers Unterstützung von NAT Multiprotokollfähigkeit Nutzdatenverschlüsselung Public Key Infrastruktur Authentizitätsprüfung von Datenpaketen L2F Ja Ja Ja Nein Nein Nein PPTP Ja Ja Ja Ja * Nein Nein * unsicher, RC4-Verfahren mit 40-128 Bit Schlüsseln L2TP Ja Ja Ja Nein Nein Nein IPSec Nein Ja Nein Ja Ja Ja Dazu sei gesagt das L2F das älteste der dargestellten Protokolle ist. Das dort mit L2TP angegebene Layer Two Tunneling Protokoll stammt aus der Fusion von L2F und PPTP und vereint deren Vorteile in sich. Es ist noch bis heute Bestandteil aller gängigen Betriebssysteme. So ist z.B. Microsoft Windows 2000 ab Werk zwar mit L2TP bzw. PPTP Clients ausgestattet jedoch nicht mit dem deutlich sichereren IPSec... b. Stärken und Schwächen Als Stärken für das L2F lassen sich die folgenden Aspekte feststellen: - Unveränderte Übertragung, Transport von Datenprotokollen höherer Layer Mehrere parallele Verbindungen innerhalb eines Tunnels sind möglich Hohe Performance da wenig Overhead Hohe Transparenz aus Sicht der Anwendungen Jedoch geben sich aus der heutigen Sicht auch die folgenden Schwächen zu erkennen. - Fehlende Unterstützung durch aktuelle Betriebssysteme Keine Nutzdatenverschlüsselung möglich Schwache , unsichere Authentifizierung der User Keine Authentifizitätsprüfung der übertragenen Daten Worterklärungen und Erläuterungen: HDCL = High Level Data Link Control ISP = Internet Service Provider L2F = Layer 2 Forwarding L2FP = Layer 2 Forwarding Protokoll MAC = Medium Access Control NAS = Network Access Server PPP = Point to Point Protokoll OSI = Open Systems Interconnection Quellenangaben: www.ietf.org/rfc www.wikipedia.de J.F.Kurose,K.W.Ross Computernetze, PearsonStudium 2002