我从 Windows 10 计算机连接到同一子网中的 Windows Server 2012 R2 计算机。我还有一个通往办公室的 OpenVPN 连接,服务器也有自己的连接。
当我访问服务器上的文件时,有时连接会通过 VPN 而我却没有注意到。当然这不是我想要的,因为我在本地网络中有千兆位连接,而通过 VPN 连接速度要慢得多。
奇怪的是,我已将 hosts 文件中的服务器名称设置为指向本地 IP。更奇怪的是:即使我写入\\192.168.23.45\share
Explorer 地址行,连接实际上也会通过 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 网络的文件和打印机共享”的网络适配器选项:
有关使用 PowerShell 的信息,请参阅 使用脚本管理文件和打印机共享