当我们安装完成 VMware Workstation 后,我们会发现在网络连接里将多出两块虚拟网卡,即 VMWare Network Adapter VMnet1 和 VMWare Network Adapter VMnet8 。用 ipconfig 命令查看新增加的网卡的属性可以发现,这两块网卡分别属于不同的子网。在 Edit--->Virtual Network Editor 菜单中可以看到 VMWare Workstation 支持的虚拟局域网的个数( Windows 版本的支持 10 个虚拟子网,即 VMnet0-VMnet9 )。比如虚拟子网 VMnet8 ,子网 IP 是 192.168.48.0 ,是 NAT 模式(使用网络地址转换),默认网关地址为 192.168.48.2 。把虚拟网卡 VMWare Network Adapter VMnet8 连接到了这个子网上,虚拟网卡的 IP 在主机中可以看到是 192.168.48.1 。启用了本地的 DHCP 服务,并设置了能动态分配的 IP 地址范围 192.168.48.128-192.168.48.254 。
我们知道,要组网,就需要使用网卡、交换机等组网设备,同样地,在 VMware Workstation 中组网也需要使用这些设备,只不过在 VMware Workstation 虚拟的计算机和网络中,这些设备在形式上也都是虚拟的(但在功能上,它们跟真实的网络设备没有大的区别)。
6 、虚拟机的创建及其网络配置实例
这里 VMware Workstation 安装在 Window 7 中。我们在虚拟机中安装 Red Hat Enterprise Linux 6.0 。单击“ New Virtual Machine” 以创建新的虚拟机,选 ”Typical” 然后指定 RHEL 6.0 的映像文件,输入 Linux 的登录用户名和密码,然后可以指定系统的安装位置,分配的硬盘空间,单击 ”Customize Hardware…” 可定制虚拟机支持的虚拟硬件(也可以在安装完后设置)。系统安装完后,默认是使用自定义的 NAT 模式来连接外部网络。更改该虚拟机的 Network Adapter ,可以设置成使用 VMnet8 (也是 NAT 模式),当然也可以设置成使用其他模式。登录到 Linux 系统,网卡参数配置为 /etc/sysconfig/network-scripts/ifcfg-eth0 ,主机名配置为 /etc/sysconfig/network , DNS 配置文件为 /etc/resolv.conf 。也可以直接在右上角的网络管理器中配。如下:
( 1 ) NAT 模式:虚拟机设置成使用 VMnet8 。
IP : 192.168.48.130 ,要与 192.168.48.1 在同一个网段的不同地址,或者也可以配置成 DHCP 方式,这时 VMnet8 必须是启用了 DHCP 服务。
Netmask : 255.255.255.0 ,要与 192.168.48.1 的掩码相同。
Gateway IP :填写 VMnet8 的网关 192.168.48.2 。
DNS: 填写 VMnet8 的网关地址 192.168.48.2 ,也可以设置成你真实主机中使用的 DNS 地址。事实上,如果是 DHCP 方式, nameserver 会自动设置成 VMnet8 的 Gateway IP Address , nameserver 就起到 Windows 下的 DNS Server 作用,这种设置类似于 Windows 域环境下的 DNS 转发器,说明这个地址会自动转发 DNS 查询到主机的 DNS 。
配置好后用 service network restart 命令重启网络。
( 2 ) Host-only 模式:虚拟机设置成使用 VMnet1 。
查看真实主机中连接外网的网卡属性,选择“共享”标签,设置成允许其他网络的用户共享此连接,并设定允许的网络接口为 VMware Network Adapter VMnet1 。再查看一下你的 VMnet1 的属性,看一下 TCP/IP 协议的设置,你会发现已经被自动设置为 192.168.137.1/255.255.255.0 。 Windows 下的设置完成后,转入 Linux 虚拟机,将你的 eth0 的 IP 地址设置为静态的。
IP : 192.168.137.2 (或其它在此网段上的地址)。
Netmask : 255.255.255.0 ,与 VMnet1 的一致。
Default Gateway: 192.168.137.1 ,为 VMnet1 Adapater 的地址。
DNS :输入你自己的 DNS (主机中用的 DNS )。
( 3 ) Bridged 模式:虚拟机设置成使用 VMnet0 。
一切都跟主机一样,只有 IP 不能与主机相同,但在同一个网段。
7 、组网实例
我们的目标是建立两个定制的子网 VMnet2 和 VMnet3 ,这两个网络与真实主机是不直接相连的(真实主机中我并不添加连接到这两个网络的虚拟网卡),而是通过一台以桥接模式创建的属于 VMnet0 的虚拟机连接 VMnet0 ,真实的局域网也即 VMnet0 通过本地的网关连接 Internet ,我们将 VMnet2 的虚拟机称为 VMnet2PC , VMnet3 的虚拟机称为 VMnet3PC , VMnet0 的 PC 称为 VMnet0PC 。现在把 VMnet0PC 作为路由器和 DNS 服务器,要求三个网段互联互通,并都可以访问 Internet 。注意本例中需要建立 3 台虚拟机,而真实的 PC 也处于 VMnet0 子网中,再次强调一下, VMnet0 实际上是现实局域网在虚拟网络中的映射。
首先,我们建立第一台虚拟机 VMnet0PC ,可以直接使用刚才的 RHEL 6.0 虚拟机,设置成桥接模式。这样,这台虚拟机会有一块连接到 VMnet0 的虚拟网卡 eth0 ,与真实 PC 处于同一个网段内,设为这个子网 IP 为 192.168.0.0 ,这个网段的网关为 192.168.0.1 。由要求可知, VMnet0PC 另外还要增加两块虚拟网卡 eth1 , eth2 ,这样 VMnet0PC 应该有三块不同的网卡分别接入三个不同的虚拟网络 (VMnet0, VMnet 2, VMnet3) 。打开 VMnet0PC 虚拟机的属性设置 Hardware 标签下面的“ Add… ”按钮,分别添加两块网卡连接到 VMnet2 和 VMnet3 。
其次,我们需要配置子网 VMnet2 和 VMnet3 ,并在其中创建虚拟机。打开 Edit--->Virtual Network Editor ,可以看到 VMnet2 的子网 IP 为 192.168.193.0 ,为 Host-only 模式。上面我们讲过, VMware Workstation 为主机安装了一个 DHCP 服务,我们还可以把 VMnet2 添加到 DHCP 的服务列表中(勾选“使用本地 DHCP 服务”),让 DHCP 为连接到 VMnet2 交换机上的虚拟机自动分配在子网 192.168.193.0 中的动态 IP 地址。用同样的方法,为交换机 VMnet3 指定子网 IP 为 192.168.70.0 ,并添加它到 DHCP 的服务列表中。注意我们并没有把真实主机中任何的虚拟网卡连接到 VMnet2 和 VMnet3 。 VMnet0PC 中的虚拟网卡 eth1 和 eth2 可以保持默认的设置,采用 DHCP 方式。这样就可以让 VMware Workstation 自带的 DHCP 服务为它们自动分配一个 VMnet2 子网或 VMnet3 子网中的动态 IP 地址。当然你也可以为 eth1 和 eth2 手动指定 IP ,以指向 VMnet2 或 VMnet3 子网。配置完后, VMnet0PC 需要重启,以适应 VMnet2 和 VMnet3 的更改。在 VMWare 的右下角,我们可以看到 VMnet0PC 的 3 个网卡连接情况。
接下来,我们要需要在 VMnet2 和 VMnet3 中创建虚拟机并安装操作系统。这里我们在 VMnet2 中创建一台 VMnet2PC 的虚拟机,并安装 Windows Server 2008 。在 VMnet3 中,比如我们可以安装一台 Windows Server 2003 的虚拟机 VMnet3PC 。当然我们也可以使用 VMWare 提供的克隆功能,直接对 VMnet2PC 进行复制。关闭 VMnet2PC ,然后单击 VM--->Clone… ,根据复制向导,把 VMnet2PC 复制成我们需要的 VMnet3PC 。
现在的网络拓扑结构为:
VMnet0PC 的 eth0 : 192.168.0.115/255.255.255.0 。
真实主机: 192.168.0.114/255.255.255.0 ,它与 VMnet0PC 均位于真实子网 VMnet0 内,网关为 192.168.0.1 。可以上 Internet 。
VMnet0PC 的 eth1 :使用 VMnet2 子网的地址 192.168.193.129/255.255.255.0 。
VMnet0PC 的 eth2 :使用 VMnet3 子网的地址 192.168.70.128/255.255.255.0 。
位于 VMnet2 的 VMnet2PC :使用 IP 为 192.168.193.130 /255.255.255.0 。
位于 VMnet3 的 VMnet3PC :使用 IP 为 192.168.70.129/255.255.255.0 。
到目前为止,仅有 VMnet0PC 可以连接 internet 并访问所有的网段。默认情况下 VMnet2PC 和 VMnet3PC 是不能上 Internet 的。例如,在 VMnet3PC 中 ping 192.168.70.128 是能通的,但 ping 192.168.0.115 则不通,因为他们在不同的网段。要让不同网段之间能互访问,就必须在不同的网段之间设置路由器。 VMnet0PC 并不是一台路由器,但我们可以用 Windows 操作系统中的软路由功能或 Linux 中的 IP 转发来实现基本的路由服务。即在 VMnet0PC 中开发 IP 转发功能,将 VMnet2PC 的网关指向 eth1 ,将 VMnet3PC 的网关指向 eth2 ,这样就可以实现不同网段之间的互通。
在 VMnet0PC 中配置好三块网卡后,会自动添加这三个网段的静态路由,可用 route 命令查看,如下:
- [jackzhou@localhost ~]$ route
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 192.168.193.0 * 255.255.255.0 U 1 0 0 eth2
- 192.168.70.0 * 255.255.255.0 U 1 0 0 eth1
- 192.168.0.0 * 255.255.255.0 U 1 0 0 eth0
- default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
最后一条是自动添加的缺省路由,必须要有缺省路由, 因为缺省的路由是把所有的数据包都发往它的上一级网关。如果没有这些路由,可以用命令添加,例如:
route add -net 192.168.193.0 netmask 255.255.255.0
添加缺省路由:
route add default gw 192.168.0.1
接着,在 /etc/sysctl.conf 文件中开启 IP 包转发功能,设置 net.ipv4.ip_forward = 1 ,执行 sysctl -p 让参数生效。这样 VMnet0PC 就会自动在三个网卡之间转发 IP 包了。还要开启 NAT 的 IP 地址欺骗,使 VMnet2 和 VMnet3 子网能通过 VMnet0PC 的 NAT 服务实现访问 Internet 。
iptables -F # 清除 filter 表中原有的规则
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT # 允许 IP 转发
iptables -t nat -F # 清除 NAT 表中原有的规则
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 打开 NAT 的 IP 地址欺骗功能
把 iptables 的更改保存到 /etc/sysconfig/iptables 文件中,以便系统重启时仍可从此文件中读入这些规则:
service iptables save
chkconfig iptables on
在 VMnet0PC 上测试:
第一步,测试自身网络是否工作正常,执行如下命令,测试三个网卡:
ping 192.168.0.115
ping 192.168.193.129
ping 192.168.70.128
如果这些地址都能 ping 通,则第一步通过,否则查找原因,排除错误。
第二步,测试与上一级网关之间是否连通:
ping 192.168.0.1
如果通畅,则正常;否则查找错误原因。
以 VMnet3 子网内测试为例,登录到 VMnet3PC ,将其默认网关指向 eth2 ,这样就可以在 VMnet3PC 中 ping 通 192.168.0.115 和 192.168.193.129 这两个不同网段的地址了。
第一步,测试自身是否工作正常, ping 192.168.70.129
第二步,测试与网关是否连通, ping 192.168.70.128
第三步,测试与 VMnet2PC ( 192.168.193.130 )是否连通,这是 VMnet2 网段内的一台计算机, ping 192.168.193.130 。注意 VMnet2PC 同样需要将默认网关指向 eth1 。
第四步,测试与外网地址是否连通, ping 192.168.0.1 ,如果连通了,表示路由器配置正确,否则,查找原因。
如果没问题的话, VMnet3PC 就可以通过 VMnet0PC 访问 Internet 了(不行的话可能是 DNS 的问题,将 VMnet3PC 的 DNS 设置成 VMnet0PC 或者真实主机使用的 DNS )。可以看到,开启了 IP 转发和 NAT 之后,不同网段之间就可以实现互访,并且 VMnet2 和 VMnet3 子网的机器也能够通过 VMnet0PC 来访问 Internet 。注意如果 VMnet0PC 中是 Windows Server ,我们可以用软路由功能来实现跨网段互访,在“控制面板 ---> 管理工具 ---> 路由和远程访问”中配置。网上有很多相关的文章介绍(搜索“用双网卡实现跨网段访问”),这里就不展开了。