Jak skierować trasę IP przez określony interfejs w OS X?

40

Jestem na komputerze Mac i próbuję przekierować określony adres przez konkretną bramę w moim połączeniu Wi-Fi.

Używam:

route add -host 54.81.143.201 192.168.15.1

Czasami to zadziała, innym razem nie. Odkryłem, że interfejs, który wybiera, jest za każdym razem inny. To musi być en0do pracy

netstat -nr wyjście, gdy nie działa:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

To wtedy działa: (uwaga en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

Dlaczego to robię? Ponieważ nasza firma ma proxy, na którym HipChat nie działa. Więc kieruję ruch hipchat przez otwartą sieć Wi-Fi, wciąż będąc w sieci Ethernet.

EDYTOWAĆ:

Próbowałem także dodać wpis, używając tylko interfejsu

route add -host 54.81.143.201 -interface en0

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

HipChat nie łączy się.

EDYCJA 2: Ktoś poprosił o moją całą tabelę routingu, oto ona dzisiaj. Zauważ, że 54.81.143.201 jest teraz związany z en3, a nie 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
Sean256
źródło
Opublikuj pełną tabelę routingu dla przypadku, w którym nie działa. Czy 192.168.15.1 jest osiągalne przez en5? Jeśli tak, dlaczego to nie działa? Jeśli nie, trudno zobaczyć, jak dodano tę trasę.
David Schwartz
@DavidSchwartz, to jest dla mnie interesujące. 192.168.15.1 nie jest osiągalny przez en5. Rzecz działa, gdy zostanie poprawnie przypisana do en0.
Sean256
Pokaż nam tablicę routingu lub konfigurację en5. Musi być jakiś powód, dla którego trasa instaluje się w ten sposób, i to prawdopodobnie prawdziwy problem.
David Schwartz
@DavidSchwartz Nie zawsze jest to en5, czasem jest to en3. Teraz publikuję całą tabelę routingu.
Sean256
Pokazana tabela routingu en3jest wyraźnie poprawna. 192.168.15.1 nie jest osiągalny przez żaden inny interfejs. Jedynym sposobem na osiągnięcie 192.168.15.1 w tej tabeli routingu jest skorzystanie z domyślnej trasy, prawda? (Mówiąc wprost, brzmi to tak, jakbyś nie miał pojęcia, co robisz. Wydajesz się być zaskoczony, że system nie robi niemożliwego.)
David Schwartz,

Odpowiedzi:

34

Próbować:

route add -host 54.81.143.201 -interface en0
drk.com.ar
źródło
2
Oto, co otrzymuję, gdy próbuję: route: zły adres: en0
Sean256
Niestety nie mam komputera Mac, aby to przetestować. Wygląda na to, że składnia była nieprawidłowa. Zmodyfikowałem odpowiedź. Proszę spróbuj ponownie.
drk.com.ar
1
to samo niestety -> route: zły adres: en0
Sean256
Spróbuj ponownie. Tym razem usunąłem bramę. Czy możesz również dodać wynik ifconfig do swojego pytania, aby zobaczyć konfigurację IP?
drk.com.ar
Właśnie tego próbowałem (właściwie ja też wcześniej) i dodaje wpis do mojej tabeli, nie rozwiązuje problemu. HipChat nie łączy się. Oto wpis w tabeli routingu, gdy robisz to w ten sposób -> 54.81.143.201 78: 31: c1: c7: 52: 74 UHS 0 2 en0
Sean256
3

Jak wskazali inni, w rzeczywistości są to 3 problemy.

  1. Wygląda na to, że interfejs bezprzewodowy zmienia się między en0, en3 i en5.

    Na moim MacBooku Air en0 jest zawsze bezprzewodowy; Thunderbolt-to-Ethernet to zawsze en3, a USB-to-Ethernet to zawsze en5. Ale jeśli podłączysz adapter do innego portu na komputerze Mac, wówczas zmieni się jego nazwa. Najpierw musisz to rozwiązać. Upewnij się, że sieć bezprzewodowa ma zawsze tę samą nazwę. W przeciwnym razie po wprowadzeniu polecenia trasy statycznej, jeśli do lokalizacji nie jest podłączony NIC en0, polecenie (oczywiście) zakończy się niepowodzeniem z „błędem adresu” (adres fizyczny nie ma łącza).

    Podobnie upewnij się, że adapter zawsze łączy się z tym samym identyfikatorem SSID. Adres bramy oczywiście musi być poprawny dla podsieci, a różne sieci WiFi będą miały różne podsieci. Może to powodować inny rodzaj błędu.

    Nie określono, czy sieć bezprzewodowa jest jedynym połączeniem sieciowym. Biorąc pod uwagę powyższe, chyba nie ...? Ta sieć wirtualna z powodu VMware lub Parallels może powodować dodatkowe komplikacje. (Na przykład, jeśli obie połączone sieci używają tej samej przestrzeni IP ... Maszyny wirtualne często są zmostkowane i mają własne adresy IP / trasy / łącza ...) Pomocne byłoby opublikowanie topologii sieci.

  2. Po dokonaniu rejestracji, spróbuj albo sudo route add -host 54.81.143.201 -iface en0albo sudo ipfw. Jeśli nie masz pewności co do nazwy adaptera, możesz zamiast tego podać jego adres MAC:sudo route add -host 54.81.143.201 -link 14:10:9f:e7:fd:0a

    Powiązane: https://discussions.apple.com/thread/5049994?searchText=policy%20route

  3. Ponowne uruchomienie może nie zostać utrzymane. Musisz poradzić sobie z tym osobno.

Courtney Schwartz
źródło
2
sudo route -n add -net 54.81.143.201/32 192.168.15.1
Muthukumar Anbalagan
źródło
@mnciitbhu dziękuję ... to też zadziałało dla mnie: P
Muthukumar Anbalagan
2

Byłem w stanie dodać trasę przez interfejs, korzystając z -linkopcji określania adresu MAC.

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

Spowoduje to wysłanie ruchu do 54.81.143.201odpowiedniego interfejsu.

Masz 192.168.15.*przypisane dwa oddzielne adresy hosta, po jednym do każdego interfejsu, prawda? W przeciwnym razie możesz wysyłać ruch z dowolnego interfejsu, ale ruch powróci na dowolny źródłowy adres IP pakietu.

Nevin Williams
źródło
Wypróbowałem więc to, co zasugerowałeś, używając adresu MAC addr, i dziwnie moja tabela routingu pokazuje wpis en3, a nie en0 -> 54.81.143.201 00: 1d.88.4a.21.da UGHS 0 0
en3
Kiedy robisz 'arp -an', jakie masz wpisy ...?
Nevin Williams
2

To rozwiązanie działa na najnowszym MacOS 10.12 (Sierra). Oto sedno .

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

Użyj w ten sposób:

> sudo ./route_wifi.sh IP_ADDRESS

Zakłada się, że interfejs Wi-Fi to: en1 .

Nie zapomnij podać poprawnych wartości dla zmiennych wifi_router i wifi_address . Zwróć uwagę na format adresu_ Wi-Fi , który brzmi: nazwa interfejsu sieciowego:adres MAC interfejsu za pomocą. ograniczniki . Oczywiście większość wymaganych informacji można przeanalizować na podstawie danych wyjściowych komendy ifconfig , ale jestem zbyt leniwy, aby to zrobić =)

Alexander Malkoff
źródło
Witamy w Superuser. Spróbuj zawrzeć najistotniejsze informacje z linku w swoim poście. Przeczytaj więcej na ten temat tutaj .
styropian mucha
1

Polecenie OS X routejest tutaj udokumentowane . -ifscopeParametr i jego wartość pozwala określić trasę interfejsu przychodzącego.

Nie tego jednak chcesz. Musisz naprawić swoje sieci, aby ich zakresy adresów IP były unikalne. Poza tym wskaźniki interfejsu (zwane również priorytetami) wpływają na to, który interfejs zostanie wybrany z innej równie dogodnej opcji.

Daniel B.
źródło
-1

Więc serwer dostawcy, z którym próbujesz porozmawiać o usłudze „HipChat”, o której twierdzisz, że to 54.81.143.201? W takim przypadku wprowadziłbym wpis routingu dla 54.81.143.0 255.255.255.0, aby nadać mu większy zasięg. Być może podczas korzystania z oprogramowania nie zawsze rozmawiasz z tym konkretnym serwerem, ale ich klaster w tej samej podsieci 54.81.143.0/24. Ponadto, upewnij się, że metryki trasy są prawidłowe podczas tworzenia nowego wpisu. Jeśli utworzysz trasę do 54.81.143.0/24 192.168.15.1 Metric 20 En5, ale masz również trasę do 0.0.0.0/0 10.7.90.1 Metric 10 En0. Komputer zignoruje twój nowy wpis i będzie kontynuował kierowanie ruchu domyślną trasą (przez En0), ponieważ jest to bardziej preferowane. Właśnie przejrzałem to i chciałem to podkreślić. Twoje zdrowie!

KaneNFL443
źródło
-1

Powinieneś spróbować dodać nazwę karty sieciowej:

route add -net 10.13.0.0 netmask 255.255.0.0 dev NicNameHere

Działa to dla mnie w CentOS.

użytkownik220248
źródło
Rozumiem -> route: zły adres: dev
Sean256