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

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

问候,

我将其用作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

答案1

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

答案2

我在使用家庭 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 断开连接后脚本,可以自动删除此路由。

答案3

首先,您需要为您的网络接口设置路由。如果 VPN 断开连接,则只需关闭您的网络接口,然后使用 ifconfig 将其重新打开。然后使用路由命令建立您的默认网关。因此,如下所示:

ifconfig en0 down

ifconfig en0 up

route add <ip address> default

答案4

我遇到了与@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

相关内容