Permanente Route auf OS-X einrichten

Permanente Route auf OS-X einrichten

Zusätzliche Routen werden im Netzwerk immer mal wieder benötigt, wenn ein Netzwerk über einen anderen Router als über das Default Gateway zu erreichen sind.

Damit diese auch nach einem Neustart des Betriebssystems noch bestehen, müssen diese permanent gemacht werden. Unter Linux funktioniert das am einfachsten in den Startup Scripts der Netzwerk Interfaces. Unter Windows ist der Parameter „-p“ des „route“ Befehls dafür vorgesehen.

Ausgerechnet bei Apples Betriebssystem OS-X, welches für einfache Bediehnung bekannt ist, gestaltet sich die Sache etwas komplizierter.

Um eine temporäre Route anzulegen, in diesem Beispiel für das Netzwerk 10.10.10.0/24 über das Gateway 192.168.1.100 ist im Terminal folgender Befehl einzugeben: „sudo route add -net 10.10.10.0 -netmask 255.255.255.0 192.168.1.100„.

Viele Anleitungen zum Setzen einer permanenten Route empfehlen ein Script für den LaunchDaemon zu erstellen, welches die Route direkt anlegt. Die entsprechenden .plist Files liegen dann unter „/Library/LaunchDaemons/“.

Bei meinen Versuchen wurde die Route angelegt, wenn ich direkt in der Konsole startete: „launchctl load /Library/LaunchAgents/routes.static.plist„, nach einem Neustart fehlte die Route dann aber. Mir kam der Verdacht, das in dem Moment, wo die Route angelegt werden sollte, das entsprechende Netzwerkinterface noch gar nicht aktiv ist. Durch Ausgabe des Ergebnis in eine Log Datei wurde der Verdacht bestätigt.

Deshalb starte ich den Route Befehl nun über ein Shell Script, welches vorher mit „scutil“ prüft, ob das Interface up ist (hier für en0): „/usr/sbin/scutil -w State:/Network/Interface/en0/IPv4

Hier ein komplettes Script als Beispiel, welches unter „/usr/local/bin/static-routes.sh“  liegt und mittels „chmod +x“ ausführbar gemacht wurde:


#!/bin/bash
function testandwait {
/usr/sbin/scutil -w State:/Network/Interface/en0/IPv4
if [ $? != 0 ] ; then
logger "warte auf Netzwerk"
sleep 30
testandwait
else
addroute
fi
}
function addroute {
route -n add -net 10.10.10.0 192.168.1.100
exit
}
testandwait

Das Script ist zwar alles andere als perfekt, aber auf diese Weise wird die Route angelegt sobald das Interface bereit ist.

Jörg Leuschner

1 Kommentar bisher

Jörg Leuschner Veröffentlicht am17:15 - 3. Januar 2019

Da heute mal wieder eine Frage zu dem Thema aufkam, möchte ich einen eleganteren Weg mittels der Option „-setadditionalroutes“ von „networksetup“ vorstellen, welche bei neueren Betriebssystem Versionen vorhanden ist.

Zuerst schauen wir mal nach, welche Interfaces der Mac hat:

networksetup -listallnetworkservices

Dann wird das entsprechender Interface noch mal geprüft, ob es auch das richtige ist:

networksetup -getinfo "Ethernet 1"

Angenommen, die Route für das Netz 10.10.10.0/24 soll, wie im obigen Beispiel, über den Router mit der IP Adresse 192.168.1.100 gehen:

networksetup -setadditionalroutes "Ethernet 1" 10.10.10.0 255.255.255.0 192.168.1.100

Werden Routen für mehrere Netze benötigt, so muss alles in einem Befehl geschrieben werden, da die bestehenden Einträge sonst überschrieben werden:

networksetup -setadditionalroutes "Ethernet 1" 10.10.10.0 255.255.255.0 192.168.1.100 10.10.11.0 255.255.255.0 192.168.1.100

Schreibe einen Kommentar