虚拟机实现IP转发
因为工作需要,在师傅的带领下实现了一个虚拟机的SNAT IP转发功能,该功能实现的效果大概就是将虚拟机当做电脑的路由器,主机的请求通过虚拟机转发出去,接收到的回应也通过虚拟机解析回来,以便在虚拟机上开发防火墙功能。
先介绍一下设备的情况,一台很久的台式机(大概就是学校机房那种,内存3G左右,处理器i3几代不清楚)装载Windows7系统(OK,这样的配置也是可以运行虚拟机的,台式机还是比笔记本强得多),虚拟机装载Centos6.5系统,内存分配1G,磁盘空间40G。OK话不多说,我们直接开干吧。
我们要实现的目标大概如下图所示:
我们知道虚拟机要联网是需要一个网络适配器的,对于目标虚拟机来说需要两个网络适配器,一个用于连接外网(Internet),另一个用于连接内网(Windows7),两个网卡使用不同网段的IP,在虚拟机中实现路由转发功能。
首先为虚拟机新建一个网络适配器,右键自己的虚拟机--->设置--->底部add”--->网络适配器
进入Centos系统,所有关于网络的配置文件都在:
/etc/sysconfig/network-script/
其中ifcfg-eth0就是网络适配器的配置文件,在这里,我们使用虚拟网卡的方式完成虚拟机路由器的配置,所以不需要为第二个适配器设置配置文件,它将处于混杂模式,没有IP地址,我们想让第一个网络适配器连接到外网,第二个适配器连接到内网(连接Windows),就需要进行一系列设置。
假设外网的IP为192.168.111.9,网关为192.168.111.1,在ifcfg-eth0中将IP地址设置为外网IP,网关设置为外网网关。假设内网IP(WindowsIP)为192.168.133.5,那么需要将内网的网关设置为第二个适配器的IP地址,然而第二个适配器处于混杂模式,没有IP,需要新建一个虚拟网卡,为其设置IP并且将其绑定到第二个适配器上。
新建虚拟网卡
brctl addbr br0
将其绑定到适配器上
brctl addif br0 eth1
为虚拟网卡设置IP地址(作为内网的网关使用)
ifconfig br0 192.168.133.4
将Windows系统的网关设置为br0的IP地址
重启网络服务(注意上面虚拟网卡的创建和设置是不会自动保存的,下次开机之后就没有了,建议写一个脚本文件将上面的内容写进去,每次开机都运行脚本)
service network restart
这个时候两个适配器都各自连接到了该连接的地方,现在需要对两张适配器进行IP请求的转发将Windows的请求由第二个适配器eth1转发到eth0上去,通过eth0与外界沟通。
首先开启系统的IPv4的转发功能,配置文件如下
/etc/sysctl.conf
找到下面属性
net.ipv4.ip_forward
将其值改为1,代表允许IPv4转发
在转发的部分使用了iptables工具进行IP的转发,iptables是对数据包进行检测的一款简易访问工具,将规则组成一张表,实现了绝对详细的访问控制功能,使用下面命令进行IP转发
iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -o eth0 -j SNAT --to-source 192.168.111.9
代表将192.168.133.0/24网段上所有的IP请求都由192.168.111.9转发。
iptables设置的内容保存有两种方法,第一种将配置文件存放到一个目录
iptables-save >/var/log/iptables.backup
需要读取配置时
iptables-restore </var/log/iptables.backup
第二种方式是使用下面命令自动存储
service iptables save
当然还是要重启服务
service iptables restart
service network restart
如此一来就完成了虚拟机充当路由器转发IP的功能