基于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