SNAT和DNAT原理及配置方法

SNAT策略概述

原理:修改数据包中的源IP地址
作用:可以实现局域网共享上网
配置的表及链:nat表中的POSTROUTING

企业内部的主机A想访问互联网上的主机C,首先将请求数据包(源:ipA,目标:ipC)发送到防火墙所在主机B,B收到后将数据包源地址改为本机公网网卡的ip(源:ipA,目标:ipB),然后经互联网发送给C;C收到后将回应包(源:ipC,目标:ipB)转发给C的路由器,经互联网将回应包转发给B,B收到回应包后修改其目的地址,即回应包改为(源:ipC,目标:ipA)然后将数据包转发给A。
在这个过程中,修改了请求报文的源地址,叫做SNAT(source NAT POSTROUTING),用于局域网访问互联网。

注意:
不能在防火墙B的PREROUTING链上设置转换源地址的防火墙策略,因为若在B的PREROUTING链上设置转换源地址的防火墙策略,此时还未检查路由表,还不知道要到达数据包中目标主机需经过本机的哪个网卡接口,即还不知道需将源地址替换为哪个公网网卡的ip,需在POSTROUTING设置转换源地址的防火墙策略。

DNAT策略概述

原理:修改数据包中的目标IP地址
作用:将位于企业局域网中的服务器进行发布
配置在nat表中的PREROUTING链上

互联网主机C想访问企业内部的web服务器A,但A的地址是私有地址,无法直接访问。此时,C可以访问防火墙的公网地址,C的请求数据包(源:ipC,目标:ipB)到达防火墙B后,在B的prerouting上将请求数据包的目标地址进行修改,并将数据包(源:ipC,目标:ipA)发送给A。A收到后进行回复发送响应包(源:ipA,目的ipC)到防火墙,防火墙收到后对数据包源地址进行修改,并将响应包(源:ipB,目标:ipC)给C。利用这种机制可以将企业内部的服务发布到互联网。
在这个过程中,修改了请求报文的目标地址,叫做DNAT(destination NAT POSTROUTING),用于互联网访问局域网。

注意:
必须在防火墙的prerouting上设置修改目标地址的防火墙策略,因为若不在此处修改,请求数据包通过prerouting和路由表后,由于目标主机是本机,就会将数据包发往input,进而被发往本地进程。

SNAT和DNAT配置

1.使用双网卡,分别作为内网和外网的网关

内网网关地址:192.168.10.1
外网网关地址:12.0.0.1

2.开启路由转发功能

在/etc/sysctl.conf文件中最后加入
net.ipv4.ip_forward=1
使用sysctl -p使其生效

3.将主机全部绑定在VMnet1网卡上形成局域网
在这里插入图片描述

4.检验内网的主机能否ping通192.168.10.1和12.0.0.1;外网主机能否ping通12.0.0.1

5.内网主机先测试能否访问http服务
在这里插入图片描述

查看网站服务器的日志文件/var/log/httpd/access_log,可以查到此时还是私网IP访问的
在这里插入图片描述

6.在防火墙服务器中编写SNAT转换规则,在nat表中的POSTROUTING链的开头加入规则:从私网192.168.10.10主机来的数据包从ens33外网网卡出去时,使用SNAT策略将源地址192.168.10.10转换成公网地址12.0.0.1

[root@firewalld ~]# iptables -t nat -I POSTROUTING -s 192.168.10.10 -o ens33 -j SNAT --to-source 12.0.0.1

7.内网主机再次访问外网的http服务,这时会发现客户端192.168.10.10地址访问外网apache服务时,地址会被转换成12.0.0.1
在这里插入图片描述

8.这时角色互换,内网现在有台apache服务器,外网一台主机要访问内网中的网站服务器。
未做DNAT策略时,外网无法通过12.0.0.1地址访问内网中的网站服务器
9.在防火墙服务器中编写DNAT转换规则,在nat表中的PREROUTING链的开头加入规则:将进入外网网卡的原来的目的地址12.0.0.1通过DNAT策略转换成192.168.10.10

[root@firewalld ~]# iptables -t nat -I PREROUTING -d 12.0.0.1 -i ens33 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.10

这时外网主机可以通过网关出接口地址来访问apache服务了
在这里插入图片描述

防火墙规则的备份和还原

将iptables规则保存到文件中进行备份:
iptables-save > /路径/名称

重新加载备份文件中的iptables规则:
iptables-restore < 备份文件的完整路径

©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页