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

Nat*_*ray 78 networking routing iptables mac-osx eth0

你好,

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

有时我会得到路由表,所以我得到ping: sendto: Network is unreachable了本来应该解析的 url。

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

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

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

编辑 另外,我注意到另一个症状traceroute在相关地址上也失败了。例如:

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

小智 74

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

  • 我已将此更改为已接受的答案。有用!我做了几次“route -nlush”,然后我只是通过系统首选项重新启动了我的网络。我只花了一年的时间就回来解决这个问题:) (2认同)

小智 23

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

我这边发生的事情是,与 VPN 断开连接后,以我的家庭 IP 作为目的地和错误网关的路由被剩余。删除这条路线解决了这个问题,简单地

$ sudo route -n delete the.good.dns.name
Run Code Online (Sandbox Code Playgroud)

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

$ netstat -nr
Destination                   Gateway
....
[home-ip]/32                  [school-default-gateway-1] ....
....
Run Code Online (Sandbox Code Playgroud)

我与 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
...
Run Code Online (Sandbox Code Playgroud)

发生这种情况后,我在任何情况下都无法连接到我的家庭网络(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
Run Code Online (Sandbox Code Playgroud)

它工作正常。

OpenVPN 服务器/客户端的配置方式可能存在问题,这将导致此问题(我很想知道那是什么),但我安装了一个 Tunnelblick 断开连接后脚本,可以自动删除此路由。


Jor*_*son 17

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

ifconfig en0 down

ifconfig en0 up

route add <ip address> default


jkl*_*klp 7

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

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

$ netstat -nr
Destination                   Gateway
...
[home-ip]/32                  [work-default-gateway-1]
Run Code Online (Sandbox Code Playgroud)

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

$ traceroute the.good.dns.name    
$ traceroute: bind: Can't assign requested address
Run Code Online (Sandbox Code Playgroud)

然后我必须手动删除路线

$ sudo route -n delete [home-ip]
Run Code Online (Sandbox Code Playgroud)

最初我将“route -n delete”放在一个post-disconnect.sh脚本中,但这有点乱,所以我找到了这个链接

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

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

user nobody
group nogroup
Run Code Online (Sandbox Code Playgroud)

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

在我的.ovpn文件中注释这两行可以解决问题,而无需使用post-disconnect.sh.