April 8, 2013

Forwarding von IPv4 nach IPv6

Forwarding von IPv4 nach IPv6

Einleitung

Mittels einem Forwarding zwischen den IP Stacks IPv4 und IPv6 sollte mein v6-only Host über eine v4 Adresse eines anderen Hosts erreichbar gemacht werden. Schnell war klar, dass klassisches NAT mittels IPTables, wie man es im reinen IPv4 Netz gemacht hätte, zwischen verschiedenen Stacks nicht möglich ist. Ein Forwarding zwischen diesen Stacks benötigt immer eine Art Proxy. Da ich aber auf dem v4 Host keine unnötigen Dienste laufen lassen wollte benötigte ich eine andere Methode. Während meiner Recherchen stieß ich auf das Programm socat, mittels dessen ich in der Lage war, meine verzwickte Situation zu lösen.

Folgendes Kommando bindet sich auf Port 80 aller Netzwerk Interfaces, forkt sich bei einem Verbindungsaufbau als user nobody und leitet dann an den Port 80 des IPv6 loopback Interfaces.

socat TCP4-LISTEN:80,fork,su=nobody TCP6:[::1]:80

Die Option fork ist dabei unverzichtbar, da sich socat ansonsten nach der ersten Verbindung selbst beenden würde. Beachten Sie bitte auch, dass die IPv6 Adresse des Zielsystems in eckige Klammern gesetzt werden muss, da diese Adressen Doppelpunkte beinhalten, welche im „klassischen“ v4 Stack ausschließlich zur Angabe des Zielports verwendet werden. Das Kommando kann einfach in die rc.local eingebaut werden, in etwa so

nohup socat TCP4-LISTEN:80,fork,su=nobody TCP6:[::1]:80 &

Dies ist nur ein kleiner Einsatzbereich von socat. Weitere Informationen zu diesem nützlichen Tool können z.B. über die offizielle Dokumentation bezogen werden.