我正在将其添加route IP_ADDRESS NETMASK net_gateway
到 OpenVPN 配置文件(本地),因此它不会被服务器推送,并且运行良好。
然而,当我消除从配置文件中删除路由行并重新连接到 OpenVPN 服务器,它将保留在路由表中(根据route PRINT
Windows 7 上的 cmd.exe)。这意味着 OpenVPN 不会删除先前生成的路由。
我想知道如何防止这种情况。我在下面添加了一个示例配置文件(并不太特别)。
client
dev tap
proto tcp-client
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
comp-lzo
verb 3
auth-user-pass
route 192.168.1.100 255.255.255.255 net_gateway
答案1
Windows 7 客户端计算机很可能将 IP 条目缓存在其 ARP 表或路由表中。这篇 Microsoft 文章概述了 Windows 7 上的一些默认 ARP 行为http://support.microsoft.com/kb/949589,包括条目保留的默认时间。为了测试这个假设,我将使用 OpenVPN 连接,断开连接,然后刷新 ARP 表,和/或刷新路由表,看看路由是否仍然存在。如果它立即消失,请查看 Windows 7 在没有手动刷新的情况下需要多长时间才能删除路由。如果是这种情况,那么您必须找到一种方法来通过 OpenVPN 或 Windows 7 参数修改路由/arp 条目的默认生存期,或者在 OpenVPN 断开连接后刷新客户端上的表。
答案2
定义重新连接?您如何重新连接?
您在配置中使用persist-tun
,这意味着隧道设备在标准重新加载期间保持运行。由于接口永远不会关闭,因此与其关联的路由永远不会消失。
答案3
- 您可以设置 DHCP 服务器并使用它来推送路由: https://superuser.com/questions/874671/how-can-i-inform-mac-os-and-ios-clients-of-vpn-routes
- 在 VPN 服务器配置文件中删除
persist-tun
并将 IP 推送到客户端。
我在我关心的一家公司安装了这个,效果很好。这个解决方案的基本思想是,Windows 将在断开连接后取消配置 VPN 接口,并在成功连接后重新配置它。无需管理员权限,没有隐藏的议程,它就是工作。兼容性?除了 MacOS 之外的一切。