IP in IP Tunnel

Ein IPIP Tunnel ist so ziemlich der einfachste Tunnel, den Linux bereits seit einer langen Zeit beherrscht. Hierbei werden verschiedene IP Packete, die zu verschiedenen Verbindungen gehören können in weitere IP Pakete verpackt und zwischen zwei Endpunkten versendet. Schon fertig ist der Tunnel. Hierbei wird der Tunnel allerdings nicht verschlüsselt.

Das Internet Protocol (IP) ist stellt die Grundlage des Internets dar. Im Internet wird nicht, wie im LAN mit MAC adressiert, sondern mit IP Adressen. Daher stellt eine IP Adresse das Ziel eines Paketes im Internet dar, nicht wie im LAN letztendlich die MAC Adresse. Bei IP handelt es sich um die Implementierung der Internetschicht des TCP/IP-Modells bzw. des Network Layers des OSI-Referenzmodels.

IP ist ein unsicheres Protokoll, beschädigte Packete werden einfach verworfen. Die höheren Schichten sorgen für das Nachsenden der verlorengegangenen Pakete. So sorgt sich der IP Tunnel in keiner Weise um beschädigte Pakete. Was ankommt, ist da. Mehr nicht. Über ein TAP Device, einer virtuellen Netzwerkkarte, werden die Daten eingepackt und durch den erzeugten Tunnel gesendet. Das Zielsystem empfängt diese Pakete und entfernt den IP Header des Tunnels und wirft das Paket entsprechend auf dem TAP Device wieder heraus. Dort kümmern sich dann andere Komponenten um die Daten.

Nun, wie wird unter Linux ein IPIP Tunnel eingerichtet? Im wesentlichen werden hierzu zwei kernel-Module benötigt. ipip.o und new_tunnel.o.

Ein praktisches Beispiel dazu. Zwei Rechner sollen miteinander einen Tunnel aufbauen. Diese sind mit dem Internet verbunden. Das Internet wird mal Wolke A genannt. Das Netzwerk des ersten Rechners Wolke B und das Netzwerk des zweiten Rechners Wolke C.

Wolke A: Internet
Wolke B: Netzwerkadr. 192.168.10.0; Netmask. 255.255.255.0;
Gateway. 192.168.10.254; Gateway (Internet). 172.16.23.42
Wolke C: Netzwerkadr. 192.168.20.0; Netmask. 255.255.255.0;
Gateway. 192.168.20.254; Gateway (Internet). 172.18.42.64

So gehts weiter. Als erstes Prüfen, ob die Module geladen worden sind. Der Befehl insmod zeigt an, ob das Modul bereits geladen wurde oder ob es korrekt nachgeladen worden ist.

# insmod ipip.o
# insmod new_tunnel.o

Der Rechner in Wolke B wird folgendermaßen eingerichtet.

# ifconfig tunl0 192.168.10.254 pointopoint 172.18.42.64
# route add -net 192.168.20.0 netmask 255.255.255.0 dev tunl0

Der Rechner in Wolke C wird folgendermaßen eingerichtet.

# ifconfig tunl0 192.168.20.254 pointopoint 172.16.23.42
# route add -net 192.168.10.0 netmask 255.255.255.0 dev tunl0

Fertig. Nun sollten die beiden Netze miteinander verbunden sein. Wenn der Tunnel nicht mehr benötigt wird, wird der Befehl

# ifconfig tunl0 down

den Tunnel beenden.

Das war schon der ganze Zauber. Einige Kleinigkeiten müssen noch erwähnt werden. Es handelt sich um einen IPIP Tunnel. Das bedeutet, das IPv6 nicht einfach so durchflutscht. Genauso werden auch Broadcasts nicht geroutet. Für eine verschlüsselte Verbindnung kann OpenVPN verwendet werden. Genaues steht entsprechend im RFC2003 – IP Encapsulation within IP, auch als Plaintext.