虚拟网络连接

时间:2009-11-27 14:21:47

标签: networking network-programming network-protocols

我可以看到很多像openvpn和Teamviewer这样的程序用于他们的VPN连接在Windows上创建虚拟网络连接。我想为自己创建一个用于测试目的。

是否可以以编程方式创建一个?

2 个答案:

答案 0 :(得分:3)

听起来你正在寻找Tap-Win32驱动程序。这是Windows上的驱动程序OpenVPN用于创建您正在看到的虚拟接口,实际上是the OpenVPN package的一部分。该子系统也可用于许多* nixes。

此TAP驱动程序的接口在所有操作系统上大致相同。您打开一个特殊文件,并将原始以太网帧写入此文件。然后,驱动程序将这些帧插入虚拟接口。相反,在虚拟接口上传输的任何数据包都可以作为原始以太网帧从特殊文件中读取。

大多数实现也有TUN模式,它在第3层而不是第2层运行。因此,您将读取原始IP,IPv6等数据包而不是以太网帧。

我在Windows上没有这方面的经验,因此我将在此处快速浏览源代码。 OpenVPN在tun.c函数open_tun中完成了大部分这些步骤。您将找到此函数的多个定义,但它们对于不同的操作系统是#ifdef(因此搜索CreateFile)。这似乎在Windows上运行的基本方式是:

  1. 在启动任何运行TAP接口的应用程序之前,预先创建一个或多个虚拟接口(由安装程序?)。这些接口开始断开连接。
  2. 您的应用程序启动并对“\\。\ Global \ GUID.tap”执行特殊的CreateFile调用。其中GUID由描述特定虚拟接口的GUID替换。虚拟接口可以在注册表项中迭代,该注册表项在OpenVPN源代码的“tap-win32 \ common.h”中定义为ADAPTER_KEY。
  3. 您的应用程序可能会执行一些DeviceIoControl调用。 OpenVPN多次使用它来获取驱动程序版本,获取MTU,设置TUN模式以及其他错误信息。
  4. 此时,界面可能在Windows中显示为已连接,您甚至可能正在阅读您已从Windows本身接收的DHCP请求。 OpenVPN经历了大量的喧嚣,使用Windows网络API的其他部分配置接口,但这不是特定于TAP驱动程序。
  5. 因此虽然API实际上只是一个特殊的文件,因此非常简单,实际管理界面有很多。但如果你只是在进行测试,这可能就足够了。然后,您可以在Windows中手动配置测试界面。

答案 1 :(得分:0)

MSDN Ras Dial function

这可能是朝着正确方向迈出的一步?

从页面:

  

远程访问服务(RAS)除了使用点对点协议(PPP)的传统远程访问连接外,还支持虚拟专用网络(VPN)连接。在VPN连接中,VPN数据包封装在IP数据包中,并通过IP网络(如Internet)发送。因此,为了建立VPN连接,需要访问IP网络。如果客户端计算机具有到IP网络的始终连接,例如与IP LAN的连接,则客户端可以使用对RasDial功能的单个调用来建立VPN连接。