58 votes

Comment diriger une route IP à travers une interface spécifique dans OS X ?

Je suis sur un mac et j'essaie d'acheminer une adresse particulière via une passerelle spécifique sur ma connexion wifi.

Je l'utilise :

route add -host 54.81.143.201 192.168.15.1

Parfois, cela fonctionne, d'autres fois non. Ce que j'ai découvert, c'est que l'interface qu'il choisit est différente à chaque fois. Il faut que ce soit en0 pour travailler

netstat -nr la sortie quand elle ne fonctionne pas :

54.81.143.201      192.168.15.1       UGHS            1       89     en5

Voici quand cela fonctionne : (note en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

Pourquoi est-ce que je fais ça ? Parce que notre entreprise a un proxy sur lequel HipChat ne fonctionne pas. Je fais donc passer le trafic de HipChat par un réseau wifi ouvert tout en restant sur le réseau Ethernet de mon entreprise.

EDITAR:

J'ai également 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é ma table de routage complète, 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

53voto

drkblog Points 2487

Essayez :

route add -host 54.81.143.201 -interface en0

4voto

linolino Points 135

Comme d'autres l'ont indiqué, il s'agit en fait 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 branchez un adaptateur sur un autre port de votre Mac, le nom de sa carte réseau change. Vous devez d'abord résoudre ce problème. Assurez-vous que votre réseau sans fil a toujours le même nom. Sinon, lorsque vous entrez la commande de route statique, s'il n'y a pas de carte réseau branchée au port 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 des sous-réseaux différents. 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 les réseaux virtuels dus à VMware ou Parallels peuvent causer 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 pontées et ont leurs propres IP/routes/liens...) Afficher la topologie du réseau serait utile.

  2. Une fois que c'est fait, essayez soit sudo route add -host 54.81.143.201 -iface en0 o sudo ipfw . Si vous n'êtes pas sûr du nom de l'adaptateur, vous pouvez indiquer son adresse MAC à la place, comme ceci : sudo route add -host 54.81.143.201 -link 14:10:9f:e7:fd:0a

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

  3. Si vous redémarrez, cela peut ne pas persister. Vous devrez gérer cela séparément.

3voto

Stefan Hendriks Points 1077

J'ai pu ajouter une route à travers une interface en utilisant la fonction -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 sur l'interface appropriée.

Vous avez bien deux 192.168.15.* des adresses d'hôtes assignées, une à chaque interface, non ? Sinon, vous pouvez envoyer du trafic à partir de n'importe quelle interface, mais le trafic reviendra sur l'IP source des paquets.

3voto

sudo route -n add -net 54.81.143.201/32 192.168.15.1

2voto

helpdesk Points 1824

Cette solution fonctionne sur la dernière version de MacOS 10.12 (Sierra). Voici la 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 ça :

> 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 y adresse_wifi variables. Note adresse_wifi qui est : nom de l'interface réseau ' : ' adresse mac de l'interface avec ' . ' délimiteurs . Bien sûr, la plupart des informations requises peuvent être extraites de la base de données de l'entreprise. ifconfig mais je suis trop paresseux pour cela =)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X