环境拓扑:
A ens33—— ens34 B ens38 —— ens33 C
实验介绍:
本实验使用主机A模拟园区网络(主机B、C)外部主机通过访问园区出口防火墙B的2022端口,实现访问企业内部主机C的SSH服务的要求。192.168.2.0/24模拟公网.作为外部网络主机A,其发往园区网络的流量通过其ens33接口发出。192.168.1.0/24网络模拟园区内部网络。
实验目的:
验证在以下三种实验场景中在防火墙B上已配置DNAT的情况下,是否需要再配置SNAT,以达到实验要求(在主机A上访问防火墙B的2022端口可以登录到主机C)。
实验一:主机C网关设置为空,防火墙B配置DNAT,不配置SNAT
防火墙B配置如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I PREROUTING -d 192.168.2.1 -p tcp --dport 2022 -j DNAT --to-destination 192.168.1.10:22
注:实验步骤1-3为A、B、C三主机配置完毕情形下,按照本实验要求进行的测试及抓包分析输出
1.主机A配置默认路由(也可不配置,不影响实验结果)模拟公网中主机不知道下一跳的真实场景。路由配置如图1-1
2.防火墙B路由配置如图1-2
3.主机C路由配置如图1-3
实验二:主机C网关设置为空,防火墙B配置DNAT、SNAT
防火墙B配置如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I PREROUTING -d 192.168.2.1 -p tcp --dport 2022 -j DNAT --to-destination 192.168.1.10:22
iptables -t nat -I POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
实验三:主机C网关设置为防火墙B的ens38网口的IP 192.168.1.1,防火墙B配置DNAT,不配置SNAT
防火墙B配置如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I PREROUTING -d 192.168.2.1 -p tcp --dport 2022 -j DNAT --to-destination 192.168.1.10:22
实验分析:
实验一中当主机C的网关没有设置为防火墙B的ens38网口的IP 192.168.1.1 ,同时在防火墙B上也未配置SNAT时。当数据包从主机A到达B时,首先匹配iptables的规则链PREROUTING,匹配规则后,将数据包转发给主机C的22端口,主机C收到的数据包源IP/源端口为主机A的IP和端口(如图1-3所示),因为主机A的IP是位于园区网络外部的地址,对主机C而言,即无网关也没有默认出口路由,主机C不知道将回复主机A的数据包发往何处,故主机C将丢弃数据包,导致主机A无法获得来自主机C的响应包,从而无法建立连接。
此时如果按照实验三的要求,将主机C的网关配置为防火墙B的ens38网口地址(192.168.1.1),且不配置SNAT。那么主机C将回复主机A的响应数据包发给自己的网关,由网关进行下一步转发。当响应包到达网关B,其知晓到达主机A的路径,然后按照路由转发流程将响应包转发给A,从而让主机A和主机C之间建立正常链接。
如果按照实验二的要求,主机C仍不配置网关,但在防火墙B上配置SNAT。那么主机C收到的数据包源IP为与主机B直连网卡的IP(192.168.1.1),源端口不变(如图2-3所示)。
什么时候源IP被修改了呢?从上面实验可知,当在防火墙上配置了SNAT后,数据包在到达B匹配了POSTROUTING规则链后,源IP便被修改了。因为到达主机C的数据包的源IP为同子网下主机B的地址,所以即便此时主机C未配置网关,主机C仍然知道如何将响应数据包发送出去(注:同子网主机通信是二层通信)
总结:
1.如果主机C的网关设置的是防火墙B的ens38接口ip192.168.1.1,就不需要加SNAT,因为主机C的回包必然会从防火墙经过,从而完成整个数据传输过程。
2.如果主机C的网关不是防火墙的IP 192.168.1.1 ,那么就需要在防火墙B上加上SNAT。
千知博客