Integration von NAT-Traversal in IPseCK
- Typ:Studienarbeit
- Betreuung:Michael Conrad, Marcus Schöller
- Bearbeitung:Daniel Stutz
-
Beschreibung
Möchte man IPsec hinter einem NAT-Gateway einsetzen, so kommt es zwangsläufig zu Problemen. Ein Problemfall ist die Modifikation des IP-Protokollkopfes durch das NAT-Gateway. Diese Änderungen werden durch IPsec erkannt und als Angriff auf die Integrität der Daten gewertet. Ein weiterer Problemfall ist die Verschlüsselung der Verbindungsdaten durch IPsec. Liegen diese nicht mehr im Klartext vor, kann das NAT-Gateway keine Modifkation dieser vornehmen und ist nicht in der Lage NAT für diese Verbindung zu realisieren. Eine mögliche Lösung des Problems stellt der Internet Draft draft-ietf-ipsec-udp-encaps dar, welcher eine zusätzliche Kapselung der IPsec-Daten vorschlägt. Dadurch werden einerseits die durch IPsec gesicherten Daten nicht modifiziert. Andererseits sind Verbindungsdaten vorhanden, die das NAT-Gateway nutzen kann, um NAT durchzuführen. IPseCK (IPsec Contruction Kit) ist eine RFC-konforme IPsec-Implementierung für Linux, die hier am Institut im Laufe der letzten zwei Jahre erstellt wurde. Die Implementierung ist sehr modular aufgebaut, dadurch war es im Nachhinein möglich Zusatzfunktionen wie Hardware- und QoS-Unterstützung zu integrieren.
Aufgabe
Am Beginn der Studienarbeit steht eine Einarbeitung in IPsec, die Analyse der darausfolgenden Probleme bei der Verwendung von NAT und dem Lösungsansatz, welche die Probleme bei der Verwendung von IPsec und NAT beseitigen soll. Anschliessend muss ein Konzept erstellt werden, wie der vorgeschlagene Lösungsansatz in die vorhandene IPsec-Implementierung integriert werden kann. Der praktische Teil der Studienarbeit befasst sich dann mit der Implementierung und Integration des Konzeptes.
Arbeitsumgebung
Im Institut steht eine Testumgebung aus mehreren Rechner unter Linux zur Verfügung. Kaffemaschine und Gluck-o-mat sind in Reichweite.
Voraussetzungen
Für die Durchführung der Studienarbeit sind gute Kenntnisse der Programmiersprache C notwendig. Kenntnisse in Linux Kernelentwicklung sind hilfreich, aber nicht unbedingte Voraussetzung.