Como associar uma rota a uma interface?


0

Eu tenho um Mac com duas interfaces de rede, conectado a redes diferentes. Por uma questão de argumentação, digamos que um esteja conectado a uma rede privada e o outro à Internet.

Eu entendo que posso usar o painel de preferências do sistema Redes para colocar a interface da Internet mais alta na "ordem de serviço" do que na rede privada e que, ao fazer isso, seu "Roteador" se tornará o gateway padrão do sistema. Router "é ignorado).

No entanto, isso obviamente resulta em todos tráfego sendo roteado pela Internet (exceto a sub-rede específica da rede privada à qual a máquina está diretamente conectada). Eu quero substituir esse comportamento para o inteira rede privada, encaminhando todo o tráfego privado através da interface apropriada.

Qual é a "maneira da Apple" de realizar isso? Simplesmente executando sudo route add ... cria apenas a rota temporariamente, enquanto eu quero associá-la à interface de alguma forma permanente (ou seja, que sobreviverá ao estado de alteração da interface ou à reinicialização do sistema).

Eu presumo que a solução envolva o launchd invocando um script depois que a interface aparecer… mas como ?!


Por favor, adicione algumas informações sobre a "rede privada inteira" e como ela difere da "rede privada de sub-rede específica".
klanomath

@klanomath: Para fins de argumentação, suponha que "toda a rede privada" seja 10/8 e a "sub-rede específica" seja 10.11.12 / 24.
eggyal

Só estou perguntando porque nenhum tráfego para redes privadas é roteado com sucesso pela Internet (exceto quando a VPN está envolvida) por favor, verifique . Portanto, algumas informações básicas sobre sua infra-estrutura de rede estão faltando.
klanomath

@klanomath: É exatamente por isso que eu preciso de uma rota estática para garantir que o tráfego da rede privada seja roteado pela interface de rede privada.
eggyal

você checou isso: rota estática
klanomath

Respostas:


0

1 - Aqui está um copiado solução mas depreciado:

Primeiro de tudo, você tem que ser um administrador local.

Abra um terminal e mude para o diretório StartupItems

cd /Library/StartupItems

Em seguida, crie um novo diretório com privilégios de root, por exemplo, AddRoutes e mude para ele

sudo mkdir ./AddRoutes
cd ./AddRoutes

Agora você tem que criar e editar o script bash

sudo touch ./AddRoutes
sudo nano ./AddRoutes

Cole as seguintes linhas no script bash e adaptá-lo para sua rede

#!/bin/sh

# Set static routing tables

. /etc/rc.common

StartService ()
{
sleep 10
ConsoleMessage "Adding Static Routing Table"
sudo /sbin/route add -net 10.0.0.0 -netmask 255.0.0.0 -gateway w.x.y.z
}

StopService ()
{
return 0
}

StopService ()
{
return 0
}

RestartService ()
{
return 0
}

RunService "$1"

Quando você terminar o script, salve-o.

Em seguida, crie o plist correspondente.

sudo touch StartupParameters.plist
sudo nano StartupParameters.plist

Quando você criou o arquivo plist, cole as seguintes linhas nele.

{
Description = "Add static routing tables";
Provides = ("AddRoutes");
Requires = ("Network");
OrderPreference = "None";
}

Quando você terminar o arquivo plist, salve-o.

Finalmente você tem que definir os direitos de acesso

sudo chmod 755 /Library/StartupItems/AddRoutes/*

No final, você precisa reiniciar e agora suas rotas estáticas permanentes estão definidas.

Você pode verificar com o seguinte

netstat -nr

2 - Aqui você pode encontrar uma solução mais atualizada envolvendo um pequeno programa:

rota estática

As rotas estáticas configuradas sobrevivem a uma reinicialização e serão automaticamente adicionadas e removidas à medida que as interfaces de rede sobem e descem.


Obrigado. Eu já tinha visto essa solução antes. Contudo, StartipItems foi preterido por um tempo em favor de launchd. Existe uma recomendação atual?
eggyal

Funciona de forma semelhante. Você provavelmente ainda precisa do mesmo script de shell. Deixe-me dar uma olhada...
klanomath

Outro problema é que o script precisará ser acionado sempre que a interface aparecer, não apenas quando a máquina for reinicializada.
eggyal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.