如何在不重新启动的情况下重新加载默认的Mac OSX路由表

问候,

我使用vpnc作为VPN客户端。 我也正在做一些棘手的事情,以确保我仍然可以访问我的本地networking等等(这里的细节不是很重要)。

有时我得到的路由表,所以顶起来我得到了ping: sendto: Network is unreachable的url,否则应该解决。

目前,如果我重新启动Mac OS X,一切都恢复正常。 我想要做的就是将路由表重置为“默认”(例如,启动时设置的), 而不需要重新启动整个系统。

我认为第1步是route flush (删除所有路由)。 第二步需要重新加载所有的默认路由。

任何想法如何做到这一点? (例如,步骤2是什么?)

编辑此外,我注意到另一个症状是traceroute也有问题的地址上失败。 例如:

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

    你需要刷新路线。 使用路由-n冲洗几次。 之后,添加路线添加您的路线。

    我在使用家庭OpenVPN服务器时遇到了这个问题,并使用Mac上的Tunnelblick应用程序连接到它。

    在我的最后发生了什么事情是,我的家庭IP作为目的地和一个不正确的网关路由从VPN断开后,剩下的路由。 删除这条路线简单地解决了这个问题

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

    例如:我在学校,在电脑启动后,我连接到无线networking。 我用Tunnelblick连接到我的家庭OpenVPN服务器。

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

    我从VPN服务器断开连接。 我改变无线networking。 这改变了我的默认网关。

     $ 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 ... 

    在这种情况发生之后,我不能在任何情况下连接到我的家庭networking(VPN,ping,任何东西)。 如果我只是删除路线:

     $ 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 

    它工作正常。

    OpenVPN服务器/客户端的configuration方式可能会出现问题(我想知道这是什么),但是我安装了一个Tunnelblick post-disconnect脚本,可以自动删除这个路由。

    首先你需要一个networking接口的路由。 如果VPN断开连接,只要把你的networking接口closures,然后用ifconfig重新启动。 然后使用路由命令来构build默认的gw。 所以像这样:

    ifconfig en0 down

    ifconfig en0 up

    route add <ip address> default

    我遇到了与@Sean(我也在运行OS X)相同的问题,因为当我在家庭和工作networking之间切换时,默认路由没有被删除。

    为了完整起见,当我在家连接到我的VPN并运行以下命令时,它将显示如下的默认网关

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

    当我断开连接时,[home-ip]网关仍然在那里。 当我连接到我的工作networking时,根本无法连接到互联网,并遇到与OP相同的问题

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

    然后我必须手动删除路由

     $ sudo route -n delete [home-ip] 

    最初,我把“route -n delete”放在post-disconnect.sh脚本中,但是有点麻烦,所以我find了这个链接

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

    显然原因是由于在我的.ovpn文件中设置以下内容

     user nobody group nogroup 

    这意味着路由是以root身份build立的,但是当连接断开时,用户不再是root用户,所以路由不能被删除。

    在我的.ovpn文件中注释这两行解决了这个问题,而不必使用post-disconnect.sh