在上一篇文章中,我们通过在物理网卡上创建多个VNIC,实现了对物理网卡的复用。实际上,我们创建了一个如图1所示的网络环境。
图1 由VNIC和Zone创建的网络环境
由图1我们可用看出,我们创建了两个虚拟网卡(VNIC):v1和v2,它们和物理网卡bge0一起组成了在本机环境中的一个位于同一子网上的三个链路层可连接对象,即虚拟网卡对象(虽然bge0是一个物理设备,但对Solaris内核中的网络链路层而言,同v1和v2一样,都是链路层可连接对象)。图1中的全局zone和非全局zone都可用看作是一个独立的系统(Zone的引入的初衷就是为了实现软件上相互隔离的操作环境),它们的不同在于全局zone是操作系统安装后提供给用户的操作环境,非全局zone是由用户(一般是特权用户)在全局zone中创建的zone,特权用户可用在全局zone中创建VNIC和非全局zone。但在非全局zone中,即使是特权用户(即使是root用户)也不能创建非全局zone或VNIC。
在这篇文章中,我们将创建一个虚拟网络。在这个网络中,网络的核心组件网卡接口、链路层交换机和路由器都采用Solaris的虚拟化技术实现,在现实应用中,我们可用把这些网络组件当作实际的网络组件使用,并在这个网络中部署客户的网络服务,这些组件可以替代实际的网络组件,不同的是,系统管理员无需拔插网线,仅通过CLI(命令行接口)就可以管理这些组件。
在上一篇文章中,我介绍了VNIC,VNIC可以作为虚拟网络中的网卡来使用。同时,我们也可以使用Solaris具有独立IP协议栈的Zone(Exclusive IP Stack Zone)来实现虚拟路由器(三层交换机)。然而,作为一个完整的LAN,我们还需要链路层交换机来连接位于同一子网的主机。这里,我们可以使用Solaris Crossbow项目中引入的etherstub来扮演虚拟网络中的链路层交换机的角色。创建一个etherstub的命令是:
# dladm create-etherstub <etherstub_name>
我们可以通过"dladm show-link" 或 "dladm show-etherstub"来查看这个etherstub的信息:
# dladm show-link <etherstub_name>
或:
# dladm show-etherstub <etherstub_name>
使用"dladm delete-etherstub <etherstub_name>"可以删除这个etherstub。
下面,我将在不使用物理网络设备的情况下创建一个如图2所示的虚拟网络,而这个网络完全存在于一个Solaris系统中,并且独立于物理网络。如若使其存在并且运行,只需一台主机。
图2 由VNIC,etherstub和Zone创建的虚拟网络结构图
图2中展示了两个网络,我们的目的是让zrouter作为一个路由器&#