Como direcionar a rota IP através de uma interface específica no OS X?

40

Estou em um mac e estou tentando rotear um endereço específico através de um gateway específico na minha conexão wifi.

Estou a usar:

route add -host 54.81.143.201 192.168.15.1

Às vezes isso vai funcionar, outras vezes não. O que eu descobri é que a interface que escolhe é sempre diferente. Precisa ot ser en0trabalhar

netstat -nr saída quando não funciona:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

É quando funciona: (nota en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

Por que estou fazendo isto? Porque nossa empresa possui um proxy no qual o HipChat não funciona. Então, eu estou roteando o tráfego do hipchat através de uma rede wifi aberta enquanto ainda estou na ethernet do meu trabalho.

EDITAR:

Eu também tentei adicionar a entrada usando apenas a interface

route add -host 54.81.143.201 -interface en0

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

O HipChat falha na conexão.

EDIT 2: Alguém pediu minha tabela de roteamento inteira, aqui está hoje. Observe que 54.81.143.201 agora está vinculado a en3 e não 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
fonte
Poste a tabela de roteamento completa para o caso em que não funciona. 192.168.15.1 é alcançável através da en5? Se sim, por que não funciona? Caso contrário, é difícil ver como essa rota foi adicionada.
David Schwartz
@DavidSchwartz, isso é o que é interessante para mim. 192.168.15.1 não é acessível através de en5. A coisa funciona quando é atribuída corretamente a en0.
Sean256
Mostre-nos a tabela de roteamento ou a configuração de en5. Deve haver algum motivo para a rota ser instalada dessa maneira, e esse provavelmente é o verdadeiro problema.
David Schwartz
@DavidSchwartz Nem sempre é en5, às vezes é en3. Estou postando toda a minha tabela de roteamento agora.
Sean256
Na tabela de roteamento que você mostrou, en3está claramente correta. 192.168.15.1 não pode ser acessado por nenhuma outra interface. A única maneira de alcançar 192.168.15.1 nessa tabela de roteamento é através da rota padrão, certo? (Sem rodeios, parece que você não tem idéia do que você está fazendo Você parece ser surpreendido que o sistema não está a fazer o impossível..)
David Schwartz

Respostas:

34

Experimentar:

route add -host 54.81.143.201 -interface en0
drk.com.ar
fonte
2
Isto é o que recebo quando tento isso: route: bad address: en0
Sean256
Desculpe, não tenho um Mac para testar isso. Parece que a sintaxe estava errada. Eu modifiquei a resposta. Por favor, tente novamente.
Drk.com.ar
1
mesma coisa, infelizmente -> route: bad address: en0
Sean256
Tente novamente. Desta vez, removi o gateway. Além disso, você poderia adicionar a saída ifconfig à sua pergunta para ver a configuração do IP envolvida?
Drk.com.ar
Eu apenas tentei isso (na verdade também já fiz isso antes) e ele adiciona uma entrada à minha tabela, não resolve o problema. O HipChat falha na conexão. Aqui está a entrada na tabela de roteamento ao fazê-lo dessa maneira -> 54.81.143.201 78: 31: c1: c7: 52: 74 UHS 0 2 pt0
Sean256
3

Como outros indicaram, na verdade são 3 problemas.

  1. Sua interface sem fio parece estar mudando entre en0, en3 e en5.

    No meu MacBook Air, o en0 é sempre sem fio; Thunderbolt para Ethernet é sempre en3 e USB para Ethernet é sempre en5. Mas se você conectar um adaptador a uma porta diferente no seu Mac, o nome da NIC mudará. Você precisa resolver isso primeiro. Verifique se o seu dispositivo sem fio sempre tem o mesmo nome. Caso contrário, quando você digitar o comando de rota estática, se não houver uma NIC conectada ao en0local, o comando (obviamente) falhará com um "erro de endereço" (o endereço físico não possui link).

    Da mesma forma, verifique se o adaptador está sempre se conectando ao mesmo SSID. Obviamente, o endereço do gateway deve ser válido para a sub-rede, e redes WiFi diferentes terão sub-redes diferentes. Isso pode causar outro tipo de erro.

    Você não especificou se a conexão sem fio é sua única rede. Dado o exposto, acho que não ...? Isso e a rede virtual devido ao VMware ou Parallels podem causar complexidades adicionais. (Por exemplo, se as duas redes conectadas usarem o mesmo espaço IP ... As máquinas virtuais geralmente têm uma ponte e têm seus próprios IPs / rotas / links ...) A publicação da topologia de rede ajudaria.

  2. Feito isso, tente sudo route add -host 54.81.143.201 -iface en0ou sudo ipfw. Se você não tiver certeza do nome do adaptador, poderá especificar seu endereço MAC, assim: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. Se você reiniciar, isso pode não persistir. Você precisará lidar com isso separadamente.

Courtney Schwartz
fonte
2
sudo route -n add -net 54.81.143.201/32 192.168.15.1
Muthukumar Anbalagan
fonte
@mnciitbhu obrigado ... funcionou para mim também: P
Muthukumar Anbalagan
2

Consegui adicionar uma rota através de uma interface usando a -linkopção para especificar um endereço MAC.

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

Isso enviará tráfego para 54.81.143.201a interface apropriada.

Você tem dois 192.168.15.*endereços de host separados atribuídos, um para cada interface, certo? Senão, você pode enviar tráfego de qualquer interface, mas o tráfego retornará no IP de origem que os pacotes tiverem.

Nevin Williams
fonte
Então tentei o que você sugeriu usando o mac addr e, estranhamente, minha tabela de roteamento mostra uma entrada para en3 e não en0 -> 54.81.143.201 00: 1d.88.4a.21.da UGHS 0 0
en3
Quando você faz um 'arp -an', quais entradas você tem ...?
Nevin Williams
2

Esta solução funciona no mais recente MacOS 10.12 (Sierra). Aqui está a essência .

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

Use assim:

> sudo ./route_wifi.sh IP_ADDRESS

Supõe que a interface wifi seja: en1 .

Não se esqueça de colocar valores corretos para wifi_router e wifi_address variáveis. Observe o formato wifi_address , que é: nome da interface de rede ' : ' interface mac address with ' . ' Delimitadores . Claro que a maioria das informações necessárias pode ser analisada na saída do comando ifconfig , mas eu sou muito preguiçoso para isso =)

Alexander Malkoff
fonte
Bem-vindo ao Superusuário. Tente conter as informações mais relevantes do link em sua postagem. Leia mais sobre isso aqui .
isopor voar
1

O routecomando OS X está documentado aqui . O -ifscopeparâmetro e seu valor permitem especificar uma rota vinculada à interface.

Isso não é, no entanto, o que você deseja. Você precisa consertar suas redes para que seus intervalos de IP sejam únicos. Fora isso, as métricas da interface (também conhecidas como prioridades) afetam a interface escolhida entre as opções igualmente oportunas.

Daniel B
fonte
-1

Portanto, o servidor do fornecedor com o qual você está tentando conversar sobre o serviço "HipChat" que você alega é 54.81.143.201? Nesse caso, eu faria uma entrada de roteamento para 54.81.143.0 255.255.255.0 para oferecer um intervalo maior. Talvez ao usar o software, você nem sempre esteja conversando com esse servidor específico, mas com um cluster deles na mesma sub-rede 54.81.143.0/24. Além disso, verifique se as métricas de rota estão corretas ao criar uma nova entrada. Se você criar uma rota para 54.81.143.0/24 192.168.15.1 Metric 20 En5, mas também tiver uma rota para 0.0.0.0/0 10.7.90.1 Metric 10 En0. O computador ignorará sua nova entrada e continuará roteando o tráfego pela rota padrão (via En0), porque é mais preferível. Eu apenas passei por isso e queria apontar isso. Felicidades!

KaneNFL443
fonte
-1

Você deve tentar adicionar o nome da NIC:

route add -net 10.13.0.0 netmask 255.255.0.0 dev NicNameHere

Isso funciona para mim no CentOS.

user220248
fonte
Eu obtenho este -> route: bad address: dev
Sean256