Definindo uma rota estática persistente no Mac OS X

5

Como se define uma rota estática no MacOS X que persiste durante as reinicializações? A única sugestão que encontrei no Google aconselha a criação de um serviço launchd para ser executado na inicialização, o que parece ser um hack horrível (ele sobrevive a uma reinicialização de rede sem reinicializar, por exemplo?)

Para configurar a rota que preciso temporariamente, posso executar o seguinte:

route add -net ${network} ${gateway} ${netmask}

Como eu faria isso persistir?

    
por Charles Duffy 22.03.2010 / 15:20

3 respostas

2

Só que um Daemon de Lançamento (como um item de inicialização antes dele) sofre de dois problemas importantes a esse respeito:

  1. Se a configuração do sistema refizer a configuração da rede, ela irá arruinar sua rota. Você pode combater isso fazendo o launchd executar periodicamente o Launch Daemon, mas você ainda pode ter que esperar esse período de tempo para que sua rota seja restaurada.

  2. Os daemons de inicialização e os itens de inicialização podem ser executados antes que algumas interfaces de rede sejam totalmente configuradas. Nesse caso, talvez você não consiga criar uma rota nesse momento e pode ter que voltar a esperar por uma chamada periódica do seu Daemon de inicialização (ou no caso de um Item de inicialização, talvez para uma tarefa cron).

Acabei de postar o que, esperamos, será uma solução melhor (ou seja, mais robusta) no meu site. Eu construí um pacote de instalação (download) para ele; existe também algum código-fonte, mas não posso postar o link no Server Fault, pois ainda não tenho uma reputação suficientemente alta para colocar mais de um hyperlink por postagem.

Para usá-lo, instale o pacote (até agora testado apenas no meu laptop, mas parece funcionar). Ele deve instalar um Launch Daemon que inicie o processo do servidor "staticrouted" (você pode verificar isso na parte superior; se ele não estiver em execução, provavelmente significa que o instalador está um pouco errado, mas você deve poder iniciá-lo usando launchctl usual).

Para criar rotas estáticas, você usa o programa "staticroute" (que você encontrará em / usr / local / sbin). por exemplo,

staticroute add 10.128.4.0/24 "Main Network Interface"
staticroute delete 10.192.0.0/16 "Other Interface"

Você também pode ver a lista de rotas estáticas configuradas com

staticroute list

e uma lista de nomes de interface com

staticroute list-interfaces

As rotas estáticas configuradas sobrevivem a um reinício e serão automaticamente adicionadas e removidas à medida que as interfaces de rede sobem e descem.

Existem também páginas man; estes são instalados em / usr / local / share / man / man8, então você também pode querer adicionar / usr / local / share / man ao seu MANPATH se ainda não estiver lá.

Devo enfatizar que acabei de cancelar esse código hoje para corrigir um problema causado por eu ter que usar um cron job para manter as rotas estáticas no lugar. Parece funcionar para mim, mas YMMV. O código e os binários são licenciados pelo MIT.

    
por 15.07.2010 / 19:59
3

Três abordagens, em ordem crescente de bondade:

  • Crie manualmente um serviço launchd para configurar a rota, de acordo com o link
  • Use Lingon para automatizar a criação de um serviço, caso contrário, como acima; este software não é mantido, mas ainda funciona bem no OS X 10.5.8.
  • Use o RouteSplit , uma ferramenta criada para esse fim.
por 22.03.2010 / 15:42
1

Eu tenho que discordar da ordem de bondade - se o OP usa o launchd (seja com um plist criado manualmente ou um criado com o lingon), ele pode ser executado na inicialização. Se eles usarem uma solução baseada em AppleScript como o RouteSplit, eles não poderão executá-lo sem um usuário logado.

Charles, estou curioso, por que usar uma ferramenta sancionada por um fornecedor de sistemas operacionais como o launchd parece-lhe interessante?

    
por 04.04.2010 / 08:00