通过网络隔离克隆虚拟机

虚拟实验室管理是一个合并的区域在软件开发生存周期内。 Visual Studio 实验室管理是为开发人员和测试人员将虚拟实验室管理在 Visual Studio 的一个产品。 使用 Visual Studio 实验室管理工具,开发团队可以利用它们的开发虚拟化技术和测试实验室利用虚拟机的复杂多层环境。 它们可以然后将应用程序部署生成,并在运行这些环境测试。

其中一个涵盖用于虚拟化开发和测试实验室是可以创建相同的副本,或者 克隆,部署的虚拟机通过复制几个文件。 克隆在许多情况下很有用。 例如,需要测试人员环境的副本重现问题的开发人员创建该环境的克隆。 在测试团队,每个单独测试人员可以克隆环境的副本供协调这些测试工作量与团队的其他成员。 克隆节省两个开发人员的时间和测试人员,因为他们创建的每个环境不进行重复必须安装操作系统和其他软件。

要求

  • Visual Studio 旗舰版, Visual Studio 高级专业版, Visual Studio 专业测试工具版

即使克隆虚拟环境是容易,必须考虑克隆的结果。 计算机在一个克隆环境中的计算机名称和设备与在原始环境。 有时,他们甚至可以具有相同的 IP 地址和 MAC 地址。 这可能导致丢失网络连接的某个克隆或用于达到另一个克隆目标的网络通信。 最后,一个意外的结果可能是您将应用程序部署到特定克隆,并进行在另一个克隆测试。

备注

您只能与 SCVMM 环境的网络隔离。此功能与标准环境不可用。

Visual Studio 实验室管理解决这些问题并通过调用 网络隔离的技术实现虚拟环境安全的复本。 本主题讨论网络隔离的工作原理并比较克隆使用和不使用网络隔离。 第一个示例描述可以在克隆之间没有网络隔离时的各种形式冲突。 使用 Visual Studio lab management,后面的示例检查多个解决方案可以防止冲突。

网络冲突

图 1 显示使用 lab management,可以创建一个典型的虚拟环境。 此环境,调用原始环境,有两个虚拟机:web 服务器和 DB 服务器。 这些设备 web 服务和数据库服务器的效果与在 3 层 Web 应用程序。 在此示例中,我们假定,开发团队成员创建该环境并部署了自己的 Web 应用程序最新生成给它。 我们还假定,调用最新生成的快照此环境的拍摄,在部署生成之后。 快照是环境的时间点状态。 可以还原到和在 + 任何 + 时间还原从此的执行已保存的状态。 该图在原始环境将显示两台虚拟机的计算机名称、IP 地址和 MAC 地址。

原始环境

原始主机中的 VM“web-server”和“db-server”。

除了原始外,运行 2 显示一个克隆环境。 在克隆,那么,当两个环境启动后,网络冲突的以下类型可能发生:

  1. 计算机名称冲突

  2. IP 地址冲突

  3. MAC 地址冲突

在一个公共网络的初始版本和克隆环境

包含名称冲突的克隆 VM 的两台主机

每个的精确的结果冲突取决于多种因素:虚拟机中的操作系统,网络连接基础结构在实验室中,等等。 在表 2,我们假定,静态 IP 地址和静态 MAC 地址在原始环境中的每台虚拟机配置为。 因此,那么,当该环境的副本时,要克隆的虚拟机具有相同的 IP 和 MAC 地址。

Hh329474.collapse_all(zh-cn,VS.110).gif计算机名称冲突

计算机名称是用户分配的友好名称标识网络上的计算机。 两个协议通常用于解决计算机名称为其 IP 地址:NetBios 和域名 (DNS) 服务器。 当具有相同的计算机名称中的两台计算机都在同一网络段时,检测 NetBios 名称冲突并向用户发出警告。 通常,只有 + 当计算机位于同一网络段,NetBios 可以检测冲突。 如果设备不在同一网络段,或者警告,将忽略冲突的下一个级别 DNS 发生。 DNS 是设备的中央存储库注册其名称。 当具有相同的计算机名称尝试注册在 DNS 两台计算机,第二台计算机上可能重写第一台计算机上创建的项。 在这种情况下,启动的第一个设备不可访问通过名称解析。

具有单个避免或修复计算机名称冲突。 而不是创建环境的相同副本,您可以自定义每个克隆,在创建时使用名为 sysprep 的结构。 Sysprep 是 windows 操作系统的一部分。 当您使用 sysprep 克隆环境时,该环境中的每台虚拟机获取不同于在原始环境中的唯一的计算机名称、IP 地址和计算机地址。 但是,克隆不再是相同的。

影响的具有唯一的计算机名称在每个克隆,而不管是通过 sysprep 或通过用户干预的手动避免冲突,取决于虚拟机中安装的软件。 若要了解这一点,请查看该示例。 当应用程序在环境中部署了,web.config 文件在 web 服务器上创建。 为连接字符串的一部分,在此文件中,我们配置了该计算机的名称 db-server。 该文件代码段演示此处:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="ConnectionString" 
      value="Persist Security Info=True;User ID=dbuser;  
        Password=password;Initial Catalog=Store;Data Source=db-server"/>
  </appSettings>
</configuration>

当我们在该克隆的环境中更改数据库服务器的计算机名称,必须为手动更改 web.config 文件使用新名称 (db-server2 是新计算机名称为虚拟机在该克隆环境中)。

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="ConnectionString" 
      value="Persist Security Info=True;User ID=dbuser;  
        Password=password;Initial Catalog=Store;Data Source=db-server2"/>
  </appSettings>
</configuration>

此外,在中,当更改时,SQL Server 需要其他步骤其计算机名称。 SQL 脚本代码段完成此操作的此处说明:

sp_dropserver db-server
sp_addserver db-server2, local
GO

前面的示例演示如何必须重新配置应用程序,如果更改计算机名称。 可理解的是,此过程取决于应用程序。 如果需要以类似方式更改应用程序编写计算机名称添加到项中的数据库中,这些项。 有时,那么,当该计算机的名称更改时,您可能必须重新安装应用程序。 运行此类重新配置和重新安装清楚地什么我们需要首先避免使用克隆。 这使可以安全地允许多个克隆共存,而无需计算机名称冲突的更可靠的应用程序的独立解决方案。

Hh329474.collapse_all(zh-cn,VS.110).gifIP 地址冲突

internet 协议 (IP) 地址用于计算机上相互连接位于 TCP 网络。 IP 地址被在网络中的 DHCP 服务器静态或动态分配其中之一。 计算机上的每个连接的网络接口具有 IP 地址。 如果配置了静态 IP 地址的虚拟机在网络克隆然后将和原始虚拟机同名,除了计算机名称冲突之外,则具有 IP 地址冲突。 您可以通过更改 IP 地址手动修复此冲突一个克隆。 同样,更改 IP 地址的影响取决于在虚拟机上安装的应用程序使用静态 IP 地址。

当您启动克隆配置了动态 IP 地址的虚拟机时,一段时间中具有网络冲突。 在第一个虚拟机的副本后,连接的另一台虚拟机到网络检测此冲突并通过更新其 IP 地址更正它。 冲突的类似短期限存在,则在克隆环境还原到原始环境拍摄的快照时间。 冲突的这些过程通常不足够长影响应用程序。

Hh329474.collapse_all(zh-cn,VS.110).gifMAC 地址冲突

媒体存取控制 (MAC) 地址是分配给计算机上的每个网络接口的地址。 在物理计算机,它分配给每个网络接口由卡片的生成商。 在虚拟机,有两种方式分配 MAC 地址:静态或动态 MAC。 可以指定特定计算机地址为虚拟机的网络接口使用。 这称为静态 MAC。 或者,您可以使用虚拟机动态分配计算机地址。 这称为动态 MAC。 在虚拟机启动时,动态 MAC 地址被 hyper-v 分配从 MAC 地址池。 每个主机来生成一个模式 MAC 地址,使它们不冲突与另一个宿主的虚拟机。

如果静态 MAC 地址用于虚拟机在原始环境,则虚拟机在该克隆环境中都具有相同的 MAC 地址。 将立即导致 MAC 冲突。 因为它们不是由计算机,始终报告重复 MAC 地址更难检测。 即使报告,此消息是登录的 windows 事件查看器。 对于最终用户来说,有两种可能的结果复制 MAC 地址。 一个结果是网络连接丢失一个或两个克隆的。 另一个结果是一个设备解决的网络数据包可以访问另一台计算机。 当基元设备及其克隆具有相同的 MAC 地址时,其 IP 地址也是相同的。 即使、用于获取动态 IP 地址,DHCP 服务器将它们与它们的 MAC 地址相同的 IP 地址。

使用动态 MAC 地址,为某种程度,可以避免 MAC 冲突。 但是,那么,当该克隆的环境还原到原始环境拍摄的快照时,这些虚拟机整个状态回滚包括 MAC 地址。 这同样会导致 MAC 冲突,并前面所述的相同的问题存在,直到克隆的虚拟机重新启动。 重新启动该克隆环境创建虚拟机从其自身的大小、发布值更的 MAC 地址。

冲突的窗体检测和解析我们描述,然后手动修复 OS/application 继续在解析后工作,对于虚拟实验室管理的常见用户很长,耗时并且容易出错。 在大多数情况下,更改这些参数中的任何一个更改足够虚拟环境生成的 bug 重新生成或类似的问题的生产环境。 安装应用程序的原则一次到该环境虚拟环境和无忧克隆创建多个相同副本比普通用户可以应执行需要一个复杂的方法。

网络隔离

到目前为止两个要求标识的。 第一个要求是虚拟机在一个克隆环境中必须具有计算机名称、IP 地址和 MAC 地址与在原始环境中。 但,同时,这些克隆必须分别是可寻址的从该环境以外。 这在特定克隆是必需的,例如,以便用户可以连接到每个从其桌面的克隆,为应用程序添加到部署,或者对于特定克隆将运行的测试。 这将导致第二个要求,是虚拟机在一个克隆环境中还必须具有与不同于原始环境中的单个计算机名称、IP 地址和 MAC 地址。 逻辑方式完成这两个要求是为了使每台虚拟机上两个接口:该计算机名称、IP 地址和计算机地址相同在每个克隆方面的专用接口;这些值是唯一的。每个克隆的公共接口。

若要防止私有接口的网络冲突,必须将连接到在每个克隆的一个专用网络。 一个专用网络是绑定到环境中的虚拟机创建虚拟网络。 由于此网络不在环境的边界之外公开,没有冲突的可能性,即使相同的计算机名称、IP 地址和 MAC 地址使用其他克隆。 为该环境以外的可访问性,所有公共接口必须连接到公共公共网络。 公共网络或实验室网络环境是虚拟机可能与客户端和其他计算机环境中的实验室的网络。

图 3 显示私有和公共接口地址网络如何冲突。

包含使用专用和公用端口的 VM 的两台主机

Hh329474.collapse_all(zh-cn,VS.110).gif在 Visual Studio lab management 的网络隔离

Visual Studio lab management 通过引入在每个虚拟机的两个网络接口实现 SCVMM 环境的网络隔离。 这些网络接口之一是私有接口连接到一个专用网络,同时,其他非公共接口连接到公共网络。

lab management 软件,并且每个虚拟机安装了代理一起,确保原始环境和克隆环境可以同时,在不发生冲突。

Hh329474.collapse_all(zh-cn,VS.110).gif在专用网络的私有接口

下面描述是摘要计算机名称、IP 地址和 MAC 地址如何分配给环境的私有接口。

在私有网络的计算机名称: 计算机名称通过 NetBios 解析,并且不通过 lab management 软件要求任何其他处理。 配置与 NetBios 计算机名一起使用的应用程序在每个克隆将按预期方式工作。 使用其名称,在本示例中,web 服务器计算机引用 DB 服务器计算机。 这些名称相同在原始和克隆的环境中相同。 因此,web.config 文件中进行克隆环境中不必将更改。

由于没有在私有网络上的 DNS 服务器,我们需要解决这种情况,当它在完全限定域名 (FQDNs) 相互引用而不是 NetBios 名称时。 该名称的例如,因此,如果 web.config 文件引用 DB 服务器作为 db-server.lab.contoso.com,然后解析 IP 地址的不是可能的不在私有网络上的 DNS。 若要解决此问题,在虚拟机上运行实验室代理添加对应于同一环境其他虚拟机在宿主文件中的项。 宿主文件是另一种指示在操作系统名称必须将其解析为特定 IP 地址。 在本示例中,在 web 服务器主机的文件将具有以下项:

192.168.23.2 db-server.lab.contoso.com

从 192.168.23.1 的IP 地址: 的静态 IP 地址- 255 范围分配给每个虚拟机专用网络接口。 例如,web 服务器的私有接口获取 192.168.23.1,并且 DB 服务器的私有接口获取 192.168.23.2。 lab management 确保 web 服务器和 DB 服务器获取在每个克隆相同的静态 IP 地址。 因此,因此,即使在 web 服务器的 web.config 文件中进行配置以 DB 服务器的 IP 地址,在该克隆环境中不必重新配置。 在配置了网络隔离的任何环境中,从这个范围的私有接口获取 IP 地址,从 192.168.23.1 启动。 此范围需要的地址的最大数量相同。虚拟机的最大数量环境中。 由于这组 IP 地址从该私有网络外部不是 routable,使用预定义的范围是安全的,只要同一范围在公共网络不使用。

MAC 地址: 的任意静态 MAC 地址在网络隔离环境中分配给每个虚拟机专用网络接口。 在本示例中,为原始 web 服务器的私有接口 MAC 地址例如 00-15-5D-07-57-01。 lab management 确保此 web 服务器在该克隆环境中获取相同的计算机地址。 由于这组 MAC 地址从该私有网络外部不是 routable,使用一个随机的地址是安全的,只要它们不在什么范围内虚拟机承载使用。

Hh329474.collapse_all(zh-cn,VS.110).gif在公共网络的公共接口

下面描述是摘要计算机名称、IP 地址和 MAC 地址如何分配给环境的公共接口。

因为这样做将导致计算机名称冲突,计算机名称: 我们不希望 NetBios 解决在公共网络的计算机名称。 若要防止出现这种情况,lab management 禁用 NetBios 在每个虚拟机公共接口广播。 类似于 NetBios,我们不希望虚拟机注册它们在 DNS 的 NetBios 计算机名称。 lab management 禁用 DNS 注册的每个公共接口。 在没有 NetBios 和默认值 DNS 注册过程中,我们仍希望虚拟机在公共网络可以使用的唯一名称。 为“A”请记录在 DNS lab management 键入每台虚拟机生成唯一别名和注册。 在本示例中,web 服务器位于原始环境中注册为使用类似于 VSLM-195ea870-34d87df83883add23-47ab86ff.lab.contoso.com 的唯一别名。 同一 web 服务器位于该克隆环境中注册为使用可能类似于 VSLM-87ead667a-8787adde877919aaa-2001874d0.lab.contoso.com 的一个不同的名称。

在每个虚拟机的公共网络网络接口配置IP 地址: 获取从 DHCP 服务器的动态 IP 地址。 这样可确保位于原始上的虚拟机和克隆环境具有唯一 IP 地址。 例如,web 服务器位于原始环境中获取 172.52.20.140 IP 地址,然后同一 web 服务器在克隆环境中获取 172.52.20.205 IP 地址。

可以配置 MAC 防止冲突的MAC 地址:,在每个虚拟机的公共网络网络接口从虚拟机的动态 MAC 地址。 这样可确保在本示例中的 web 服务器计算机获取位于原始上和克隆环境的不同的计算机地址。 但是,如前所述,那么,当一个克隆的克隆的虚拟机的环境还原到原始环境中时拍摄的快照,MAC 地址和 IP 假定值和原始相同的。 例如,那么,当该克隆的环境还原为最新生成快照时,web 服务器的 IP 地址成为 10.86.51.61 (请参见图 3),是值与在原始环境中。 同样发生与计算机地址。 当 IP 地址冲突是瞬态的时,直到由、更新,MAC 存在冲突,直到虚拟机重新启动。 由于此限制,使用从虚拟机的动态分配的 MAC 地址公共接口的不是一个可行解决方案。

若要解决此问题,lab management 使用 MAC 地址自己的池。 从此池的唯一 MAC 地址分配给虚拟机公共接口。 只要该克隆的环境还原为快照,lab management 自动更改 MAC 地址可以防止冲突。 若要了解其工作原理,请考虑 web 服务器计算机地址在原始环境中是 1D-D8-B7-1C-00-05,并且 web 服务器计算机地址在克隆环境中是 1D-D8-B7-1C-00-07。 当该克隆的环境还原到原始环境中时拍摄的快照,web 服务器计算机地址一瞬间成为 1D-D8-B7-1C-00-05。 lab management 更改为回防止网络冲突的 1D-D8-B7-1C-00-07。

Hh329474.collapse_all(zh-cn,VS.110).gif使用网络隔离的典型交互

接着,我们讨论发生的情况,在该环境中的两个虚拟机相互通信:

  1. Web 服务器使用 NetBios 或承载文件以解决该计算机名称“db-server”到 IP 地址 entity_CODEdb-server 的私有接口 (192.168.23.2)。

  2. Web 服务器与 db-server 通信此 IP 地址。

当在环境外部的某个客户端"在一个克隆的环境中必须与 web 服务器通信,以下过程如下:

  1. 客户端"在克隆环境中查询实验室管理软件获取 web 服务器唯一的别名。

  2. lab management 软件响应与个别名。

  3. DNS 服务器解决个别名到 IP 地址 web 服务器的公共接口 (10.86.51.63)。

  4. 客户端与 web 服务器进行此 IP 地址。

Hh329474.collapse_all(zh-cn,VS.110).gif网络隔离的替代方法

使用两个接口不是网络隔离的唯一方法。 一个非常相似的方法是使用一双向 NAT。 NAT 是创建的需要在公共网络的计算机通信计算机上的一个专用网络一个常见方法。 即使在典型的 NAT 的通信必须总是源自该私有网络,双向 NAT (或双向 NAT) 将进度并允许这些启动的已在私有网络中的计算机或通信公共网络。

使用此方法,需要知道到网络隔离,一双向 NAT 服务器在该环境中的表示形式。 这是通过添加特定虚拟机通常完成到执行一双向 NAT 服务器角色的环境。 在创建网络隔离环境时,虚拟机的公共和私有 IP 地址分配,与在两个接口过程类似的方式。 但是,而不是为公共 IP 地址到虚拟机的网络接口,映射到一个 NAT 表中存储在双向 NAT 服务器。

使用双向 NAT 对 VM 进行公共访问

两个虚拟机的步骤通信的环境中彼此使用一个双向 NAT 方法正确是它们是在两个接口方法的相同:

  1. Web 服务器使用 NetBios 或承载文件以解决该计算机的名称 db-server 到 IP 地址 entity_CODEdb-server 的私有接口 (192.168.23.2)。

  2. Web 服务器与 db-server 通信此 IP 地址。

步骤,在环境外部的某个客户端"在克隆的环境中必须与 web 服务器进行略有差异和如下所示:

  1. 通过实现该 NAT 方法,客户端"在克隆环境中查询实验室管理软件获取 web 服务器唯一的别名。 (Visual Studio 实验室管理工具版不实现该 NAT 方法)。

  2. lab management 软件响应与个别名。

  3. DNS 服务器解决个别名对于公共 IP 地址 web 服务器 (10.86.51.63)。

  4. 此 IP 地址实际映射到双向 NAT 服务器的接口。 客户端与双向 NAT 服务器通信,则假定时,它与 web 服务器通信。

  5. NAT 服务器检索存储在配置表中存储的映射并将公共 IP 地址 (10.86.51.63) 为专用 IP 地址 (192.168.23.1)。

  6. 向前 NAT 服务器 customers 端的消息。192.168.23.1 的专用网络的,是 web 服务器的 IP 地址。

此方法的优点在两个接口方法的是环境中的虚拟机不必修改以任何方式。 不需要介绍每个虚拟机的其他网络接口。 引入了一个附加的网络接口到虚拟机可能导致某些应用程序中断。

此方法的另一个优点是实现的网络隔离整个逻辑封装到额外的虚拟机。 不需要在的其他每个虚拟机的代理。 将所有数据包传递多余的虚拟机还提供附加支持网络隔离高级功能控件点例如:

  • 外部操刀: 不允许在环境外的客户端启动的网络数据包到达该环境中的虚拟机。

  • 除非将面向特定端口,外部具有特定端口例外: 不允许在环境外的客户端启动的网络数据包到达该环境中的虚拟机。

这些功能在该双向 NAT 方法可以轻松地实现通过在中引入 NAT 服务器的防火墙。该双向 NAT 方法的主要缺点是某些应用程序不会在 NAT 中工作。 例如 DCOM 和 .NET 远程处理的协议,通常用于在 windows 应用程序中,不起作用,当客户端和服务器由一 NAT 服务器时分离。 此目的。Visual Studio 实验室管理使用双重接口方法。 该双向 NAT 方法的另一个缺点是它在每个环境中需要一个虚拟机,在创建或其他操作期间虚拟环境,引入额外的系统开销。

其他冲突

到目前为止,我们描述了计算机名称,IP 地址和计算机地址冲突如何通过网络隔离解决。 如果环境的副本时,可能会发生冲突的其他窗体上。 只要出现在位于虚拟环境外的外部组件的依赖项,在冲突的风险,当该环境的副本时。 本节中,我们将查看两个常见情况下,这样会发生冲突。

Hh329474.collapse_all(zh-cn,VS.110).gifActive Directory 冲突

它是常见的情况 windows 设备和应用程序依赖于用户身份验证和授权的 Active Directory (AD) 目录服务的或。 中心管理窗口的计算机使用广告组策略非常常见做法。 使用此示例,我们假定 web 服务器和 DB 服务器在原始环境中加入到广告托管字段。 广告在环境之外承载。 我们克隆此环境时,我们现在具有 web 服务器两个相同的克隆;但是,只有在广告的项。 这显然不取,并可能导致几个问题。 例如,在中,如果其中一个 web 服务器克隆将字段是脱节由用户操作,另一个克隆的部件。 无意中做的更改在一个环境影响上其他环境。

若要防止 Active Directory 冲突,广告服务器在该环境中的虚拟机必须承载。 广告服务器不应具有其他目录中的任何信任关系在环境外。

对设置一个广告的一些其他注意事项在网络隔离环境中。 首先,不应连接广告虚拟机到公共网络。 在两个接口过程,这意味着广告虚拟机不应有一个公共接口。 在该双向 NAT 方法,这意味着一个 NAT 表不应有映射广告虚拟机的。

接下来,因为广告在独立林中,则必须在该环境中的 DNS 服务器。 其他环境中的虚拟机必须为带有广告的相应通信使用在私有网络的此 DNS 服务器。 的示例,除非 DNS 服务器设置在私有接口,正确配置虚拟机可能无法连接在私有广告的字段。

在配置一个环境包括广告虚拟机时,Visual Studio 实验室管理自动断开广告从公共网络和配置虚拟机私有接口的 DNS 设置。

可能有承载该环境中的一个广告的情况是不可能的。 例如,在中,当应用程序必须与其他现有的公司应用程序时,的集成开发中使用一个广告公司则会发生此错误。 在设备连接到该环境时,将字段未启用安全环境的克隆的已知解决方案。

Hh329474.collapse_all(zh-cn,VS.110).gif数据库冲突

虚拟环境另一个常用涉及到承载在环境之外的应用程序的数据库。 通常,这样做,当数据库时足够大,因此,当它是不切实际的克隆与每个环境 (ide) 的数据库。 这也可能发生,当开发的应用程序与数据库交互在其他地方承载的简单网络客户端时。 在这种情况下,那么,当两个相同的克隆与数据库交互时,数据库服务器无法区分两个客户端的标识。

Hh329474.collapse_all(zh-cn,VS.110).gif摘要

能够创建虚拟环境相同的克隆到虚拟实验室管理的几种情况很重要。 但是,那么,当相同的克隆创建时,有的计算机名称,IP 地址和计算机地址冲突。 简单的方法,例如更改的计算机名称或 IP 地址,来解决这些冲突通常需要应用程序的重新配置或重新安装并启用无法创建相同的克隆的意图。 网络隔离还允许同时创建和运行两个克隆解决此问题。

后续步骤

规划 SCVMM 环境: 时了解为 SCVMM 环境使用不同的选项,如用于运行测试的虚拟机,存储的虚拟机、模板、存储环境和网络隔离。 请参见 SCVMM 环境的创建和管理指南

创建网络隔离环境: 使用本主题,如果已经准备好创建网络隔离环境。 请参见 创建和使用网络隔离环境

请参见

概念

在应用程序生命周期内使用实验室环境