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