Como recarregar a tabela de roteamento padrão do Mac OSX sem reiniciar

71

Saudações,

Estou usando vpncpara um cliente VPN. Também estou fazendo algumas coisas complicadas routepara garantir que ainda possa acessar minha rede local, etc. etc. (os detalhes aqui não são muito importantes).

Às vezes, recebo a tabela de roteamento tão levantada que recebo ping: sendto: Network is unreachableURLs que, de outra forma, deveriam resolver.

Atualmente, se eu reiniciar o Mac OS X, tudo voltará ao normal. O que eu gostaria de fazer é redefinir as tabelas de roteamento para o "padrão" (por exemplo, o que está definido na inicialização) sem uma reinicialização completa do sistema.

Eu acho que o passo 1 é route flush(para remover todas as rotas). E a etapa 2 precisa recarregar todas as rotas padrão.

Alguma ideia de como fazer isso? (por exemplo, qual é o passo 2?)

EDIT Além disso, estou percebendo que outro sintoma traceroutetambém falha no endereço em questão. Por exemplo:

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

Nate Murray
fonte

Respostas:

64

Você precisa liberar as rotas. Use route -n flush várias vezes. Depois, adicione suas rotas com a adição de rota.

cavver
fonte
11
Eu mudei isso para a resposta aceita. Funciona! Fiz route -n flushvárias vezes e reiniciei minha rede por meio das preferências do sistema. Só me levou um ano para voltar e descobrir isso :)
Nate Murray
Isso resolveu um problema semelhante para mim com o cliente Aventail Connect VPN da Sonicwall, que considero particularmente propenso a falhas "Não é possível atribuir endereço solicitado", especialmente ao alternar redes sem fio. Agora eu tenho uma maneira de resolver que não evita um ciclo de energia. Obrigado!
18113 Alan Donnelly
Uau! Também ajudou no meu problema com o BarracudaVPN… eu desligo o Wi-Fi / ligue-o e finalmente consegui conectar novamente! Muito obrigado!
hans_meine 27/06
19

Eu estava enfrentando esse problema enquanto usava um servidor OpenVPN doméstico e conectava-o usando o aplicativo Tunnelblick no Mac.

O que estava acontecendo do meu lado é que uma rota com o meu IP residencial como destino e um gateway incorreto estavam ficando restantes após a desconexão da VPN. A exclusão desta rota resolveu o problema, simplesmente

$ sudo route -n delete the.good.dns.name

Exemplo: estou na escola e após uma nova inicialização do computador, conecto-me a uma rede sem fio. Eu me conecto ao meu servidor OpenVPN doméstico com o Tunnelblick.

$ netstat -nr
Destination                   Gateway
....
[home-ip]/32                  [school-default-gateway-1] ....
....

Desconecto do servidor VPN. Eu mudo de rede sem fio. Isso muda meu gateway padrão.

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [school-default-gateway-1] ...
...
$ ping [home-ip]
PING [home-ip]: 56 data bytes
ping: sendto: Network is unreachable
ping: sendto: Network is unreachable
Request timeout for icmp_seq 0
...

Não consigo, em nenhuma circunstância, conectar-me à minha rede doméstica (VPN, ping, qualquer coisa) depois que isso acontecer. Se eu apenas excluir a rota:

$ sudo route -n delete [home-ip]
delete net [home-ip]
$ ping [home-ip]
PING [home-ip]: 56 data bytes
64 bytes from [home-ip]: icmp_seq=1 ttl=56 time=13.111 ms

Funciona bem.

Pode haver um problema com a configuração do servidor / cliente OpenVPN que está deixando isso (e eu estaria interessado em descobrir o que é isso), mas instalei um script de pós-desconexão do Tunnelblick que automatiza essa exclusão de rota.

Sean
fonte
Na verdade, estou tendo um problema semelhante aqui. Realmente irritante.
Tom Busby
Estou com o mesmo problema, mesmo com o exemplo de script ovpn. A única solução que encontrei é a mesma do OP, ao excluir a rota em um script pós-desconexão: /
jklp
Existe uma maneira de executar automaticamente esse script em todas as desconexões?
Whitecat 25/05
@Whitecat Yes! Verifique isso: superuser.com/a/1305361
Elad Nava
13

Primeiro você precisa de uma rota para sua interface de rede. Se a VPN estiver desconectada, basta desligar sua interface de rede e trazê-la de volta com ifconfig. Em seguida, use o commnand da rota para criar seu gw padrão. Então, algo como:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default

Jordan Eunson
fonte
11
Sim, mas como o Mac OS X sabe qual é o endereço IP da rota padrão? O que eu realmente gostaria de ver é como o Mac OS X faz o processo de inicialização e faz exatamente a mesma coisa.
Nate Murray
11
...? Ela recebe-lo de DHCP ...
Jordan Eunson
5

Eu estava enfrentando o mesmo problema que o @Sean (também estou executando o OS X); quando alternava entre as redes doméstica e de trabalho, a rota padrão não estava sendo excluída.

Para garantir a integridade, quando eu me conecto à minha VPN em casa e executando o seguinte comando, ele mostra o gateway padrão como abaixo

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [work-default-gateway-1]

E quando eu desconectei, o gateway [home-ip] ainda estaria lá. Quando eu me conectava à minha rede de trabalho, não conseguia conectar-me à Internet e encontrava o mesmo problema do OP

$ traceroute the.good.dns.name    
$ traceroute: bind: Can't assign requested address

Eu teria que excluir manualmente a rota com

$ sudo route -n delete [home-ip]

Inicialmente, coloquei o "route -n delete" em um post-disconnect.shscript, mas isso foi um pouco confuso, então, em vez disso, encontrei este link

https://code.google.com/p/tunnelblick/issues/detail?id=177

Aparentemente, o motivo se deve à configuração do seguinte no meu .ovpnarquivo

user nobody
group nogroup

O que significa que a rota é configurada como raiz, mas quando a conexão é desativada, o usuário não é mais raiz e, portanto, a rota não pode ser excluída.

Comentar essas duas linhas no meu .ovpnarquivo corrigiu o problema, sem ter que usar a post-disconnect.sh.

jklp
fonte
Obrigado, isso funcionou para mim também. É uma pena que o link do código do google não funcione mais.
Toby
Eu tentei usar sua sugestão, o problema é que, quando me conecto à VPN, ele extrai os arquivos de configuração de algum lugar e substitui minhas alterações. Não os obtém do servidor, pelo que sei, porque quando troco esses arquivos, isso não resolve o problema. Existe algum local no lado do cliente onde eu possa encontrar esses arquivos e destruí-los / modificá-los para que minhas alterações permaneçam?
Finncent Price
Eu estava cometendo o erro trivial de confundir ~ / Library com / Library. Opa! Para quem está lendo isso, deseja modificar o arquivo em ~ / Biblioteca / Suporte a aplicativos / Tunnelblick / Configurações / <vpnname> .tblk / Conteúdo / Recursos
Finncent Price