我已经使用 OpenVPN 服务器一段时间了,遇到了一个相当有趣的问题。我需要重定向全部通过隧道的客户端流量除了对于需要在本地解析的几个 IP。我的做法是从服务器推送这些路由:
服务器‘PUSH’指令
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
我看到它转换成这些Windows路线:
Windows 路线发生
Wed Aug 31 15:14:35 2011 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,route 10.8.0.1,topology net30,ping 5,ping-restart 30,ifconfig 10.8.0.6 10.8.0.5'
Wed Aug 31 15:14:35 2011 ROUTE default_gateway=192.168.1.254
Wed Aug 31 15:14:40 2011 C:\WINDOWS\system32\route.exe ADD 199.[*.*.*] MASK 255.255.255.255 192.168.1.254
Wed Aug 31 15:14:40 2011 C:\WINDOWS\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 10.8.0.5
Wed Aug 31 15:14:40 2011 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 10.8.0.5
Wed Aug 31 15:14:40 2011 C:\WINDOWS\system32\route.exe ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.5
出于安全目的,我隐藏了以 199 开头的服务器 IP。
我收集到的信息
我假设 0.0.0.0 是“一切”的一种代码,所以我不确定如何让它工作,但一般的想法是,我需要一个特定的 IP 范围(172.16.*
)可以在本地网络(客户端)上解析,这意味着它确实不是通过VPN隧道,客户端可以172.16.*
本地连接。
这可能吗?可以通过命令行、服务器“推送”或客户端配置选项执行路由。任何确实,在仍然引导其他流量通过的同时,让这个工作正常进行的方法可行。
附加信息
我的服务器运行在 Debian 64 位上,客户端运行在 Windows 7 上(尽管 Vista 也需要运行)。
可以提供客户端/服务器配置如果需要的话。
答案1
似乎在做了一些研究之后,根据 grawity 的回答,更具体的路线将优先,在服务器的 PUSH 之后,我可以简单地做一个
--route [ip to bypass] 255.255.255.0 net_gateway
openvpn 手册页中“route”指令中定义的 net_gateway 将解析为预先存在的 ip 默认网关
答案2
只需添加另一条路线,它将优先于不太具体的路线:
172.16.*
172.16.0.0
使用网络掩码转换为255.255.0.0
:
路由添加 172.16.0.0 掩码 255.255.0.0 如果指数
在哪里指数是您的 LAN 网络接口的索引,如 所示route print
。例如,0x3
或类似。