问候,
我将其用作vpnc
VPN 客户端。我还做了一些棘手的事情,以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
。