我的情况与问题相同IPSec VPN:流量路由不正确(但是我似乎无法直接联系该用户,也无法对该问题发表评论 - 而且没有人回答过)。
我也有一台 Windows 2008 R2 服务器,并在服务器上直接有一个 IPSec VPN。
该服务器有一个网络接口,它有一个公共 IP 地址(例如,我们称之为 203.10.10.10)。
我希望远程专用网络 (10.16.0.0/255.254.0.0) 上的计算机能够连接到位于 IPSec 隧道末端的专用 IP 地址上的 Windows 服务器,该隧道以在该服务器(不在服务器前面的路由器上)。
同样重要的是(这可能是症结所在),我需要服务器能够启动与远程(10.16.0.0)网络上的设备之间的 TCP 连接(例如通过 HTTP 下载图像)。
它看起来是这样的:
我为服务器选择的私有 IP 是 192.168.70.1/255.255.255.0,建立到远程私有网络隧道的 IPSec 过滤器适用于源/目的地 192.168.70.0/24 和 10.16.0.0/15。
如果我从 Windows 服务器 ping 远程网络上的地址,并设置源参数,那么我就可以建立隧道,并且 ping 将会起作用(即ping -S 192.168.70.1 10.16.0.1
)。
但是,任何发送到 10.16.xx 地址的“正常”流量(包括没有将源地址强制为 192.168.70.1 的 ping)都会通过默认路由顺利发送到 Internet,并且不会启动或进入隧道。
问题
这样的设置是否可行?或者,是否不可能让 VPN 端点本身从其私有地址之一向隧道发送数据?(VPN 端点是否始终需要与通过隧道发送数据的设备位于不同的路由器上?)
如何设置 Windows Server 以确保与 10.16.0.0 网络的所有通信都源自其私有 IP 地址。
私人地址不有为 192.168.70.1 - 如果需要,可以选择另一个子网(我这样说是因为我读过,在其他所有条件相同的情况下,Windows Vista 及更高版本将使用与目的地最接近的原始 IP - 所以也许使用 10.XXX ip 作为服务器的私有地址会有所帮助?)
但是我无法轻松地进行测试,因为此 VPN 隧道的另一端不在我的控制范围内 - 如果我选择更改 192.168.70.1 地址,则需要让另一端的网络工程师进行配置更改。
额外信息:我迄今为止尝试过的方法
我尝试了两种方法来设置私有 IP 地址(在 Windows 服务器上),以尝试让数据包正确路由和满足建立隧道的 IPSec 规则。
主界面上的私有地址
在将 192.168.70.1 地址添加到主网络接口(除了公共 IP)后,似乎无法定义任何到 10.16.0.0 的路由,从而导致 Windows 使用 192.168.70.1 作为源地址。发往默认网关的任何流量最终都将以公共 IP 作为源。
如果 Windows 上有一些我不知道的路由魔法,我很乐意听听!但是,命令:
route add 10.16.0.0 mask 255.254.0.0 192.168.70.1
将导致添加如下路由(它选择同一接口上的公共 IP 作为源/链接网关使用)。
10.16.0.0 255.254.0.0 On-link 203.10.10.10 11 10.17.255.255 255.255.255.255 On-link 203.10.10.10 266
第二个虚拟适配器上的私有地址
我尝试向服务器添加虚拟网络适配器 - 首先使用 Microsoft Loopback Adapter 设备。Loopback 设备在网络连接列表中显示为“媒体已断开连接”。看到虚拟 NIC 没有连接,Windows 便会恢复通过默认路由发送流量(使用公共源地址)。
然后,我尝试使用另一个虚拟设备驱动程序 - OpenVPN 附带的 TAP 虚拟适配器驱动程序。该驱动程序允许您强制将其置于“始终连接”状态。但是,似乎在第一次 ping 之后,Windows 再次发现该适配器上没有连接,并返回通过主(公共)接口上的默认网关发送流量。
就是这样...有什么想法吗?
答案1
当你尝试这样做时,你在某种程度上是在与源 IP 地址选择的自然趋势作斗争。那么为什么不稍微改变一下你的设计,让它更自然地流动呢?
问题在于,源 IP 地址的选择是在决定将流量推送到隧道之前完成的。这意味着它将选择使用“公共”IP 地址作为通过隧道发出的任何流量的源 IP。
在某些操作系统上,你可以使用路由做一些有趣的事情,在路由上为主机发起的流量指定源地址。但我在 Windows 上找不到类似的东西。
但是,考虑到您的网络设计,我认为解决此问题的最简单方法是停止在服务器端与 RFC1918 地址的斗争,而是继续在您的公共 IP 203.10.10.10 和私有 IP 地址 10.16.0.0/15 之间建立带有 SA 的隧道。
然后,客户端会将服务器的地址设为 203.10.10.10,而不是 192.168.70.1,其他一切都有望奇迹般地顺利完成。这样,源 IP 选择就会选择一个合适的地址。
您可以在过渡期间保留旧的 ipsec 策略,这样您的客户端可以使用旧的 RFC1918 地址或新的公共地址来寻址服务器,同时您的 DNS 缓存会过期(假设您为此使用 DNS - 如果不是,这是一个好主意)。过渡期过后,地址 192.168.70.1 不再起作用。
另一种选择是在从您的服务器启动连接时明确选择源 IP 地址 - 如果您自己编写了定制软件,这可能是可行的,但这有点棘手。
最后,那个环回适配器想法很有前途,但它显示为“媒体断开连接”有点奇怪。不过,这听起来像是环回适配器本身的问题,而不是这个想法的问题。