web-dev-qa-db-fra.com

Comment diriger une route IP via une interface spécifique sous OS X?

Je suis sur un Mac et j'essaie de router une adresse particulière via une passerelle spécifique sur ma connexion wifi.

J'utilise:

route add -Host 54.81.143.201 192.168.15.1

Parfois, cela fonctionnera, d'autres fois, cela ne fonctionnera pas. Ce que j'ai trouvé, c'est que l'interface choisie est différente à chaque fois. Il faut ot en0 pour fonctionner

netstat -nr sortie quand ça ne marche pas:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

C'est quand ça marche: (note en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

Pourquoi est-ce que je fais cela? Parce que notre société a un proxy sur lequel HipChat ne fonctionne pas. Je dirige donc le trafic hipchat via un réseau wifi ouvert tout en restant connecté à Ethernet.

MODIFIER:

J'ai aussi essayé d'ajouter l'entrée en utilisant uniquement l'interface

route add -Host 54.81.143.201 -interface en0

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

HipChat ne parvient pas à se connecter.

EDIT 2: Quelqu'un a demandé toute ma table de routage, la voici aujourd'hui. Notez que 54.81.143.201 est maintenant lié à en3 et non en0

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
35
Sean256

Essayer:

route add -Host 54.81.143.201 -interface en0
30
drk.com.ar

Comme d'autres l'ont indiqué, il s'agit en réalité de 3 problèmes.

  1. Votre interface sans fil semble changer entre en0, en3 et en5.

    Sur mon MacBook Air, en0 est toujours sans fil. Thunderbolt-to-Ethernet est toujours en3 et USB-to-Ethernet est toujours en5. Mais si vous connectez un adaptateur à un autre port de votre Mac, son nom NIC change. Vous devez d'abord résoudre ce problème. Assurez-vous que votre réseau sans fil porte toujours le même nom. Sinon, lorsque vous entrez la commande static route, s'il n'y a pas de NIC connecté à l'emplacement en0, la commande échouera (évidemment) avec une "erreur d'adresse" (l'adresse physique n'a pas de lien).

    De même, assurez-vous que l'adaptateur se connecte toujours au même SSID. L'adresse de la passerelle doit évidemment être valide pour le sous-réseau, et différents réseaux WiFi auront différents sous-réseaux. Cela peut provoquer un autre type d'erreur.

    Vous n'avez pas précisé si le sans fil est votre seule connexion réseau. Compte tenu de ce qui précède, je suppose que non ...? Ceci et la mise en réseau virtuelle due à VMware ou Parallels peuvent entraîner des complexités supplémentaires. (Par exemple, si les deux réseaux connectés utilisent le même espace IP ... Les machines virtuelles sont souvent reliées par un pont et possèdent leurs propres adresses IP/routes/liens ...). L'affichage d'une topologie de réseau serait utile.

  2. Une fois que cela est fait, essayez soit Sudo route add -Host 54.81.143.201 -iface en0, soit Sudo ipfw. Si vous n'êtes pas sûr du nom de l'adaptateur, vous pouvez plutôt spécifier son adresse MAC, comme suit: Sudo route add -Host 54.81.143.201 -link 14:10:9f:e7:fd:0a

    Connexes: https://discussions.Apple.com/thread/5049994?searchText=policy%20route

  3. Si vous redémarrez, cela ne persistera peut-être pas. Vous devrez gérer cela séparément.

3
Courtney Schwartz

Cette solution fonctionne sur le dernier MacOS 10.12 (Sierra). Voici le Gist .

#!/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

Utilisez comme ceci:

> Sudo ./route_wifi.sh IP_ADDRESS

Il suppose que l’interface wifi est: en1 .

N'oubliez pas de mettre les valeurs correctes pour wifi_router et wifi_address variables. Remarque wifi_address format, qui est: nom de l’interface réseau ': ' adresse mac d’interface avec '. 'délimiteurs. Bien sûr, la plupart des informations requises peuvent être analysées à partir de ifconfig , mais je suis trop paresseux pour cela =)

2
Alexander Malkoff

J'ai pu ajouter une route via une interface en utilisant l'option -link pour spécifier une adresse MAC.

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

Cela enverra du trafic pour 54.81.143.201 par l'interface appropriée.

Vous avez attribué deux adresses d'hôte 192.168.15.* distinctes, une à chaque interface, n'est-ce pas? Sinon, vous pouvez envoyer du trafic à partir de l'une ou l'autre interface, mais le trafic sera renvoyé sur l'adresse IP source des paquets.

2
Nevin Williams
Sudo route -n add -net 54.81.143.201/32 192.168.15.1
1

La commande route de OS X est documentée ici . Le paramètre -ifscope et sa valeur vous permettent de spécifier un itinéraire lié à une interface.

Ce n'est cependant pas ce que vous voulez. Vous devez réparer vos réseaux pour que leurs plages IP soient uniques. En dehors de cela, les métriques d'interface (ou priorités) affectent l'interface choisie parmi les options tout aussi opportunes.

1
Daniel B