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.
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
Hallo
vielen Dank das ist sehr informativ. Vielleicht können sie mir ja mit einem kleinen Problem weiterhelfen:
Ich versuche macOs zu zwingen auf eine bestimmte IP (genauer mein NAS) nur mittels eines bestimmten Interfaces zu gelangen. Ginge das auch mittels networksetup?
Hallo,
prinzipiell kann das funktionieren, es kommt halt darauf an, in welchem IP-Kreis sich die jeweiligen Geräte befinden und wie dann das Routing eingerichtet ist.
es ist ein total simples setup eigentlich, der Mac Pro hat die IP 192.168.1.111 und 192.168.1.112 (Lan und Wlan)
Das NAS die 192.168.1.101
Beide selbes subnet 255.255.255.0 und selben Router 192.168.1.1
Ich möchte etlich nur festlegen das der MacPro nur übers LAN aufs NAS geht. (erbringt das leider manchmal durcheinander und geht per WLan aufs NAS)
Hallo Tino,
die Frage ist zwar schon alt, aber möglicherweise hilft jemand anderem noch der Ansatz einer exklusiven Route für ein einzelnes Gerät als Ziel:
Im Routen-Eintrag als Subnetzmaske nur 32 Bit angeben, also 255.255.255.255, dann gilt der Routing-Eintrag exklusiv für die Ziel-IP-Adresse des NAS (in dem Fall).
Nur -das sei hier angemerkt- je nach Netzwerkaufbau könnte es sein, dass das Antwortpaket vom NAS nicht zurückkommt, das hängt von dessen Konfiguration ab.
Viel Erfolg und LG!
Erik
Danke für den Tipp!
Falls noch die Frage aufkommt, wie man eine per networksetup erstellte Route wieder weg bekommt: Keine Routen mitgeben:
networksetup -setadditionalroutes „Ethernet 1“