基于VMware Player实现NAT网络模拟环境

胡佳辉 2012-10-26 http://blog.csdn.net/gobitan

摘要:测试需要NAT的网络环境。但如果没有相应的硬件设备,可以通过VMware来实现。

硬件环境:PC一台,有两张网卡。

软件环境

宿主机:Windows XP操作系统

虚拟机:VMware-player-4.0.3-703057.exe

客户机:ubuntu-10.04-desktop-i386.iso

 

网络环境:单机即可,无需外部网络环境。

搭建说明

本文可以分为两个主要部分:

一是实现虚拟机的双网卡,两张网卡分别桥接到宿主机的两张物理网卡上。

二是用iptables实现NAT网络

第一部分:虚拟机不同网段的双网卡环境的实现

说明:虚拟机中的ubuntu安装成功后将拷贝成共计三份,分别命名为Client主机, NAT主机和Server主机。

第一步:安装VMware Player,步骤略。

安装完成后,系统默认的Network Adapter类型是NAT。

第二步:安装ubuntu desktop版,步骤略。

注意:这里必须为desktop版,server版经过测试无法调测通过。

      本步骤结束后,将虚拟机拷贝两份。

第三步:为NAT主机添加第二个虚拟网卡。

添加前先将NAT主机关闭。然后通过VMware菜单” VirtualMachine”à“Virtual Machine Settings”进入虚拟机设置界面,通过Hardware页的”Add”按钮再添加一个Network Adapter,采用默认配置完成添加。

然后启动虚拟机里的NAT主机,启动后将初始化一些第二张网卡的相关数据。因此,这一步是必须的。

第四步:配置物理网卡与虚拟网卡的对应关系

VMware Player的安装目录下找不到配置物理网卡与虚拟网卡对应关系的工具,需要从安装包中解压出来。解压方法如下:

在cmd命令行进入VMware安装文件所在的目录下运行:

VMware-player-4.0.3-703057.exe /e ./vmware-player-extend

然后会生成vmware-player-extend目录,在里面找到network.cab,解压它之后可以找到vmnetcfg.exe文件,拷贝它至VMwarePlayer安装根目录下并运行,通过而配置,可以将两张物理网卡通过桥接方式分别绑定在vmnet0和vmnet2上。内网卡对应vmnet0,外网卡对应vmnet2。

第五步:在NAT主机的ubuntu的安装目录中找到后缀名为vmx的文件,打开后分别修改和添加如下项,必须使得该文件内以ethernet0和ethernet1开头的配置项如下:

ethernet0.present= "TRUE"

ethernet0.connectionType= "custom"

ethernet0.virtualDev= "vmxnet"

ethernet0.vnet= "vmnet0"

ethernet0.wakeOnPcktRcv= "FALSE"

ethernet0.addressType= "generated"

ethernet0.generatedAddress= "00:0C:29:37:CB:D5"

ethernet0.pciSlotNumber= "33"

ethernet0.generatedAddressOffset= "0"

 

ethernet1.present= "TRUE"

ethernet1.connectionType= "custom"

ethernet1.virtualDev= "vmxnet"

ethernet1.vnet= "vmnet2"

ethernet1.wakeOnPcktRcv= "FALSE"

ethernet1.addressType= "generated"

ethernet1.generatedAddress= "00:0c:29:37:cb:df"

ethernet1.pciSlotNumber= "37"

ethernet1.generatedAddressOffset= "10"

说明:其中generatedAddress,pciSlotNumber和generatedAddressOffset值可能有所不同。

修改该文件后,保存。

第六步:配置Client主机,跟第五步类似,修改Client主机的vmx文件,只是只需配置ethernet0即可。注意将ethernet0.vnet设置为"vmnet0",让他绑定到第一张物理网卡上。

第七步:配置Server主机,跟第六步类似,修改Server主机的vmx文件,将ethernet0.vnet设置为"vmnet2",让他绑定到第二张物理网卡上。

第八步:配置完毕后,分别启动Client,NAT和Server主机。如果启动的时候你的两张物理网卡分别连接在两个不同的网段上,比如192.168.0.*(vmnet0)和10.10.0.*(vmnet2)上,那么Client会自动获取到192.168.0.*网段的一个地址。同理NAT会同时获取到192.168.0.*和10.10.0.*网段的地址,而Server会获取到10.10.0.*网段的地址。

如果物理网卡没有连接任何网络,系统可能获取不到地址。此时,你只需按照你的需要分别给这三台主机配置静态IP即可。但需要满足如果它们绑定的物理网卡地址相同,所对应的网段地址应该是一致的。但建议按照如下来配置,这样可以避免这个网络环境不受物理网卡的连接状态影响。编辑配置文件/etc/network/interfaces.

Client主机:

iface eth0 inet static

address 192.168.0.108

netmask 255.255.255.0

gateway 192.168.0.1

NAT主机:

auto eth0

iface eth0 inet static

address 192.168.0.1

netmask 255.255.255.0

 

iface eth1 inet static

address 10.10.0.84

netmask 255.255.255.0

Server主机:

iface eth0 inet static

address 10.10.0.85

netmask 255.255.255.0

配置完成后,执行/etc/init.d/networking restart即可生效。

 

第二部分:iptables实现NAT网络

第一步:先执行清除命令,将iptables的规则全部清除。

iptables -F

iptables -t nat -F

iptables --delete-chain

iptables -t nat--delete-chain

 

第二步:打开ip转发开关

echo 1 >/proc/sys/net/ipv4/ip_forward

第三步:添加nat规则。

iptables -t nat -APOSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -ieth1 -j ACCEPT

 

第三部分:验证环境

登陆客户端,执行如下命令“ping 10.10.10.85”应该可以ping通。相当于内网地址192.168.0.108通过NAT设备可以访问外网地址10.10.0.85.

附iptables命令注释

-t nat: 表示操作指向nat表, t是table的首字母。

-A : 追加,A是Append的缩写

POSTROUTING: 当包要出去的时候,立即修改它们的目的地址

PREROUTING: 只要包到达之后,立即修改它们的源地址

-o: out-interface的缩写,指出应该从哪个网口出去

-i: in-interface的缩写,指出应该从哪个网口接收到的包

-j : jump的首字母

SNAT: 指示包的源地址应该被修改

--to-source: 指定一个新的源IP地址

DNAT:指示包的目的地址应该被修改

--to-destination: 指定一个新的目的IP地址

后记:本来是要实现端口受限圆锥网络的NAT环境的,但因对iptables不够熟悉,目前只实现了一般的NAT环境。经测试,上面的环境属于受限圆锥NAT网络。

参考资料:

1. 如何为Windows下的VMwarePlayer桥接两个物理网卡http://blog.163.com/sam_chen_cn/blog/static/121643873201132651651731/

2. How Do I Add More Than One Network Ethernet Adapter (VMware Player:Windows)http://nst.sourceforge.net/nst/docs/faq/ch13s10.html

3. http://www.howtoforge.com/nat_iptables


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐