NAT/Tunnel unter OS X

Hier soll knapp erklärt werden, wie man unter OS X (ab Tiger) einen OpenVPN-Tunnel über ein weiteres Interface für andere Rechner zur Verfügung stellen kann. Ist sowohl das Internet/der Tunnel als auch das lokale Netz nur per TP-Kabel zu Erreichen, benötigt man vermutlich noch eine weitere NIC (bei Macbooks z.B. einen USB-Ethernet-Adapter).

OpenVPN-Tunnel

Für OpenVPN-Tunnel bietet sich Tunnelblick an. Einfach die entsprechenden Zertifikate und Konfigurationsdateien in den Ordner ~/Library/openvpn legen und im Programm die Verbindung starten.
Es existiert nun ein neues Tunnel-Interface tunif mit einer passenden VPN-IP. Alle Pakete die dort landen werden automatisch zum entsprechenden Server getunnelt. Pakete von localhost werden automatisch (?) mit der neuen IP-Adresse versendet.

Internet Sharing / Tunnel Sharing

Nun fragt man sich vielleicht, ob man den Tunnel auch mit weiteren Rechnern/Personen teilen kann. Die Antwort ist: ja!
Erste Versuche mit dem OS X eigenen Internet Sharing (Preferences / Sharing / Internet) waren allerdings nicht erfolgreich. Dazu muss man allerdings verstehen was da vor sich geht:
Es wird auf das lokale Interface localif auf dem der Tunnel gesharet werden soll eine interne IP gelegt und ein DHCP-Server gestartet, der aus selbigem Netz Adressen verteilt. Außerdem wird der natd gestartet, der nun alle Pakete von localif auf die IP des Uplink-Interfaces wanif umbiegt und sie auf diesem Richtung Internet schickt (wobei das letztendlich in einer Regel von ipfw passiert).
Da man leider tunif im Sharing-Dialog nicht direkt anwählen kann, landen die Pakete zwar im Tunnel, werden aber nicht genattet, da der Daemon mit einer festen Alias-Adress (der von wanif) gestartet wird.
Daher ist nun noch etwas Handarbeit nötig:

  • In den Systemeinstellungen Internetsharing aktivieren. Damit der DHCP-Server auf dem richtigen Interface lauscht, muss wenigstens das localif richtig sein.
  • natd in einer Shell mit richtigen Parametern neustarten
  • Firewall mit ipfw umbiegen

Wenn man den DHCP-Server nicht benötigt, kann man natürlich alles händisch machen und muss die Sharing-Option nicht aktivieren.

Das Skript tun_sharing (GPLv3) im Anhang vereinfacht die Schritte in der Konsole. Es geht davon aus, dass zunächst ein Sharing in den Systemeinstellungen aktiviert wurde. Über die beiden Argumente kann dem Skript wanif und tunif übergeben werden. Es muss als root ausgeführt werden.

NAT

Wie bereits im vorherigen Abschnitt angedeutet ist NAT unter OS X etwas unübersichtlicher als unter Linux (Stichwort: iptables, PREROUTING, POSTROUTING): ein natd übernimmt die Modifikation des IP-Pakets. Damit diese jedoch überhaupt beim Daemon ankommen, muss über ipfw eine entsprechende divert Regel gesetzt werden. Diese leitet IP-Pakete auf einen speziellen divert-Socket um, auf welchen der natd lauscht.
RTFM:
man divert
man ipfw
man natd

AnhangGröße
tun_sharing1.76 KB

Kommentare

tun_sharing.sh

Rev 22 ist die aktuelle und erste veröffentlichte Version des Skripts und kann nur, wie im Aritkel bereits beschrieben, mit vorheriger Aktivierung des Internet-Sharings verwendet werden.
Sollten Updates folgen, werden diese in den Kommentaren bekanntgegeben.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Keine HTML-Tags erlaubt
  • Zeilen und Absätze werden automatisch erzeugt.

Weitere Informationen über Formatierungsoptionen

Image CAPTCHA
Enter the characters shown in the image.
Inhalt abgleichen