分享备用linux主机+linux客户机+iptables在多个网段的配置方法
2012年4月8日星期日 | | |最近在学习iptables防火墙,但是由于没有实验条件,所以就只有用Vmware虚拟机来搞,要求实体机和虚拟机都是Linux,翻了VMware的手册,都是windows下讲得多,linux下讲得少,至于如何用一个Linux实体机来控制多个不同网段的Linux虚拟机,更是没有提到,下面谈谈我自己的实践体会:
首先调用命令vmware-config.pl配置vmware,在询问你是要配置什么上网方式的时候,请选用host-only,配置4块跟实体机沟通的虚拟网卡,然后它会问你是要自动搜索private网段还是要自己配置,选自己配置,分别配置四块网卡为:
vmnet1: network 192.168.9.0 submask 255.255.255.0
vmnet3: network 192.168.1.0 submask 255.255.255.0
vmnet4: network 192.168.2.0 submask 255.255.255.0
vmnet5: network 192.168.3.0 submask 255.255.255.0
值得注意的是,在调用vmware-config.pl的时候,它会提示你已经有某个*.ko模块跟要安装的冲突,这个时候应用下面命令,找出冲突的模块,将它删除或者移动到某个目录下:
find /lib/modules -name "冲突模块名字" -exec rm -rfv '{}' \;
即可。
你会奇怪,为什么没有vmnet2,因为被主机拿去作bridge或者nat去了,不要管它,配置完后用ifconfig -a看一下,结果如下:
eth3 Link encap:Ethernet HWaddr 00:80:1E:16:E5:49
inet6 addr: fe80::280:1eff:fe16:e549/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:29962 errors:0 dropped:0 overruns:0 frame:0
TX packets:26965 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2685518 (2.5 MiB) TX bytes:2974447 (2.8 MiB)
Interrupt:20 Base address:0xf00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:500 (500.0 b) TX bytes:500 (500.0 b)
中间省略
vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01
inet addr:192.168.9.1 Bcast:192.168.9.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
vmnet3 Link encap:Ethernet HWaddr 00:50:56:C0:00:03
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fec0:3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
vmnet4 Link encap:Ethernet HWaddr 00:50:56:C0:00:04
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fec0:4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
vmnet5 Link encap:Ethernet HWaddr 00:50:56:C0:00:05
inet addr:192.168.3.1 Bcast:192.168.3.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fec0:5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
你会看到inet addr这个字段,说明IP已经自动配置好了,再使用route查看一下gateway,如果没有自动配置或者配置部队的话,用route命令(针对vmnet3):
route add -net 192.168.1.0 netmask 255.255.255.0 dev vmnet3 gw 192.168.1.1
进行配置。
Vmware下面上网方式就是下面几种,bridge,nat,host-only,custom。我们这里选用custom来上网,在能够上网之前首先还有几步工作要作。
第一要打开linux的网关转发,echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf就可以了。
第二要对Linux的防火墙进行配置,让它能够放行从网上经过物理机到虚拟机的封包,同时开启nat功能,将下面段落加到/etc/rc.d/rc.local中去:
iptables -t filter -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.9.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o ppp0 -j MASQUERADE
通过上面这个步骤,虚拟机就可以使用静态ip的方式上网了,但是假如想让虚拟机使用自动获起ip的方式上网的话,还得要费一些手脚,首先vmware在启动daemon的时候会自动为虚拟机里的网卡启动dhcpd服务,我们在这里要用主机的dhcpd服务来控制它,不能够让虚拟机里启动的dhcpd服务它运行,但是你不让它启动,vmware就启动不起来,所以只有在它启动起来以后再将它干掉。使用如下脚本:
#!/bin/bash
ps -aux|grep vmware>vmwaredhcpd.txt
vmwaredhcpd=`awk '{print $2}' vmwaredhcpd.txt`
kill -9 $vmwaredhcpd
rm -rfv vmwaredhcpd.txt
将此脚本命名为killvmwaredhcp.sh,然后放到/etc目录下,再在/etc/rc.d/rc.local里面加上一行:sh /etc/killvmwaredhcp.sh即可。
在干掉了了虚拟机自带的dhcpd服务以后,我们得为它配置实体机的dhcpd服务,首先编辑/etc/sysconfig/dhcpd文件,加入下面文字:
DHCPDARGS="vmnet1 vmnet3 vmnet4 vmnet5"
因为我的实体机只有一个网卡,所以全部是虚拟机网卡的名字。
同时在/etc/dhcpd.conf中这样设置:
default-lease-time 259200;
max-lease-time 518400;
allow unknown-clients;
option domain-name "localdomain";
option domain-name-servers 202.98.198.167,202.98.192.67;
ddns-update-style ad-hoc;
subnet 192.168.9.0 netmask 255.255.255.0 {
range 192.168.9.0 192.168.9.255;
option broadcast-address 192.168.9.255;
option routers 192.168.9.1;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.0 192.168.1.255;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
}
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.0 192.168.2.255;
option broadcast-address 192.168.9.255;
option routers 192.168.2.1;
}
subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.0 192.168.3.255;
option broadcast-address 192.168.3.255;
option routers 192.168.3.1;
上面的ad-hoc表示一种P2P的连接,max-lease-time表示最大租赁时间,有兴趣的可以查阅相关资料。其它的意思都很浅显,就不在一一讲述了。
然后,service dhcpd restart
通过这样,你就可以在虚拟机中使用dhcp上网方式了,让你一点都不操心。
终于来到要安装虚拟机的时候了,首先安装centos 5.1虚拟机,因为硬盘空间的关系,所以采用克隆的方式再创建两个虚拟机,它们的上网方式全部选为custom,再从下拉菜单中选择刚才创建的跟实体机沟通的网卡号,如/dev/vmnet1,或者/dev/vmnet3等等,最后启动虚拟机,登录以后将它的网络设置为dhcp或者静态ip的方式,注意的是,选静态ip的设置方式的时候,网关必须设置为跟实体机相连的网卡的ip地址,比如vmnet1或者vmnet3的ip其它的随意。
这样我们就得到了一个可以通过物理机来控制的多个虚拟机,你可以通过物理机来控制各个虚拟机,也可以在虚拟机里面单独设置防火墙,方便我们作各种网络实验。
这篇文章很多东东参考CU里面yunqing老大的vmware配置实例-linux host+windows guest+firewall1这篇文章,深表谢意。