上图的操作,说白了就是要做一个路由器,路由器可以上网,电脑就可以上网。
先操作一下前期准备,打开虚拟机,将两个Linux窗口打开,然后分别拍一张快照,命名为“iptables 小实验前”。此举是方便实验过程出现不可挽回的错误,可以通过快照恢复,然后重新做实验。lyslinux-02 是之前克隆的虚拟机。
右击上图红色框框 “编辑虚拟机设置” 的位置 ,跳出弹框,选择“添加”,网络适配器,下一步,见下图,
保持默认,点击“完成”,见下图,
接着按下图箭头指示操作,见下图,
这边选择“LAN 区段”,相当于给这个网卡连到了一个内网的交换机上,Windows机器和这个交换机是连不上的。这样的话,这台机器和另一台的机器连上同一个内网的交换机,它们两者之间就可以通信了。
接着在“LAN 区段”上选择刚刚设置的区段,见下图,
这个机器的网卡就添加好了。
接着操作另一台机器的网卡,右击上图红色框框 lyslinux-02 的位置 ,选择“设置”,跳出弹框,选择“添加”,网络适配器,下一步,见下图,
操作完毕,点击“完成”,见下图,
然后往下操作,选择“网络适配器2”,在“LAN 区段”这边选择刚刚设置的 LYS ,再点击“确定”,见下图,
以上操作就是为了让这两台机器,选择同一个交换机。
准备工作做好了,下面就是启动这两台机器。启动完成之后,使用 PuTTY 远程登录lyslinux-01,输入命令 ifconfig ,回车,见下图,
上图红色框框的内容,就是刚刚增加的网卡,现在要给 ens37 这个网卡配置一个 IP。我们可以通过命令行给 ens37 添加 IP ,也可以设置配置文件,设置配置文件和设置虚拟网卡的步骤是一样的。将 ens33 的网卡配置文件复制一份到 ens37 里面,然后进入配置文件修改 IP、NETMASK 就可以,不用设置 DNS 和网关这些。更改配置文件的方式比较复杂,这边演示比较简单的方法,输入命令 ifconfig ens37 192.168.100.1/24 ,回车,见下图,
可以看到,成功的给网卡 ens37 配置了 IP 。当然这个 IP 一重启就会失效,要想 IP 永久生效,就需要编辑配置文件。
对于另一台机器,因为刚刚把网络连接关闭了,无法远程登录,所以要回到虚拟机上操作,见下图,
使用 ifconfig 命令还可以看到 ens33 这个网卡的 IP,它虽然在,但还是不能连接网络的,为了保险起见,使用命令 ifdown ens33 来关闭掉,见下图,
这样就看不到 ens33 的 IP 了。同样的方法,现在给这台机器的 ens37 网卡设置 IP,见下图,
IP 设置成功。现在来测试一下,连接一下lyslinux-01 这台机器的网络,输入命令 ping 192.168.100.1 ,回车,见下图,
上图显示网络没有连接成功,应该是 lyslinux-01 这台机器的网络有点问题,回到 PuTTY 上查看一下,见下图,
发现 ens37 的IP地址又不见了,这时候要重新给它配置 IP ,见下图,
然后再回到虚拟机上去连接网络,见下图,
可以看到网络连接成功了。
接着去 lyslinux-01 这台机器上连接 lyslinux-02的网络,输入命令 ping 192.168.100.100 ,回车,见下图,
也可以连接网络了。
现在总结一下,这个nat表应用的准备工作:
01机器两块网卡 ens33(192.168.218.128)、ens37(192.168.100.1),ens33 可以上外网,ens37仅仅是内部网络,02机器只有ens37(192.168.100.100),和01机器ens37可以通信互联。
现在来检查一下,Windows 的 cmd 能不能连接这两个 IP,见下图,
可以看到,都是不能连接的。现在来看一下 lyslinux-02 机器不能连接 192.168.218.128,也不能连接 192.168.218.1 ,也不能上外网,见下图,
可以看到也都是不行的。
为了实现需求1:可以让02机器连接外网。
在01机器上操作,这个文件 /proc/sys/net/ipv4/ip_forward 里面的内容,默认是 0,表示它没有开启内核转发,需要改成 1 。打开路由转发,输入命令 echo "1">/proc/sys/net/ipv4/ip_forward ,回车,即可将文件更改为 1 。见下图,
以上操作叫做打开端口转发。
接着在01机器上增加一条规则,执行命令 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE ,回车,见下图,
有了这条规则,才可以实现 192.168.100.0 这个网段上网。
接下来在02机器上设置网关为 192.168.100.1 ,输入命令 route add default gw 192.168.100.1,回车,见下图,
设置完成后,也可以实现连接 192.168.218.1 这个网卡。这意味02机器可以跟外网相通了。
接着设置一下 DNS,看看能不能联网,输入命令 vi /etc/resolv.conf ,回车,见下图,
输入上图红色框框的内容,保存后退出。119.29.29.29 是公共的 DNS,然后来看一下能不能连接,见下图,
发现是可以连接的,也可以连接外网。
到这边,我们的目的就达到了,让02机器也可以连接外网。现在在Windows上面使用cmd来查看一下,见下图,
发现Windows还是不能连接 192.168.100.100 。这边可以将01机器理解为路由器,02机器是手机、电脑等可以联网的机器。
需求2:03机器只能和01机器通信,让03机器可以直接连通02机器的22端口。这步操作叫 端口映射。
目前为止,02机器还只能在虚拟机上操作,不能远程登录。现在来实现02机器的远程登录,01机器上打开路由转发,同样的, echo "1">/proc/sys/net/ipv4/ip_forward 这个命令上面已经操纵过,所以这一步省略。接着往下操作,我们需要把之前的规则删除掉,以免影响到后面的操作,输入命令 iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE ,回车,见下图,
接着在01机器上增加两条规则,执行命令 iptables -t nat -A PREROUTING -d 192.168.218.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22,回车。这个命令做一个端口转发,将目标IP 192.168.218.128 和端口 1122,转到IP 192.168.100.100 和端口 22,这边操作的是进去的包。还有一个回来的包,执行命令 iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.218.128 ,回车。这个命令将原IP 192.168.100.100 改成目标IP 192.168.218.128 。见下图,
以上操作完成之后,还需要在02机器上设置网关为 192.168.100.1,这一步前面也操作过了,这边也可以省略。
以上操作完成之后,就可以通信了。现在来验证一下,新建一个PuTTY回话窗口,具体操作见下图,
作为测试的窗口,其他地方就不做设置了。接着打开新的PuTTY窗口 test100,见下图,
这边选择“是(Y)”,接着登录上去,查看IP,见下图,
可以看到ens37的IP是 192.168.100.100 ,接着看看能不能连接外网,见下图,
此时的Windows还是不能连接 192.168.100.100 ,见下图,
2、iptables 规则备份和恢复
正常情况下,使用命令 service iptables save ,会把规则保存到 iptables 的配置文件中 /etc/sysconfig/iptables 。如果不想保存在配置文件中,可以使用重定向命令,将规则重定向到一个文件中,文件名可以随意命名。见下图,输入命令 iptables-save > /tmp/ipt.txt ,回车,
上面保存成功之后,可以看到nat表里面才有规则,filter表里面是空的。
先将规则清除掉,输入命令 iptables -t nat -F,回车,见下图,
恢复刚才的备份,使用命令 iptables-restore < /tmp/ipt.txt ,restore 和 save 正好是相反的。
要想重启系统之后,就能马上加载规则,最好还是把规则保存在配置文件 /etc/sysconfig/iptables 中。
原文地址:http://blog.51cto.com/13503302/2095630