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


71

问候,

我正在使用vpncVPN客户端。我还在做一些棘手的事情,route以确保我仍然可以访问我的本地网络等。(这里的细节不是很重要)。

有时,我得到了路由表,因此顶住了ping: sendto: Network is unreachable要解决的URL。

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

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

有关如何执行此操作的任何想法?(例如,步骤2是什么?)

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

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

Answers:


64

您需要冲洗路线。使用route -n flush多次。然后使用route add添加您的路线。


1
我已将其更改为可接受的答案。有用!我做route -n flush了几次,然后通过“系统”偏好设置重新启动了网络。我只花了一年的时间就回来解决这个问题:)
Nate Murray

Sonicwall的Aventail Connect VPN客户端为我解决了类似的问题,我发现它特别容易出现“无法分配请求的地址”故障,尤其是在切换无线网络时。现在,我有一种解决方法,可以避免电源重启。谢谢!
艾伦·唐纳利

哇!这也帮助解决了我与BarracudaVPN的问题……我关闭/打开了Wi-Fi,最后可以再次连接!非常感谢!
hans_meine

19

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

我发生的事情是,从VPN断开连接后,一条路由以我的家庭IP为目的地,而错误的网关被留下了。删除这条路线即可解决问题

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

示例:我在学校,重新启动计算机后,我连接到无线网络。我使用Tunnelblick连接到我的家庭OpenVPN服务器。

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

我从VPN服务器断开连接。我更改无线网络。这将更改我的默认网关。

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

发生这种情况后,无论如何我都无法连接到我的家庭网络(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服务器/客户端的配置方式可能会出现问题,这将导致此问题消失(我很想知道那是什么),但是我安装了Tunnelblick断开连接后脚本来自动删除此路由。


我实际上在这里有一个类似的问题。真烦人。
汤姆·巴斯比

即使使用示例ovpn脚本,我也遇到了相同的问题。我发现的唯一解决方案与OP相同,只是删除了断开连接后脚本中的路由:/
jklp

有没有一种方法可以在每次断开连接时自动运行此脚本?
Whitecat '17

@Whitecat是的!看看这个:superuser.com/a/1305361
Elad Nava

13

首先,您需要网络接口的路由。如果VPN断开连接,则只需断开您的网络接口,然后使用ifconfig将其恢复。然后使用路由命令构建默认的gw。所以像这样:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default


1
是的,但是Mac OS X如何知道默认路由的IP地址是什么?我真正想看到的是Mac OS X如何完成启动过程并完成完全相同的操作。
内特·默里

1
...?它是从DHCP获得的...
Jordan Eunson

5

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

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

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

当我断开连接时,[home-ip]网关仍将存在。当我连接到我的工作网络时,我根本无法连接到互联网,并遇到与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脚本中,但这有点混乱,因此我找到了此链接

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

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

user nobody
group nogroup

这意味着该路由被设置为root,但是当断开连接时,用户不再是root,因此无法删除该路由。

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


谢谢,这也为我工作。不幸的是,谷歌代码链接不再起作用。
Toby

我尝试使用您的建议,问题是当我连接到VPN时,它会从某处拉出配置文件并覆盖我的更改。据我所知,它并没有从服务器上获取它们,因为当我更改这些文件时,并不能解决问题。是否有一些客户端位置可以找到这些文件并销毁/修改它们,以便我的更改得以保留?
Finncent价格

我犯了一个琐碎的错误,将〜/ Library与/ Library混淆了。糟糕!对于阅读此文件的任何人,您都希望在〜/ Library / Application Support / Tunnelblick / Configurations / <vpnname> .tblk / Contents / Resources
Finncent Price '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.