Windows 即使使用 IP 地址访问共享也使用 VPN

Windows 即使使用 IP 地址访问共享也使用 VPN

我从 Windows 10 计算机连接到同一子网中的 Windows Server 2012 R2 计算机。我还有一个通往办公室的 OpenVPN 连接,服务器也有自己的连接。

当我访问服务器上的文件时,有时连接会通过 VPN 而我却没有注意到。当然这不是我想要的,因为我在本地网络中有千兆位连接,而通过 VPN 连接速度要慢得多。

奇怪的是,我已将 hosts 文件中的服务器名称设置为指向本地 IP。更奇怪的是:即使我写入\\192.168.23.45\shareExplorer 地址行,连接实际上也会通​​过 VPN(它应该在哪里\\10.12.34.56\share)!

使其正常工作的唯一方法是禁用 VPN,访问文件,然后启用 VPN。

有什么方法可以告诉 Windows 它应该绝不尝试使用该服务器的 VPN 地址,并总是使用本地网络地址?

例如,本地路由的度量为 276,而 VPN 连接的度量设置为 5120,以阻止它使用它。但 Windows 仍然决定忽略我给出的 IP,并使用通过 VPN 的 IP。

本地网络为 192.168.23.0/24,VPN 网络为 10.12.34.0/24,因此它们完全分开。VPN 上没有 IPv6,本地网络具有本地 IPv6 地址。

我还可以在传输文件或对文件共享进行任何操作时停止 OpenVPN。Windows 10 计算机将等待片刻,然后切换到非 VPN 连接并继续。如果我重新启动它,传输将切换到 VPN 连接。因此,Windows 会在内部选择要使用哪个 IP 来访问该服务器,而不仅仅是使用我提供的 IP。

服务器现在也已升级到 2016,但这并没有改变任何东西。问题出在 Windows 10 机器上。这在同一个子网、同一个域中、具有相同 OpenVPN 配置的另一台 Windows 10 机器上也不会发生。但那台机器通常有以太网和/或更好的 wifi 连接。

编辑:在某些时候,Windows 似乎将 OpenVPN 适配器视为 1Gbps 网络,并认为它比 wifi 更好,而 wifi 当然不是 1Gbps。那么,如果是这样的话,有没有办法说“忽略此功能”?或者说“VPN 实际上是一个糟糕的网络,只有在无法使用其他方式时才使用”?

编辑:这是路由表:

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0   192.168.23.254   192.168.23.220    266
       10.12.34.0    255.255.255.0     10.100.101.1    10.100.101.14   5120
     10.100.101.0    255.255.255.0         On-link     10.100.101.14    356
    10.100.101.14  255.255.255.255         On-link     10.100.101.14    356
   10.100.101.255  255.255.255.255         On-link     10.100.101.14    356
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
    VPN.SERVER.IP  255.255.255.255   192.168.23.254   192.168.23.220   5120
     192.168.23.0    255.255.255.0         On-link    192.168.23.220    266
   192.168.23.220  255.255.255.255         On-link    192.168.23.220    266
   192.168.23.255  255.255.255.255         On-link    192.168.23.220    266
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link    192.168.23.220    266
        224.0.0.0        240.0.0.0         On-link     10.100.101.14    356
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link    192.168.23.220    266
  255.255.255.255  255.255.255.255         On-link     10.100.101.14    356
===========================================================================

如上所述,如果 VPN 已打开,则访问将改为\\192.168.23.45\share连接到\\10.12.34.56\share。就像块中的任何其他机器一样,192.168.23.0/24如果它们也有10.12.34.0/24可用的地址。如果 VPN 已关闭,则一切正常。如果我在复制文件时将其关闭,它将切换到192.168.23.45透明。如果我将其重新打开,它将再次切换到10.12.34.56透明。路由在任何地方都很好,自然,任何只有10.12.34.0/24地址的服务器都可以正常访问,就像192.168.23.0/24块中的任何机器一样不是VPN 块中有地址就可以了。

服务器在内部 DNS 中设置了两个 IP,其他地方没有设置,因此如果 Windows 想要解析某个 IP,它要么什么都得不到,要么两个 IP 都得不到,所以这无法解释任何行为。

这是 Wireshark 转储信息的截图。如您所见,我已进入\\192.168...路径,但 Windows 仍要求10.100.101.21提供有关共享和文件的信息。因此毫无疑问,它实际上使用的是服务器的另一个 IP,而不是我手动写入地址栏的 IP。

在此处输入图片描述

正如我之前所写,wifi 适配器是 300Mbps,VPN 是 1Gbps,我记得有时 VPN 显示速度较低,但这种情况并没有发生。因此,可能是 Windows 认为 1Gbps VPN 比 wifi 更适合连接到服务器,即使它显然不是 1Gbps 连接。但我找不到有关此问题的任何信息,也找不到如何禁用它。

如果有帮助的话,TAP 适配器没有设置将其从 1Gbps 更改为更小的值。

arp -a

Interface: 192.168.23.220 --- 0x5
  Internet Address      Physical Address      Type
  192.168.23.45         d8-cb-8a-xx-xx-xx     dynamic
  192.168.23.254        c4-6e-1f-xx-xx-xx     dynamic
  192.168.23.255        ff-ff-ff-ff-ff-ff     static
  224.0.0.2             01-00-5e-00-00-02     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.251           01-00-5e-00-00-fb     static
  224.0.0.252           01-00-5e-00-00-fc     static
  239.255.255.250       01-00-5e-7f-ff-fa     static

Interface: 10.100.101.14 --- 0x7
  Internet Address      Physical Address      Type
  10.100.101.1          e2-e0-45-xx-xx-xx     dynamic
  10.100.101.21         00-ff-52-xx-xx-xx     dynamic
  10.100.101.255        ff-ff-ff-ff-ff-ff     static
  224.0.0.2             01-00-5e-00-00-02     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.251           01-00-5e-00-00-fb     static
  224.0.0.252           01-00-5e-00-00-fc     static
  239.255.255.250       01-00-5e-7f-ff-fa     static
  255.255.255.255       ff-ff-ff-ff-ff-ff     static

我还再次转储了当我开始复制文件时会发生什么无需VPN然后在中间打开 VPN。有关于domain.local(不是我连接的服务器,只是域)的 DNS 查询、WPAD 查询、SRV 记录查询、我的机器在网络上的 NBNS 注册、协商协议请求/响应、会话设置请求/响应,然后文件数据开始通过 VPN 流动,而不是直接连接,不会中断。

答案1

OpenVPN 应该在您的计算机上安装一个“虚拟”网络适配器,与其他物理适配器一起安装。

尝试更改这些网络适配器的优先级,如本文所示: https://blogs.technet.microsoft.com/networking/2015/08/14/adjusting-the-network-protocol-bindings-in-windows-10/

您希望 OpenVPN 接口的数字比物理适配器的数字更大(优先级更低)。

答案2

当问题以不同方式写出时的老答案

您可能会遇到 VPN 上的 DNS 等待,因为 Windows 10 发出 VPN 分割 DNS 的 DNS 请求的方式与以前的 Windows 版本有很大不同。

Windows 10 向所有适配器并行发出 DNS 查询,然后应该获取第一个到达的答案。

不幸的是,它可能不会采纳第一个答案,而是等待所有答案。如果这个并非新出现的错误尚未修复,为了尽可能地将行为恢复到以前的 Windows 版本,请进行以下注册表修改:

禁用智能名称解析(双字)

在注册表项中 HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
值为 1 表示禁用,0 表示启用智能解析。
关闭智能多宿主名称解析

指定多宿主 DNS 客户端应优化跨网络的名称解析。此设置通过在所有网络上发出并行 DNS 链接本地多播名称解析 (LLMNR) 和 NetBIOS over TCP/IP (NetBT) 查询来提高性能。如果收到多个肯定响应,则使用网络绑定顺序来确定要接受哪个响应。如果启用此策略设置,DNS 客户端将不会执行任何优化。将首先在所有网络上发出 DNS 查询。如果 DNS 查询失败,则将发出 LLMNR 查询,如果 LLMNR 查询失败,则发出 NetBT 查询。如果禁用此策略设置或未配置此策略,则在发出 DNS LLMNR 和 NetBT 查询时将优化设置名称解析。

禁用ParallelA和AAAA(双字)

在注册表项中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
值为 0 表示启用,值为 1 表示禁用 DNS A 和 AAAA 查询在所有配置的 DNS 服务器上并行执行,理论上最快响应将首先接受。

您还可以使用 PowerShell 设置这些策略:

Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters‌​" -Name DisableParallelAandAAAA -Value 1 -Type DWord

答案3

如果您使用OpenVPN客户端进行 VPN 连接,则可以为特定域/IP 添加自定义路由。

这样,一旦您添加了路由,到这些域/IP 的连接就会通过特定的路由。

OpenVPN 配置文件的路由语法是:

route [ip or website name] [subnet mask] [your gateway]

因此,就您而言,如果网关是 192.168.23.1,那么您需要将这一行添加到您的 OpenVPN 配置文件中:

route 192.168.23.45 255.255.255.0 192.168.23.1

答案4

您的计算机上有两个网络接口,以太网和 VPN,并且您正在使用 SMB 访问一个特定网络接口上的网络共享,但发现自己在另一个网络接口上使用同名的共享。使用托管共享的计算机的 IP 地址无济于事。

服务器消息块 (SMB) 是一个非常古老的协议,早在互联网和 IP 出现之前就已经存在。微软的文章 通过 TCP/IP 直接托管 SMB 有这样一句话:

NetbiosSmb 是一个全局设备,并且不受每个适配器的限制。这意味着,如果不完全禁用 Microsoft 网络的文件和打印机共享,则无法在 Windows 中禁用直接托管的 SMB。

我相信 VPN 上的某些计算机已将自己设置为网络的主浏览器,因此所有 SMB 请求都会转到 VPN,而不管路由表如何。VPN 主浏览器不会检查请求的 IP,而只会检查共享名称,并将您连接到命名的共享。

修改 VPN 适配器的属性可能会有所帮助的一些措施:

控制面板 > 网络和 Internet > 网络连接,输入 VPN 网络适配器的属性,然后尝试以下操作。完成后单击确定。

  • 禁用“Microsoft 网络的文件和打印机共享”。

  • 单击“Internet 协议版本 4 (TCP/IPv4)”,单击“属性”按钮,单击先进的按钮,定位到WINS选项卡并设置“禁用TCP/IP上的NetBIOS”。单击“确定”返回适配器的属性。

  • 禁用“Internet 协议版本 6 (TCP/IPv6)”。

如果上述任何措施解决了问题,您可以向 VPN 支持投诉,因为在创建 VPN 适配器时首先设置了它。


为了方便使用,可以从命令行禁用或启用网络适配器的“Microsoft 网络的文件和打印机共享”的网络适配器选项:

相关内容