NAT im Kernel

Network Adress Translation (NAT) ist ein weiteres Beispiel der Nutzung der Netfilter Infrastruktur. NAT nutzt aber auch die Fähigkeiten des Connection Trackings. Das NAT Kernel-Modul nutzt die gleichen Netfilter Hooks wie das Connection Tracking, ist aber von der Priorität nachgeordnet, da es auf dessen Ergebnissen aufbaut.

Erreicht ein Paket den NAT-Code, so werden zunächst die Informationen des Connection Trackings ausgewertet. Die Hilfsfuntion ip_conntrack_get() liefert hierzu sowohl den Status des Pakets als auch die ip_conntrack Struktur.

In der ip_conntrack Struktur ist ein gleichnamiges Feld für NAT reserviert, welches auch einen Zeiger auf eine ip_nat_info Struktur enthält. Diese Struktur enthält Informationen über die evtl. notwendigen Adressmanipulationen für Pakete dieser Verbindung, als auch einen Eintrag für eine NAT-Helper Struktur. Handelt es sich bei dem ankommenden Paket um ein Paket, das mit der Bewertung ,,NEW,, vom Connection Tracking ausgezeichnet wurde, so muss für dieses in der iptables NAT Tabelle nach einer Regel gesucht werden. Wird eine solche gefunden, wird sie in die ip_nat_info Struktur eingetragen.

Gehört das Paket zu einer bereits bestehenden Verbindung, so sind die Regeln der Adressmanipulation schon eingetragen und falls welche existieren, können diese angewendet werden. Dies geschieht für alle Pakete in der Funktion do_bindings(). Zuletzt wird noch, falls ein Helper eingetragen worden ist, die help() Funktion aufgerufen.

Klaus Rechert 2004-03-09