我使用内置的 Windows 7 VPN 功能和内置的 Windows 8 路由和远程访问 (RRAS) VPN 功能建立了到我的 Web 服务器的 VPN 隧道,以其 FQDN 为目标:(例如 my.server.com)。
如何确保所有以 FQDN“my.server.com”为目标的流量都通过 VPN 隧道路由?具体来说,如果我\\my.server.com\sharedfolder
在 Explorer 地址栏中输入或将 Explorer 中的共享驱动器映射到这样的路径,我希望流量通过与 my.server.com 关联的 VPN。
基本上,我希望 Windows 足够智能,当 VPN 连接到“my.server.com”时,通过加密 VPN 将流量路由到“my.server.com”,而当 VPN 未连接时,则正常路由流量。这个要求过分吗?
在我看来,一旦连接,VPN 就会获得一个本地 IP 地址,如 192.168.1.101(我在用户帐户属性的拨入选项卡中在服务器上静态分配了该地址),并且以该地址为目标确实会通过 VPN 路由流量。看来以“my.server.com”为目标的流量永远不会通过 VPN 路由,并且与 VPN 的 IP 地址分开处理,我必须使用该 VPN IP 地址通过 VPN 路由。这样做的唯一好处是可以配置防火墙,以便文件共享流量只能来自该 IP 地址。
该设置存在两个问题:
- 以“my.server.com”为目标的流量不会自动通过 VPN 路由,这既不安全又容易让人困惑,因为 VPN 处于活动状态。这很不直观。
- Windows 资源管理器在使用本地子网地址时往往会让驱动器连接超时,
\\192.168.1.101\sharedfolder
当我再次尝试访问驱动器时,资源管理器会冻结整整 30 秒。这真的很烦人,当使用 FQDN 映射驱动器时不会出现此问题\\my.server.com\sharedfolder
,但此时它不会通过 VPN 进行路由!
我怎么解决这个问题?
更新:当我连接 2 个 VPN 时,我还注意到以下情况,一个具有静态 IP 192.168.1.101,另一个具有 192.168.1.102。建立两个 VPN 并将其设置为不使用 VPN 上的默认网关,并且两个 VPN 在其连接状态中都显示这两个独立的 IP 地址,Explorer 会感到困惑,无法连接到第二个 VPN,然后如果我打开一个新窗口并尝试转到第二个地址,它似乎将其等同于第一个地址,从那时起,两个地址(101 和 102)都通过第一个 VPN 访问一台服务器上的同一个文件夹。这毫无意义。
答案1
我自己解决了这个问题。
为了基于 FQDN 进行路由,可能需要在客户端上运行 DNS 服务器,以便能够检测 VPN 在该 FQDN 的 WAN 地址上何时处于活动状态。当它检测到活动的 VPN 连接时,它可以将 FQDN 解析为 VPN 隧道地址,以便应用程序(Web 浏览器等)将接收 VPN 隧道地址而不是服务器的 WAN 地址。由于这会给显示哪些 IP 地址有效的 SSL 证书带来问题,因此确实需要一个能够自动透明地通过 VPN 隧道传输来自应用程序的数据的 VPN 感知网络驱动程序。这是可以做到的,但我不知道是否存在这样的智能网络驱动程序。根据对错误答案的这个回复,您基于 FQDN 的 CAN 路由正如我所料,采用适当的配置:
至于在 Windows 7 客户端中将重复的服务器 IPv4 地址分配给不同 VPN 服务器的问题,这似乎是设计使然。在 Windows Server 2008/2012 路由和远程访问服务 (RRAS) 中,服务器使用 IPv4 路由器,可以将其配置为使用静态地址池,如下所示。此静态池将确定客户端上的服务器 IPv4 地址。在这里,我将第二台服务器设置为使用 192.168.2.0/24 作为其子网,因此它将在 Windows 7 客户端上接收服务器 IP 192.168.2.1。
在计算机管理下的用户属性的“拨入”选项卡中,每个 VPN 服务器上的用户帐户都分配了一个静态 IP 地址。这将成为 VPN 上的客户端 IPv4 地址。
最后,为了确保文件共享流量必须仅来自服务器的 VPN 子网,防火墙中适当的协议/端口可以将其远程 IP 限制在指定的子网内:
现在,在客户端上,我可以通过此 VPN 连接到 Internet 上的文件共享,这完全不需要第三方软件。我只需将网络驱动器映射到每个服务器的 VPN 地址(例如\\192.168.1.1\sharedfolder
和\\192.168.2.1\sharedfolder\
)。
不幸的是,我们不能使用 FQDN,\\my.server.com\sharedfolder\
因为 Windows 不够智能,无法意识到连接到该 IP 地址的 VPN 意味着所有端口上到该地址的所有流量。除了加密的 VPN 数据包本身应该通过 VPN IP 进行路由。无法使用 FQDN 作为文件共享路径的一个副作用是,Windows 可能无法保持连接活动,并会假设它可以作为本地地址快速重新建立,而实际上它会在一分钟后空闲,然后需要 30 秒才能重新建立与共享文件夹的连接。 可以通过在注册表中设置更高的空闲超时来解决此问题。网络共享的默认空闲超时默认为 600 秒(10 分钟)。为了使连接保持更长时间,请将名为“KeepConn”的 DWORD 注册表值添加到注册表项“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters”,并为其指定一个更高的值(以秒为单位),例如 3600,即一小时。根据链接:
如果您的应用程序在服务器上关闭和打开通用命名约定 (UNC) 文件的频率低于每 10 分钟一次,请增加此项的值。这可减少重新连接到服务器的次数。
更新:我忘了说,虽然使用纯内置的 Windows 7 和 Windows Server 2012 功能通过 VPN 进行文件共享,但对于 Windows Server 2008,由于某些错误/功能,SMB 端口上的流量似乎在默认网络适配器上被阻止,而不受防火墙的影响,因此需要额外执行一个步骤。您必须安装 Microsoft 环回适配器,除了允许 SMB 流量外,它将与默认接口具有相同的功能,因此一旦安装完成,它应该看起来像这样。然后,您连接到 192.168.1.2(即环回适配器地址),而不是连接到 192.168.1.1(服务器的 VPN 地址)上的共享:
关于如何安装环回适配器的说明可以在这里找到:http://blogs.msdn.com/b/virtual_pc_guy/archive/2005/10/04/477195.aspx