Wie wird die IP-Route über eine bestimmte Schnittstelle in OS X geleitet?


40

Ich arbeite auf einem Mac und versuche, eine bestimmte Adresse über ein bestimmtes Gateway in meiner WLAN-Verbindung weiterzuleiten.

Ich benutze:

route add -host 54.81.143.201 192.168.15.1

Manchmal funktioniert das, manchmal nicht. Was ich fand, ist, dass die Schnittstelle, die sie wählt, jedes Mal anders ist. Es muss nicht en0funktionieren

netstat -nr Ausgabe, wenn es nicht funktioniert:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

Dies ist, wenn es funktioniert: (Anmerkung en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

Warum mache ich das? Weil unser Unternehmen einen Proxy hat, an dem HipChat nicht arbeitet. Daher leite ich den Hip-Chat-Datenverkehr über ein offenes WLAN-Netzwerk, während ich noch im Netzwerk bin.

BEARBEITEN:

Ich habe auch versucht, den Eintrag nur über die Benutzeroberfläche hinzuzufügen

route add -host 54.81.143.201 -interface en0

54.81.143.201      78:31:c1:c7:52:74  UHS             0        2     en0

HipChat kann keine Verbindung herstellen.

EDIT 2: Jemand hat nach meiner ganzen Routing-Tabelle gefragt, hier ist es heute. Beachten Sie, dass 54.81.143.201 jetzt an en3 und nicht an en0 gebunden ist

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.7.90.1          UGSc           31        6     en3
10.7.90/24         link#4             UCS             4        0     en3
10.7.90.1          0:23:ac:3d:db:c2   UHLWIir        16        0     en3   1200
10.7.90.44         40:6c:8f:19:4a:bb  UHLWI           0        3     en3    946
10.7.90.63         127.0.0.1          UHS             0        0     lo0
54.81.143.201      192.168.15.1       UGHS            0        0     en3
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              3      209     lo0
169.254            link#4             UCS             1        0     en3
169.254.255.255    0:23:ac:3d:db:c2   UHLSW           0        0     en3

Veröffentlichen Sie die vollständige Routing-Tabelle für den Fall, dass dies nicht funktioniert. Ist 192.168.15.1 über en5 erreichbar? Wenn ja, warum funktioniert es nicht? Wenn nicht, ist es schwer zu sehen, wie diese Route hinzugefügt wurde.
David Schwartz

@DavidSchwartz, das ist für mich interessant. 192.168.15.1 ist über en5 nicht erreichbar. Das Ding funktioniert, wenn es richtig en0 zugewiesen wird.
Sean256

Zeigen Sie uns die Routing-Tabelle oder die Konfiguration von en5. Es muss einen Grund geben, warum die Route so installiert wird, und das ist wahrscheinlich das eigentliche Problem.
David Schwartz

@DavidSchwartz Es ist nicht immer en5, manchmal ist es en3. Ich poste jetzt meine ganze Routing-Tabelle.
Sean256

In der von Ihnen angezeigten Routing-Tabelle en3ist eindeutig richtig. 192.168.15.1 ist über keine andere Schnittstelle erreichbar. Die einzige Möglichkeit, 192.168.15.1 in dieser Routingtabelle zu erreichen, ist die Standardroute, oder? (Offen gesagt, Sie haben keine Ahnung, was Sie tun. Sie scheinen überrascht zu sein, dass das System nicht das Unmögliche tut.)
David Schwartz

Antworten:


34

Versuchen:

route add -host 54.81.143.201 -interface en0

2
Folgendes
erhalte

Tut mir leid, ich habe keinen Mac, um das zu testen. Anscheinend war die Syntax falsch. Ich habe die Antwort geändert. Bitte versuche es erneut.
drk.com.ar

1
das selbe leider -> route: schlechte adresse: en0
Sean256

Versuch es noch einmal. Diesmal habe ich das Gateway entfernt. Können Sie Ihrer Frage auch die Ausgabe von ifconfig hinzufügen, um die IP-Konfiguration zu überprüfen?
drk.com.ar

Ich habe es gerade versucht (eigentlich habe ich es auch schon versucht) und es fügt einen Eintrag zu meiner Tabelle hinzu, es löst das Problem nicht. HipChat kann keine Verbindung herstellen. Hier ist der Eintrag in der Routing-Tabelle, wenn Sie dies so tun -> 54.81.143.201 78: 31: c1: c7: 52: 74 UHS 0 2 de0
Sean256

3

Wie andere angedeutet haben, sind dies tatsächlich 3 Probleme.

  1. Ihre drahtlose Schnittstelle scheint sich zwischen en0, en3 und en5 zu ändern.

    Auf meinem MacBook Air ist en0 immer drahtlos. Thunderbolt-to-Ethernet ist immer en3 und USB-to-Ethernet ist immer en5. Wenn Sie jedoch einen Adapter an einen anderen Anschluss Ihres Mac anschließen, ändert sich der Name der Netzwerkkarte. Sie müssen dies zuerst lösen. Stellen Sie sicher, dass Ihr WLAN immer den gleichen Namen hat. Andernfalls schlägt der Befehl bei Eingabe des statischen Routenbefehls en0(offensichtlich) mit einem "Adressfehler" fehl (physikalische Adresse hat keine Verknüpfung) , wenn keine Netzwerkkarte an den Speicherort angeschlossen ist.

    Stellen Sie ebenfalls sicher, dass der Adapter immer mit derselben SSID verbunden ist. Die Gateway-Adresse muss natürlich für das Subnetz gültig sein, und verschiedene WiFi-Netzwerke haben unterschiedliche Subnetze. Dies kann eine andere Art von Fehler verursachen.

    Sie haben nicht angegeben, ob WLAN Ihre einzige Netzwerkverbindung ist. Angesichts des oben genannten, denke ich nicht ...? Diese und virtuelle Netzwerke aufgrund von VMware oder Parallels können zusätzliche Komplexität verursachen. (Wenn beispielsweise beide verbundenen Netzwerke denselben IP-Raum verwenden ... Virtuelle Maschinen sind häufig überbrückt und haben ihre eigenen IPs / Routen / Links ...) Das Posten der Netzwerktopologie ist hilfreich.

  2. Versuchen Sie es anschließend mit sudo route add -host 54.81.143.201 -iface en0oder sudo ipfw. Wenn Sie sich über den Namen des Adapters nicht sicher sind, können Sie stattdessen dessen MAC-Adresse wie folgt angeben:sudo route add -host 54.81.143.201 -link 14:10:9f:e7:fd:0a

    Verwandte Themen: https://discussions.apple.com/thread/5049994?searchText=policy%20route

  3. Wenn Sie neu starten, wird dies möglicherweise nicht fortgesetzt. Sie müssen das separat behandeln.



2

Ich konnte eine Route über eine Schnittstelle hinzufügen, indem ich die -linkOption zum Angeben einer MAC-Adresse verwendete.

route add -host 54.81.143.201 -link [mac addr of 192.168.15.1 on en0]

Dadurch wird der Datenverkehr für 54.81.143.201die entsprechende Schnittstelle gesendet.

Sie haben zwei separate 192.168.15.*Hostadressen zugewiesen, eine für jede Schnittstelle, oder? Andernfalls können Sie Datenverkehr über beide Schnittstellen senden, der Datenverkehr wird jedoch auf der Quell-IP-Adresse der Pakete zurückgegeben.


Also habe ich versucht, was Sie mit der MAC-Adresse vorgeschlagen haben, und merkwürdigerweise zeigt meine Routingtabelle einen Eintrag für en3 und nicht für en0 -> 54.81.143.201 00: 1d.88.4a.21.da UGHS 0 0 en3
Sean256

Wenn Sie ein 'arp -an' machen, welche Einträge haben Sie ...?
Nevin Williams

2

Diese Lösung funktioniert auf dem neuesten MacOS 10.12 (Sierra). Hier ist der Kern .

#!/bin/bash

# NOTE: wifi network interface is: en1
wifi_router=192.168.200.1
wifi_address=en1:ec.35.86.4f.00.cc
TOADDR=`ifconfig en1 inet | sed -nl 's/\w*inet \([^ ]*\).*/\1/p'`
TO=`echo -n ${TOADDR//[[:space:]]}`

echo "ADDING ROUTE TO $1 VIA en1 (wi-fi): $TO"
route -n add -host $1 $wifi_router -ifp $wifi_address -ifa $TO -static

echo ""
echo "ROUTE ADDED:"
route get $1

Verwenden Sie wie folgt:

> sudo ./route_wifi.sh IP_ADDRESS

Es wird davon ausgegangen, dass die WLAN-Schnittstelle: en1 ist .

Vergessen Sie nicht, die korrekten Werte für die Variablen wifi_router und wifi_address einzugeben . Beachten Sie das Format wifi_address , das wie folgt lautet: Name der Netzwerkschnittstelle ' : ' MAC- Adresse der Schnittstelle mit ' . ' Trennzeichen . Sicher, die meisten erforderlichen Informationen können aus der ifconfig- Befehlsausgabe heraus analysiert werden , aber dafür bin ich einfach zu faul =)


Willkommen beim Superuser. Bitte versuchen Sie, die relevantesten Informationen aus dem Link in Ihrem Beitrag zu enthalten. Lesen Sie hier mehr darüber .
Styropor fliegen

1

Der OS X- routeBefehl ist hier dokumentiert . Die -ifscopeParameter und seinen Wert ermöglicht es Ihnen , eine Schnittstelle gebundene Route angeben.

Dies ist jedoch nicht das, was Sie wollen. Sie müssen Ihre Netzwerke so einrichten, dass ihre IP-Bereiche eindeutig sind. Davon abgesehen beeinflussen Schnittstellenmetriken (auch Prioritäten genannt), welche Schnittstelle aus einer ansonsten gleichermaßen geeigneten Option ausgewählt wird.


-1

Der Anbieterserver, mit dem Sie bezüglich des von Ihnen behaupteten Dienstes "HipChat" zu sprechen versuchen, ist also 54.81.143.201? In diesem Fall würde ich einen Routing-Eintrag für 54.81.143.0 255.255.255.0 vornehmen, um den Bereich zu vergrößern. Wenn Sie die Software verwenden, sprechen Sie möglicherweise nicht immer mit diesem bestimmten Server, sondern mit einem Cluster von ihnen im selben Subnetz 54.81.143.0/24. Stellen Sie außerdem sicher, dass Ihre Routenmetriken korrekt sind, wenn Sie einen neuen Eintrag erstellen. Wenn Sie eine Route zu 54.81.143.0/24 192.168.15.1 Metric 20 En5 erstellen, aber auch eine Route zu 0.0.0.0/0 10.7.90.1 Metric 10 En0 haben. Der Computer ignoriert Ihren neuen Eintrag und leitet den Verkehr weiter über die Standardroute (über En0), da dies vorzuziehen ist. Ich habe das nur durchgesehen und wollte darauf hinweisen. Prost!


-1

Sie sollten versuchen, den NIC-Namen hinzuzufügen:

route add -net 10.13.0.0 netmask 255.255.0.0 dev NicNameHere

Das funktioniert bei mir in CentOS.


Ich bekomme diese -> Route: schlechte Adresse: dev
Sean256
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.