这个任务其实是前段时间《网络安全》课程的一个小实验。实验的要求是在virtualbox中运行两台虚拟机,一台linux机器用作路由器(该机器配置两个网卡,一个连接到外网,一个连接到内网),一台windows机器连接到内网,通过linux的路由器功能上网。
首先配置下实验环境。实验中真机为win7系统,DNS是202.38.64.56,虚拟机为32位Ubuntu(1404)主机一台。32位win7主机一台。
虚拟机win7有一张网卡,上网模式是Host Only,ip地址是192.168.56.102(连接到内网192.168.56.0/24)。虚拟机Ubuntu有两张网卡:eth0的上网模式是NAT ,ip地址是10.0.2.15(用该ip模拟公网ip,因为它连接到外网)。eth1的上网模式是Host Only,ip地址是192.168.56.101(连接到内网192.168.56.0/24)本实验用Ubuntu主机做路由器,使虚拟机win7在Host Only模式下能上网.。
然后简单了解下iptables的基本使用:
iptables [-t表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
几个注意事项:
不指定表名时,默认表示filter表
不指定链名时,默认表示该表内所有链
除非设置规则链的缺省策略,否则需要指定匹配条件
下面是对两个虚拟机的配置:
配置虚拟机win7:
设置ip 192.168.56.102
子网掩码 255.555.555.0
默认网关 192.168.56.101(该ip地址对应Ubuntu的eth1的host only的ip地址)
首选DNS服务器 172.17.1.6(与真机上的DNS一致)
配置Linux虚拟机:
以root用户执行:
modprobe ip_tables
modprobe ip_nat_ftp
在LINUX启动时,ip_tables和iptable_nat两个模块在内核中并不是默认的启动项,因此上述两条语句就是先将这两个必须的模块启动。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
设置防火墙规则,对于输入输出和转发的包均设置为接受状态。
建立伪装和IP转发:
iptables -t nat -A POSTROUTING -o eth0 -jMASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT
参数说明:
-t nat:调用NAT表,调用这个说明遇到了产生新的连接的包。
-A POSTROUTIN:指定信息包打算离开防火墙时改变它们的规则,意即使用NAT。
-ieth1:输入接口为eth1。
-o eth0:输出接口为eth0。
-j MASQUERADE:指定进行地址伪装,意即将内网地址伪装成外接口eth0的地址进行传输。
这两条命令的意思就是将内网向外连接的数据包(从eth1接收到的数据包)的地址转换为外网接口的地址并从外接口(从eth0接口转发)转发。
修改/etc/sysctl.conf中的net.ipv4.ip_forward = 1
echo '1'>/proc/sys/net/ipv4/ip_forward
执行sysctl -p,使内核参数修改生效。
根据实验原理所述的配置方法,对Ubuntu和win7虚拟机进行相应配置,使win7虚拟机能够通过Ubuntu虚拟机开启的路由器功能连接到外网。得到实验结果如下: