一、NAT技术简介
NAT(Network Address Translation,网络地址转换)是一种用于解决公有IP地址不足的网络地址转换技术,顾名思义就是用于实现公有IP和私有IP之间的转换。
NAT技术有两种模式--SNAT和DNAT,他们分别对应着不同的场景:
SNAT主要用于允许局域网内的主机通过一个公有IP地址访问互联网。这种场景对应着我们平时上网的情况,就是处于局域网内,通过路由器的SNAT转换将我们在局域网内的私有IP转换为路由器WAN口的公有IP访问互联网。因为我们的IPv4地址是由32位2进制组成,大约有37亿个,是远远不够我们使用的。所以我们引入了NAT技术,解决公有IP不足的情况。
DNAT主要用于允许通过互联网中的互联网中的公有IP访问,将通过公有IP的访问定向到局域网内的特定主机。这种情况对应着企业服务器的发布,企业的服务器处在局域网内集群分布,为了让互联网中的用户可以得到服务器的服务,且弥补公有IP不足的问题。我们就引入了DNAT技术将我们处在局域网内部的服务器发布到互联网上,通过端口或者其他方式映射到我们指定的服务器上,让用户能够得到指定的服务。
二、模拟实现NAT
简单的了解了NAT技术,那么它是如何实现的,下面我们进行简单的模拟。
1、实验准备
VMware虚拟机器两台分别充当路由器(NAT实现)、客户机/服务器进行两组实验(机器分别充当客户机访问互联网<SNAT>和机器充当服务器提供服务<DNAT>的情况)。
Xshell远程连接虚拟机,方便管理。
2、开始实验
1)SNAT简单模拟
这里使用到了两台虚拟机分别是client和router
1、网卡类型配置
将client的网卡类型设置为hostonly确保单独存在时,无法访问互联网。
虚拟机-->设置-->网络适配器
因为一般的路由器至少都有两个接口分别连接互联网和局域网,而一般虚拟机默认只有一块网卡,所以我们需要给路由器添加一块网卡。
虚拟机-->设置-->添加-->网络适配器-->完成
然后我们将router的网卡类型分别配置为hostonly(连接内网内的机器)和桥接模式(连接互联网)
2、IP地址配置
先给client配置IP地址,配置IP地址时,需要注意与模式相匹配。因为不同的网卡类型对应着不同的网段,hostonly模式下IP地址对应着真实机器中虚拟出来的VMnet1的网段
在网络适配器中找到VMnet1,双击打开后查看详细信息就可以得到对应的网段。
例如,我这里是192.168.211.0网段配置时候需要注意。
现在开始在虚拟机内配置IP地址
输入vim /etc/sysconfig/network-scripts/ifcfg-ens33,其中ens33是我的网卡名字。如何知道自己的网卡名字可以输入ip a
输入vim /etc/sysconfig/network-scripts/ifcfg-ens33后进入编辑,分别配置网关、子网掩码、IP地址和DNS服务器(顺便将我们的动态分配IP地址关闭:BOOTPROTO=“none”)
其中的网关为我们接下来,router机器的内网口IP地址,保证我们的数据请求可以送到router机器。
配置完IP后保存退出后,输入systemctl restart network刷新网络服务,让刚刚的配置生效。
这时候,再输入ip a查看我们的IP地址是否配置成功
现在我们给router机器配置IP地址,同样的操作,只是需要注意我们有两个网卡(输入nmcli c可以查看网卡名),我这里显示的两块网卡分别为ens33和ens36
但是我们进入/etc/sysconfig/network-scripts/目录下并没有ifcfg-ens36所以需要复制一份ifcfg-ens33到目录下改名为ifcfg-ens36并修改里面的配置。
其中,ens33不要配置网关和DNS服务器,因为它是router的内网卡。下面是ens33和ens36的配置
这里的ens36使用的是桥接模式,IP地址对应的网段和网关是跟真实机器一样的,所以我们去查看网络适配器查看真实机器的IP地址和网关,双击WLAN(因为我是笔记本电脑用的是无线网卡)
进入后点击详细信息查看IP地址和网关。
别忘了,ens33和ens36配置完成之后也要刷新网络服务。
IP地址配置完成之后,为了方便后面的操作,我这里启用了Xshell远程连接到虚拟机。(当然不使用Xshell,直接在虚拟机里面操作也是一样的)
3、配置SNAT规则
接下来我们就要对router机器进行操作实现SNAT功能
为了实验效果的直观和防止防火墙和selinux的干扰,我们先提前关闭防火墙和修改selinux状态。
输入:systemctl stop firewalld关闭防火墙;setenforce 0关闭selinux修改selinux状态为不限制进程访问文件。
除此之外,我们还需要打开我们的路由转发功能,这样router才能帮助client机转发数据。
输入:echo 1 >/proc/sys/net/ipv4/ip_forward
接下来,配置SNAT规则,我们这里编写一个shell脚本来实现这个功能。
vim snat.sh
脚本内容如下:
这里打码的内容就是我们ens36的IP地址
bash snat.sh运行脚本,之后验证SNAT效果:在client机器上ping www.baidu.com如果能ping通说明SNAT能够正常运转。
2)DNAT简单模拟
与配置SNAT类似,网卡类型和IP地址、网关、DNS服务器、子网掩码就不用再配置了。其他地方也是一样,唯一需要修改的就是DNAT规则,编写一个dnat.sh脚本,实现dnat功能。
vim dnat.sh内容如下:
除此之外,为了对外提供服务,我们还需要启动相应的进程。这里用httpd展示,输入yum install httpd -y下载安装http服务,输入systemctl start httpd启动http服务。此时,运行dnat.sh脚本后,如果能通过,ens36的IP地址(也就是外网口IP地址)访问到网页,即说明DNAT发布成功,如下所示。
到这里整个实验就已经完成了。