OS X - Rotas estáticas / gateway padrão não padrão para nós de extremidade em * sub-rede local *

0

Minha pergunta é: Como posso configurar de forma confiável uma rota estática no OS X, para que dois pontos de extremidade passem por um gateway, onde todas as máquinas estão na mesma sub-rede? Eu forneço o contexto abaixo:

Para fins de teste, eu preciso ser capaz de configurar uma rota específica entre 2 terminais na mesma sub-rede local - um MacBook OS X (10.9) e um 'receptor' baseado em Linux.

O comportamento precisa ser tal que o próximo salto para o tráfego que sai do MacBook seja uma máquina de QoS baseada no FreeBSD e não o gateway padrão. A máquina BSD também pode se sentar na mesma sub-rede e executar o SNAT para mascarar o novo tráfego e re-traduzir no retorno.

Simplificado, meu ambiente é semelhante ao seguinte:

Local subnet = 10.160.0.0/16
MacBook = 10.160.2.100
Linux Receiver = 10.160.2.200
Default Gateway for standard devices = 10.160.0.1


Exemplo de configuração do gateway BSD:

en0 10.160.2.160
en1 10.160.3.170
netmask 255.255.0.0
gateway 10.160.0.1


Um exemplo do fluxo desejado:

REQUEST: MacBook --> BSD --> DefaultGateway --> Receiver
RESPONSE: Receiver --> DefaultGateway --> BSD --> MacBook


Eu vejo 3 problemas ocorrendo:

  1. Se eu definir o gateway padrão para en0 (a única interface ativa) em OS X para ser a máquina BSD em dizer 10.160.2.160, isso funciona para um enquanto até que esta rota padrão seja automaticamente sobrescrita pelo OS X para ser o padrão 10.160.0.1

  2. Estou também com problemas ao configurar rotas estáticas no OS X usando:

    route add 10.160.2.200 10.160.2.160
    

    .. neste caso, uma das duas coisas acontece - ou a rota funciona por um tempo exibindo os flags UGHS do netstat, e é então sobrescrita pelo OS X após o qual o netstat inclui o flag M para indicar que foi sobrescrito por um redirecionamento ..

  3. .. ou a rota não funciona, pois deve haver alguma outra rota que tenha precedência. Traceroute confirma isso.


Saída do Netstat após a configuração inicial:

jiosxserver:~ julianivory$ netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.160.2.160       UGSc           17        0     en0
10.140.1.31        10.160.2.160       UGHS            0        0     en0
10.140.1.35        10.160.1.1         UGHS            0        0     en0
10.160/16          link#4             UCS             5        0     en0
10.160.0.1         0:14:22:20:1c:d9   UHLWIir        14        0     en0   1191
10.160.1.37        0:50:56:8a:87:e9   UHLWIi          0        0     en0   1138
10.160.2.160       8e:af:b2:47:7f:91  UHLWIir         4        0     en0   1144
10.160.3.75        127.0.0.1          UHS             0        0     lo0
10.160.3.79        a8:20:66:27:72:2e  UHLWIi          0        1     en0   1184
10.160.255.255     ff:ff:ff:ff:ff:ff  UHLWbI          0       44     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              9    20602     lo0
169.254            link#4             UCS             0        0     en0

... e a saída do Traceroute mostra que a rota padrão não está em uso:

traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
 1  10.160.0.1 (10.160.0.1)  0.504 ms  0.237 ms  0.217 ms
 2  192.168.2.1 (192.168.2.1)  1.065 ms  1.020 ms  0.973 ms
 3  name-removed (xx.1xx.xxx.1)  14.250 ms  13.688 ms  14.046 ms
 4  xxx.xxx.178.141 (xxx.xxx.178.141)  14.196 ms  14.121 ms  13.967 ms


... depois de algum tempo, o gateway padrão terá "automagicamente" alterado para 10.160.0.1 ...

Quaisquer pensamentos ou sugestões seriam muito apreciados.

    
por J Ivory 19.03.2015 / 11:50

2 respostas

0

Para quem pode se beneficiar disso, meu principal problema é que outros dispositivos enviavam redirecionamentos de ICMP. Depois de desabilitar isso na minha máquina local (OS X), minhas rotas estáticas são confiáveis.

No OS X, isso pode ser feito em tempo real usando sysctl:

/usr/sbin/sysctl -w net.inet.icmp.drop_redirect=1
/usr/sbin/sysctl -w net.inet.ip.redirect=0

Isso também pode ser definido persistentemente no /etc/sysctl.conf

    
por 08.04.2015 / 17:18
1

Este link une a resposta para rotas estáticas macOS que são persistentes em reinicializações com uma informação adicional para a situação desta questão ... obtida a partir das informações de uso do comando networksetup.

Do networksetup (linha de comando - use Terminal):

Usage: networksetup -setadditionalroutes <networkservice> [ <dest> <mask> 
<gateway> ]*
   Set additional IPv4 routes associated with <networkservice>
   by specifying one or more [ <dest> <mask> <gateway> ] tuples.
   Remove additional routes by specifying no arguments.
   If <gateway> is "", the route is direct to the interface

Se você estiver executando várias redes que podem ser acessadas na mesma camada 2 (e sim você pode fazer isso sem roteadores!), a sintaxe é

networksetup -setadditionalroutes Máscara de dest. Ethernet ""

Note que você tem que determinar a qual serviço de rede as rotas se aplicam (com fio, wifi, etc). E, claro, as convenções de nomenclatura NÃO correspondem à saída do ifconfig!

networksetup -listallnetworkservices

você pode ter que citar o valor se tiver mais de um tipo de interface (por exemplo, várias interfaces com fio). Note também que networksetup requer que você defina todas as rotas em um comando !!! Então, se você tem várias rotas estáticas, use:

networksetup -setadditionalroutes <networkservice> dest1 mask1 "" dest2 mask2 ""

e assim por diante.

    
por 10.01.2018 / 17:27