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

59

Saudações

Estou usando vpnc para um cliente VPN. Também estou fazendo algumas coisas complicadas com route para ter certeza de que ainda posso acessar minha rede local, etc. etc. (os detalhes aqui não são muito importantes).

Às vezes, recebo a tabela de roteamento tão aumentada que obtenho ping: sendto: Network is unreachable para URLs que devem ser resolvidos.

Atualmente, se eu reiniciar o Mac OS X, tudo estará de volta ao normal. O que eu gostaria de fazer é redefinir as tabelas de roteamento para o "padrão" (por exemplo, o que é definido no boot) sem uma reinicialização do sistema inteiro.

Acho que a etapa 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, o que é o passo 2?)

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

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

    
por Nate Murray 26.10.2009 / 16:43

4 respostas

52

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

    
por 02.11.2009 / 10:51
15

Eu estava me deparando com esse problema enquanto usava um servidor OpenVPN doméstico e se conectava a ele usando o aplicativo Tunnelblick no Mac.

O que estava acontecendo do meu jeito é que uma rota com meu IP residencial como destino e um gateway incorreto estava sendo recuperada após a desconexão da VPN. A exclusão dessa rota resolveu o problema, simplesmente

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

Exemplo: estou na escola e depois de uma nova inicialização do computador, conecto-me a uma rede sem fio. Eu me conecto ao meu servidor OpenVPN em casa com o Tunnelblick.

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

Eu me desconecto do servidor VPN. Eu mudo de redes 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 posso, em circunstância alguma, me conectar à minha rede doméstica (VPN, ping, nada) depois que isso acontecer. Se eu apenas apagar 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 em como o servidor / cliente OpenVPN está configurado, o que está deixando isso (e eu estaria interessado em descobrir o que é isso), mas instalei um script Tunnelblick pós-desconexão que automatiza a exclusão dessa rota .

    
por 17.04.2015 / 19:46
9

Primeiro, você precisa de uma rota para sua interface de rede. Se a VPN for desconectada, desative sua interface de rede e, em seguida, retorne-a com o ifconfig. Em seguida, use o caminho de comunicação para construir o seu padrão gw. Então, algo como:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default

    
por 26.10.2009 / 21:34
5

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

Para completar, quando me conecto à minha VPN em casa e executo o seguinte comando, ele mostrará 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 conecto à minha rede de trabalho, não consigo me conectar à Internet e me deparo com o mesmo problema que o 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 eu coloquei o "route -n delete" em um script post-disconnect.sh , mas isso foi um pouco bagunçado, então eu achei esse link

link

Aparentemente, o motivo é devido à configuração do seguinte no meu arquivo .ovpn

user nobody
group nogroup

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

Comentar essas duas linhas no meu arquivo .ovpn resolveu o problema, sem ter que usar um post-disconnect.sh .

    
por 06.10.2015 / 01:29