问候,

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

有时候我得到了路由表,所以顶起来,我得到ping: sendto: Network is unreachable可以解决的网址。

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

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

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

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

traceroute the.good.dns.name

traceroute: bind: Can't assign requested address

#1 楼

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

评论


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

–内特·默里(Nate Murray)
11年5月13日在16:44



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

–艾伦·唐纳利(Alan Donnelly)
2012-10-18 18:56



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

–hans_meine
19年6月27日在15:50

#2 楼

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

最后发生的事情是以我的家庭IP为目的地的路由,从VPN断开连接后,不正确的网关将剩余。删除这条路线即可解决问题,只需

$ 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断开后脚本,该脚本可自动执行此路由删除。

评论


我实际上在这里有一个类似的问题。真烦人。

–汤姆·比斯比(Tom Busby)
2015年6月17日14:16在

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

– jklp
2015年10月5日23:11



有没有办法在每次断开连接时自动运行此脚本?

–白猫
17年5月25日在17:21

@Whitecat是的!签出:superuser.com/a/1305361

– Elad Nava
18年5月22日在10:31

#3 楼

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

ifconfig en0 down

ifconfig en0 up

route add <ip address> default

评论


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

–内特·默里(Nate Murray)
09-10-26在22:10

...?它是从DHCP获取的...

–乔丹·尤森(Jordan Eunson)
09-10-26在22:21

#4 楼

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

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

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


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

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


使用

$ sudo route -n delete [home-ip]
手动删除路由

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

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

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

user nobody
group nogroup


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

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

评论


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

–托比
18年2月1日在6:06

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

–价格
18-10-24在9:19

我犯了一个琐碎的错误,将〜/ Library与/ Library混淆了。糟糕!对于阅读本文的任何人,您都想要在〜/ Library / Application Support / Tunnelblick / Configurations / .tblk / Contents / Resources中修改文件

–价格
18-10-24在9:26