看到过几个试图解决这个问题的问题,但没有一个能起到很大帮助。我希望得到一些能够帮助其他人解决这个问题的明确答案,因为这个问题经常出现,但似乎很少能得到有效的回答。
redirect-gateway
对我来说总体来说效果不错,但有一个问题是它包含本地 IP 范围。我理解 OpenVPN 需要这样做是因为它需要覆盖自己的私有 IP 空间,而私有 IP 空间可以是任何内容,因为用户可随意指定。
但是,如果人们能够轻松获得与减去一两个范围相同的效果(redirect-gateway
根据他们所在的本地网络而定),以便他们仍然可以访问本地 LAN 资源(在物理 LAN 上,而不是 OpenVPN“LAN”),那就太好了。例如,我想在工作时从隧道中排除 10.0.0.0,但所有其他 IP 范围仍将通过隧道发送。
最简单的方法应该方法是离开重定向网关,然后添加本地路由,指示 10.0.0.0 通过本地接口和网关,但 Windows 似乎不尊重度量设置,即使关闭自动度量并手动调整度量,以便 OpenVPN 始终高于本地路由。所有流量继续通过 VPN 隧道路由。
替代方案似乎是完全本地路由引导或教导 OpenVPN 服务器端列出路由,例如 0.0.0.0-9.0.0.0、11.0.0.0-128.0.0.0、128.0.0.0-172.17.16.0(我的 OpenVPN 子网是 172.17.17.x)、172.17.18.0-254.0.0.0。这似乎非常麻烦,尤其是考虑到必须尝试获取正确的相应子网掩码。
任何关于如何简单、一致地配置 OpenVPN 的建议,最好是在客户端,以便从隧道中排除一些可能位于连接客户端本地的特殊子网,这些子网实际上都可以工作(Windows 路由指标不起作用),我们将不胜感激。
目前,我已经恢复使用 SSH 提供的 SOCKS 代理,以便可以继续访问网络本地资源,但我更喜欢使用 VPN 来路由除少数特别提到的地址范围之外的所有地址范围。
答案1
正如 @dotvotdot 的评论中提到的,您的计算机所在的 LAN 不会通过 VPN 隧道进行路由。这是正常现象。如果您想访问“本地子网”,即我猜不是您的 LAN 且无法通过隧道本身访问的网络,您可能需要使用net_gateway
代表本地网关的关键字。这样,路由将由您的本地路由器而不是 VPN 服务器进行。
请参见下面的示例,其中网络流量10.59.0.0/16
不应通过 VPN 隧道。
push "redirect-gateway def1 bypass-dhcp"
push "route 10.59.0.0 255.255.0.0 net_gateway"