Só que um Daemon de Lançamento (como um item de inicialização antes dele) sofre de dois problemas importantes a esse respeito:
-
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.
-
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.