背景
- 当两台电脑处于不同的网段时,在不借助外部设备的情况下是不能够连通的。为了实现不同网段之间的连通,可以在两个网段之间假设一台路由器。
-
为了更加直观地理解路由器在网络中的作用,以及了解IPtables的使用方法,我们可以使用IPtables来架设一台虚拟的路由器以实现不同网段之间的通信。整个虚拟网络的结构如下所示:
网络结构.png
步骤
- 打开VMware Workstation,选择“编辑”-->“虚拟网络编辑器”,然后创建两个网段(VMnet2,VMnet3分别用于设置两个静态IP网段,两个网段的子网IP不同,其余设置相同),网段的设置如下: VMnet设置.png
-
创建三台虚拟机,其中student1和student2只有1张网卡,student3有两张网卡。并且student1配置VMnet2,student2配置VMnet3,student3配置VMnet2和VMnet3
student1.png
student2.png student3.png - 安装好3台虚拟机之后,配置hostname(如果之前在安装引导的时候已经配置过了就无需再配置,如果之前没有配置则需要重新配置主机名。三台虚拟机中设置主机名的方法一样,只是名字不一样)。
- 首先编辑配置文件,将其中的HOSTNAME改成自己设定的主机名称:
vim /etc/sysconfig/network
hostname-1.png - 使用hostname命名主机(这里必须保证前面设置的名称和这里的名称一致,例如我这里都是
student3
):hostname student3
hostname-2.png - 重启即可生效:
reboot
hostname-3.png
- 首先编辑配置文件,将其中的HOSTNAME改成自己设定的主机名称:
-
为三台虚拟机配置静态IP地址(配置的方法参考上一节的内容,也可参考一下的截图。第一张图是配置文件中的内容,第二张图中的命令是整个配置过程所使用的命令),虚拟机的网段规划见下表:
ifcfg-eth0.png
network-setting.png
IP配置清单.png - 从student1中
ping
student2和student3测试连通性。从返回来看,student1和student2之间无法联通,student1和student3之间是连通的。(原因是student1和studnet2处在不同的网段所以不通,而student1和student3的eth0处在相同的网段所以连通)。 配置前网络状态.png - 在student3中构建虚拟路由器:将student3作为虚拟路由器,使得处在不同网段的虚拟机student1和student2之间可以连通。
- 设置路由功能
// 开启包过滤功能
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.conf
// 开启源路由核查功能
echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf
// 关闭反向路径过滤
echo "net.ipv4.conf.all_filter=0" >> /etc/sysctl.conf
// 让网络设置生效
sysctl -p
iptables设置.png
- 修改student3的IPtables配置,使其可以接收并转发192.168.2.0/24和192.168.3.0/24两个网段的数据包。
// 清空所有链中的规则
iptables -F
// 清空所有的用户自定义
iptables -X
// 把所有链的包以及字节的计数器清空
iptables -Z
// 保存IPtables的配置
/etc/init.d/iptables save
// 指定192.168.2.0/24网段的数据包从eth0中发出去
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0
// 指定192.168.3.0/24网段的数据包从eth1中发出去
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth1
数据转发.png
- 检查student1和student2之间网络的连通性。
- 从student1中
ping
student2: 1ping2.png - 从student2中
ping
student1: 2ping1.png - 通过观察以上两张截图的信息发现,当student3构建成一台虚拟路由器之后,student1和student2之间可以通过student3实现数据传递。在这个过程中,student3也就担当了路由器的角色,而实现的方法就是配置iptables。
- 从student1中
- 通过配置IPtables规则,还可以实现网段之间的隔离。例如使student2和student3之间无法联通,相同的方式可以恢复连通。
// 设置规则将来自于192.168.3.0/24网段的包直接丢弃掉
iptables -I INPUT -s 192.168.3.0/24 -j DROP
// 再测试连通性发现网络不通
// 设置规则接收来自于192.168.3.0/24网段的包
iptables -I INPUT -s 192.168.3.0/24 -j ACCEPT
// 再测试连通性发现网络重新连通
隔离与恢复.png
小结
- IPtables是Linux下的免费防火墙工具,可以通过配置IPtables实现一些常见的网络隔离、连通操作,从而起到一定的防火墙功能。
- 其实真正的防火墙是处于Linux内核空间的Netfilter,而IPtables是用户空间中的配置工具。IPtables制定策略,Netfilter执行策略,二者协同实现真正的防火墙功能。IPtables就好比是诸葛亮,Netfilter好比是张飞。
网友评论