¿Cómo dirigir la ruta IP a través de una interfaz específica en OS X?


40

Estoy en una Mac e intento enrutar una dirección particular a través de una puerta de enlace específica en mi conexión wifi.

Estoy usando:

route add -host 54.81.143.201 192.168.15.1

A veces esto funcionará, otras veces no. Lo que encontré es que la interfaz que elige es diferente cada vez. Necesita ser en0para trabajar

netstat -nr salida cuando no funciona:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

Esto es cuando funciona: (nota en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

¿Por qué estoy haciendo esto? Porque nuestra compañía tiene un proxy en el que HipChat no funciona. Así que estoy enrutando el tráfico hipchat a través de una red wifi abierta mientras todavía estoy en mi ethernet de trabajo.

EDITAR:

También intenté agregar la entrada usando solo la interfaz

route add -host 54.81.143.201 -interface en0

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

HipChat no logra conectarse.

EDITAR 2: Alguien pidió mi tabla de enrutamiento completa, aquí está hoy. Tenga en cuenta que 54.81.143.201 ahora está vinculado a en3 y no 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

Publique la tabla de enrutamiento completa para el caso donde no funciona. ¿Se puede acceder a 192.168.15.1 a través de en5? Si es así, ¿por qué no funciona? Si no, es difícil ver cómo se agregó esa ruta.
David Schwartz

@DavidSchwartz, eso es lo que me interesa. 192.168.15.1 no es accesible a través de en5. La cosa funciona cuando se asigna correctamente a en0.
Sean256

Muéstranos la tabla de enrutamiento o la configuración de en5. Debe haber alguna razón para que la ruta se instale de esa manera, y ese es probablemente el verdadero problema.
David Schwartz

@DavidSchwartz No siempre es en5, a veces es en3. Estoy publicando toda mi tabla de enrutamiento ahora.
Sean256

En la tabla de enrutamiento que mostró, en3es claramente correcto. 192.168.15.1 no es accesible a través de ninguna otra interfaz. La única forma de llegar a 192.168.15.1 en esa tabla de enrutamiento es a través de la ruta predeterminada, ¿verdad? (Sin rodeos, parece que no tienes idea de lo que estás haciendo. Parece que te sorprende que el sistema no esté haciendo lo imposible).
David Schwartz

Respuestas:


35

Tratar:

route add -host 54.81.143.201 -interface en0

2
Esto es lo que obtengo cuando intento eso: ruta: mala dirección:
en0

Lo siento, no tengo una Mac para probar esto. Parece que la sintaxis estaba mal. Modifiqué la respuesta. Inténtalo de nuevo.
drk.com.ar

1
lo mismo tristemente -> ruta: mala dirección:
en0

Inténtalo de nuevo. Esta vez quité la puerta de enlace. Además, ¿podría agregar la salida ifconfig a su pregunta para ver la configuración de IP involucrada?
drk.com.ar

Acabo de intentar eso (en realidad también lo he hecho antes) y agrega una entrada a mi tabla, no resuelve el problema. HipChat no logra conectarse. Aquí está la entrada en la tabla de enrutamiento al hacerlo de esa manera -> 54.81.143.201 78: 31: c1: c7: 52: 74 UHS 0 2
en0

3

Como otros indicaron, esto es en realidad 3 problemas.

  1. Su interfaz inalámbrica parece estar cambiando entre en0, en3 y en5.

    En mi MacBook Air, en0 siempre es inalámbrico; Thunderbolt-to-Ethernet siempre es en3, y USB-to-Ethernet siempre es en5. Pero si conecta un adaptador a un puerto diferente en su Mac, entonces su nombre de NIC cambia. Necesitas resolver esto primero. Asegúrese de que su conexión inalámbrica siempre tenga el mismo nombre. De lo contrario, cuando ingrese el comando de ruta estática, si no hay una NIC conectada a la en0ubicación, el comando (obviamente) fallará con un "error de dirección" (la dirección física no tiene enlace).

    Del mismo modo, asegúrese de que el adaptador esté siempre conectado al mismo SSID. La dirección de la puerta de enlace obviamente debe ser válida para la subred, y las diferentes redes WiFi tendrán subredes diferentes. Esto puede causar otro tipo de error.

    No especificó si la conexión inalámbrica es su única conexión de red. Dado lo anterior, supongo que no ...? Esto y las redes virtuales debido a VMware o Parallels pueden causar complejidades adicionales. (Por ejemplo, si ambas redes conectadas usan el mismo espacio IP ... Las máquinas virtuales a menudo están conectadas y tienen sus propias IP / rutas / enlaces ...) Publicar la topología de la red ayudaría.

  2. Una vez hecho esto, intente cualquiera sudo route add -host 54.81.143.201 -iface en0osudo ipfw . Si no está seguro del nombre del adaptador, puede especificar su dirección MAC, así:sudo route add -host 54.81.143.201 -link 14:10:9f:e7:fd:0a

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

  3. Si reinicia, esto puede no persistir. Tendrás que manejar eso por separado.



2

Pude agregar una ruta a través de una interfaz usando la -linkopción para especificar una dirección MAC.

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

Eso enviará tráfico por 54.81.143.201la interfaz adecuada.

Tienes dos 192.168.15.*direcciones de host separadas asignadas, una a cada interfaz, ¿verdad? De lo contrario, puede enviar tráfico desde cualquiera de las interfaces, pero el tráfico volverá a cualquier IP de origen que tengan los paquetes.


Así que probé lo que sugeriste usando el addr de mac, y curiosamente mi tabla de enrutamiento muestra una entrada para en3 y no en0 -> 54.81.143.201 00: 1d.88.4a.21.da UGHS 0 0 en3
Sean256

Cuando haces un 'arp -an', ¿qué entradas tienes ...?
Nevin Williams

2

Esta solución funciona en la última MacOS 10.12 (Sierra). Aquí está la esencia .

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

Usar así:

> sudo ./route_wifi.sh IP_ADDRESS

Se supone que la interfaz wifi es: en1 .

No olvide poner valores correctos para las variables wifi_router y wifi_address . Tenga en cuenta el formato wifi_address , que es: nombre de interfaz de red ' : ' dirección mac de interfaz con ' . ' delimitadores . Claro, la mayoría de la información requerida se puede analizar a partir de la salida del comando ifconfig , pero soy demasiado vago para eso =)


Bienvenido a Superusuario. Intenta contener la información más relevante del enlace en tu publicación. Lea más sobre esto aquí .
espuma de poliestireno volar

1

El routecomando OS X se documenta aquí . El -ifscopeparámetro y su valor le permiten especificar una ruta vinculada a la interfaz.

Sin embargo, esto no es lo que quieres. Debe reparar sus redes para que sus rangos de IP sean únicos. Aparte de eso, las métricas de la interfaz (también conocidas como prioridades) afectan qué interfaz se elige de una opción igualmente oportuna.


0

Aquí se explica cómo traducir el nombre definido por el usuario 'Wi-Fi' a cualquier nombre de dispositivo (por ejemplo, en0, en1, en9, ...) que MacOS haya asignado en ese momento.

Puede poner estas funciones en un script específico, o simplemente mantenerlas en su .bash_profile.

function get_srvc_name ()
{
  cat <<EOF | scutil | \
    grep 'UserDefinedName' | \
    awk -F': ' '{print $2}'
show Setup:/Network/Service/$1
EOF
}

function get_srvc_ids ()
{
  cat <<EOF | scutil | \
    sed -nEe '
/ServiceOrder/ {
  :ids
  n
  /[0-9]+ :/ {
    s/ *[0-9]+ : ([0-9A-Z-]+) */\1/p
    b ids
  }
}'
show Setup:/Network/Global/IPv4
EOF
}

function get_srvc_id_by_name ()
{
  local srvc_ids=$(get_srvc_ids)

  for srvc_id in $srvc_ids
  do
    local srvc_name=$(get_srvc_name "$srvc_id")
    if [[ "$srvc_name" == "$1" ]]
    then
      echo $srvc_id
      return
    fi
  done
}

function get_int_name ()
{
  local srvc_id=$(get_srvc_id_by_name "$1")

  cat <<EOF | scutil | \
    sed -nEe '
    s/ *DeviceName : ([a-zA-Z0-9]+) */\1/p'
show Setup:/Network/Service/$srvc_id/Interface
EOF
}

Luego solo llame get_int_name 'Wi-Fi'para obtener el nombre del dispositivo asignado.

Por ejemplo:

route add -host 54.81.143.201 -interface $(get_int_name 'Wi-Fi')

-1

Entonces, ¿el servidor del proveedor con el que estás tratando de hablar sobre el servicio "HipChat" que reclamas es 54.81.143.201? En este caso, haría una entrada de enrutamiento para 54.81.143.0 255.255.255.0 para darle un rango más grande. Quizás cuando se utiliza el software, no siempre se está hablando con este servidor específico, sino un grupo de ellos en la misma subred 54.81.143.0/24. Además, asegúrese de que sus métricas de ruta sean correctas al crear una nueva entrada. Si crea una ruta a 54.81.143.0/24 192.168.15.1 Metric 20 En5, pero también tiene una ruta a 0.0.0.0/0 10.7.90.1 Metric 10 En0. La computadora ignorará su nueva entrada y continuará enrutando el tráfico a través de la ruta predeterminada (a través de En0) porque es más preferible. Simplemente hojeé esto y quería señalarlo. ¡Aclamaciones!


-1

Debería intentar agregar el nombre de la NIC:

route add -net 10.13.0.0 netmask 255.255.0.0 dev NicNameHere

Esto funciona para mí en CentOS.


Me sale esto -> ruta: mala dirección: dev
Sean256
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.