Answers:
您必须为OpenVPN网络接口添加默认网关。
我发现的方法是通过使用OpenVPN的网络接口将路由添加到目标地址0.0.0.0。
在此示例中,我有一台计算机,其物理接口在网络10.20.20.0/24中具有IP地址10.20.20.20,在网络10.1.1.0/24中具有IP地址10.1.1.10/24的OpenVPN TAP接口(服务器的IP地址位于VPN网络是10.1.1.1)。
1)找出您的网络接口和有关当前路由到0.0.0.0的信息:
C:\>route print -4
===========================================================================
Interface List
15...00 ff 6c 3f 5b 0c ......TAP-Win32 Adapter V9
11...00 0e 0c d9 b5 c8 ......Intel(R) PRO/1000 GT Desktop Adapter
===========================================================================
IPv4 Route table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.20.20.1 10.20.20.20 10
10.20.20.0 255.255.255.0 On-link 10.20.20.20 266
...
现在,我们知道您的OpenVPN网络接口号为15。另一个重要信息是当前路由到0.0.0.0的度量。OpenVPN网络到0.0.0.0的新路由应具有比当前更高的度量值,以避免将整个网络流量重定向到您的OpenVPN连接而不是物理网络(在两条路由具有相同路由的情况下,将选择度量值较低的路由) 。
2)通过OpenVPN接口将路由添加到0.0.0.0:
route -p add 0.0.0.0 mask 0.0.0.0 10.1.1.1 metric 50 if 15
此命令通过接口15将路由添加到0.0.0.0,该接口的度量至少为50,网关为10.1.1.1。用您自己的网关(VPN网络上服务器的IP地址)替换网关。当然,用您自己的接口号代替。
-p参数将路由添加为永久路由,因此它将在系统重新引导后保留。
3)(重新)连接到VPN服务器并再次查看路由表:
C:\>route print -4
...
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.20.20.1 10.20.20.20 10
0.0.0.0 0.0.0.0 10.1.1.1 10.1.1.10 80
...
现在在“网络和共享中心”中识别了网络,因此应显示“设置位置...”窗口;-)
我不知道为什么上述解决方案如此复杂,例如使用
route add -p commands
甚至添加到OpenVPN server.conf文件中
route 0.0.0.0 vpn_subnet_mask default_gateway
该错误可以简单地通过以下方法解决:
Control Panel\Network and Internet\Network Connections
(1)右键单击OpenVPN tun / tap接口,然后选择状态>选择详细信息>记下IPv4 DHCP服务器条目。您需要将其填写为(2)中的默认网关。
(2)右键单击“ OpenVPN tun / tap”界面,然后选择“属性”>“打开TCP / IPv4属性”>“高级”。在默认网关下,单击添加,然后键入与DHCP服务器完全相同的条目,度量“自动”。现在,等待适配器神奇地显示为私有。
您刚刚完成的操作与上述两个解决方案完全相同-添加了持久路由-但这更好-由于在Windows中进行了配置,因此它在重启后仍然可以生存。实际上,您可以通过键入“ route print”来签入cmd,您会看到在路由表中添加了1个条目,以及在永久路由下添加了1个条目。如果新路由的度量标准小于物理适配器的度量标准,请重做(2)并将度量标准从“自动”更改为高于物理适配器的值。
如果您的网关(openvpn服务器IP)是静态的,则添加它(2)即可完成工作。
这对于某些VPN连接效果很好,但是可以说您的VPN的默认网关不断变化。这意味着,每次重置计算机时,都必须反复使用“ route add”命令。那是不可接受的。
在Windows 7中研究VMware的问题时,我遇到了一个名为* NdisDeviceType的注册表双字。这是什么,它告诉Windows不要尝试识别特定的虚拟网络适配器。所有您需要做的就是进入注册表并导航到HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318
。
到达该位置后,在键中查找名为DriverDesc
'Tap-win' 的字符串。这是处理OpenVPN使用的虚拟适配器的密钥。接下来,创建一个名为* NdisDeviceType的双字并将其值分配为1。
最后重新启动计算机。现在,您不应该看到一个身份不明的网络。尝试进行此修改之前,请记住要备份注册表。如果您使用的是OpenVPN,但您对此感到不舒服,则可以下载一个脚本来完成此操作。
我认为解决这个问题的最简单,最好的方法就是这样做:
route 0.0.0.0 0.0.0.0 vpn_gateway 50
不要更改vpn_gateway,这是一个环境变量)并保存。secpol.msc
“网络列表管理器策略”这样,您就不必关心您的VPN网关IP,并且可以与动态VPN网关一起使用。
此方法有效,但最好是通过手动更改TAP适配器的IP设置将其更进一步。使用ipconfig
找出正确的设置和使用网关DNS服务器。
更新:忽略此步骤-如果您这样做,您的IP地址将不会被屏蔽。我不知道为什么会这样,但是我已经做了我能想到的一切来扭转它,但是唯一的方法是撤消我在此步骤中所做的并重新启动计算机。
更新:我遇到的一个问题是,我将Windows 7配置为在启动Windows时启动连接。有时,当我重新启动或关闭计算机时,网络将恢复为未知状态。该路线仍将在表格中。一种解决方法是修改我连接到的VPN客户端的配置文件。我添加的命令是:
#Dummy default gateway to work around Windows 'unidentified network'/'unknown network' (put a "#" in front of this)
route-metric 30
route 0.0.0.0 0.0.0.0 10.0.0.1.
通过读取显示有以下内容的路由表来检索指标:
route print -4
VPN连接到的网关10.0.0.1。例如,当我连接到VPN时,我的路由表如下所示:
-------------------------------------------------------------------------
IPv4 Route Table
-------------------------------------------------------------------------
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.100 25
0.0.0.0 128.0.0.0 10.0.0.1 10.0.7.102 30
第一个条目是到我路由器的路由。第二个是VPN连接。现在,当我修改VPN连接文件(在我的情况下为vpn.ovpn)时,我使用网络目标并将网络掩码设置为0.0.0.0,并使用10.0.0.1作为网关。然后,我注意到该指标设置为30,并在配置文件中将其设置为30。
如果已经完成了默认网关的添加(通过命令或Windows GUI),则可能仍需要一种方法向Windows指示您要对网络应用“专用”或“域”的名称。也许您不小心将网络标记为“公共”,或者由于任何原因从来没有机会通过“设置位置...”提示进行选择。我在Windows 10上遇到了这种情况。
要通过注册表进行设置,请浏览至“网络配置文件”项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles
。从这里开始,Profiles
密钥包含带有GUID的密钥列表,该列表与计算机已保存的所有网络相对应。您可以浏览这些GUID键,并通过匹配ProfileName
键中的值来查找网络。在Profiles
密钥中找到正确的网络后,您想要更改Category
网络密钥的值。
值中的Category
值0
表示公共网络。您可以更改此值以1
将网络标记为“专用”或2
将网络指定为“域”网络。要应用此更改,您可能需要重新初始化网络连接。