iptables之SNAT与DNAT


前言

Linux 防火墙在很多的时候承担着连接企业内、外网的重任,除了提供数据包过滤以外,还提供一些基本的网关应用。下面我们将了解防火墙中的SNAT 和DNAT策略。

一、SNAT策略及应用

1.1SNAT策略概述

SNAT 应用环境

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由

SNAT原理

源地址转换(根据指定的条件修改数据包的源IP地址,通常被叫做源映射。)

修改数据包的源地址

客户端往网关服务器发数据包,通过网关服务器不进行转发,发送至需要访问的服务器,访问后,数据包回来的时候还是私网IP,原来的源IP作为目的IP进行传送,私网IP作为目的地址在互联网中会被丢弃,所以我们需要将IP进行转换,这样就能以公网IP的身份返回

SNAT转换前提条件

  1. 局域网各主机已正确设置IP地址、子网掩码
  2. 局域网各主机已正确设置默认网关地址
  3. Linux网关开启IP路由转发

1.2开启SNAT的命令

1.2.1临时打开

echo 1 >/proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip forward=1

1.2.2永久打开

vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1				#将此行写入配置文件
 
sysctl -P				#读取修改后的配置

1.3SNAT转换1:固定的公网IP地址

#配置SNAT策略,实现snat功能,将所有192.168.100.0这个网段的ip的源ip改为10.0.0.1
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to 10.0.0.1
                                                      可换成单独IP      出站外网网卡            外网IP
或
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
                                                            内网IP   出站外网网卡                    外网IP或地址池

在这里插入图片描述

1.3.1命令名词解释

iptables 的作用是为包过滤机制的实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理;为了更加方便的组织和管理防火墙规则,iptables采用了表和链的分层结构,所以它会对请求的数据包的包头数据进行分析,根据我们预先设定的规则进行匹配来决定是否可以进入主机;其中,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,在每个表容器内又包括不同的规则链,根据处理数据包的不同时机划分为五种链。
总结: 表里有链,链里有规则

1.3.2基本语法

 iptables     [-t 表名]     管理选项     [链名]    [匹配条件]   [-j控制类型]

其中:表名、链名用来指定iptables 命令操作的表和链,未指定表名时将默认使用filter 表
指定表:-t
四表中的nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口
**-A:**在指定链的末尾追加(–append)一条新的规则
五链中的POSTROUTING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网
五链中的PREROUTING:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上

通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
协议匹配:-p协议名
地址匹配:-s源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配:-i入站网卡、-o出站网卡
控制类型:-j
SNAT :修改数据包的源地址
DNAT :修改数据包的目的地址

1.4SNAT转换2:非固定的公网IP地址(共享动态IP地址)

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

MASQUERADE:伪装成一个非固定公网IP地址。

二、SNAT实验

首先准备一台web服务器和一台win10的机器还有一台SNAT服务器
在操作前一定要先安装好所需程序httpd、iptables

2.1给两台服务器安装httpd以及iptables服务并启动

请添加图片描述

2.2打开虚拟网络编辑器,查看VMnet1和VMnet3的网段。设置ens33的网段为192.168.100.0,ens37的网段为10.0.0.0

在这里插入图片描述

2.3打开虚拟机,点击虚拟机设置,添加一张网卡ens37,网络适配器改成自定义(VMnet1),网络适配器2改成(VMnet3)

在这里插入图片描述

2.4修改两张网卡信息并重启

2.4.1修改内网网卡

注释掉网关地址(因为他本身就是网关),注释掉DNS1,网卡名也为ens33
在这里插入图片描述

2.4.2修改外网网卡

因为ens37网卡配置是复制ens33的,所以要把uuid给删掉防止冲突在这里插入图片描述

2.4.3重启网卡查看是否设置成功(systemctl restart network)

在这里插入图片描述

2.5永久开启IP路由转发,开启SNAT

在etc/sysctl.conf中添加一条永久开启ip路由转发
在这里插入图片描述

在这里插入图片描述

第一台SNAT服务器准备工作结束

2.6 修改web服务器的网卡

在这里插入图片描述
在这里插入图片描述

2.7重启网卡

在这里插入图片描述

第二台web服务器准备工作结束

2.8网络适配器选择VMnet1,192.168.100.0

在这里插入图片描述

在这里插入图片描述

第三台window结束

2.9开始配置

在这里插入图片描述

2.10测试结果

在这里插入图片描述

三、DNAT验证

3.1DNAT概述

DNAT 应用环境
在Internet中发布位于局域网内的服务器

DNAT原理
修改数据包的目的地址

DNAT转换前提条件
局域网的服务器能够访问Internet

网关的外网地址有正确的DNS解析记录

Linux网关开启IP路由转发

3.2开启DNAT命令

打开DNAT

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

3.3DNAT转换

把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11

 
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.118
或者
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.118
 
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to 192.168.100.13-192.168.100.20

3.4临时修改目标端口

#发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22
 
#在外网环境中使用SSH测试
ssh -p 250 root@12.0.0.1
yum -y install net-tools 若没有 ifconfig 命令可提前使用 yum 进行安装
ifconfig ens33


 
注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回

3.5DNAT案例

1、修改win10网络配置
在这里插入图片描述
在这里插入图片描述
2、修改主机2的网卡并重启并设置vmnet
在这里插入图片描述
重启网卡
在这里插入图片描述
在这里插入图片描述

3.6设置DNAT转换

在这里插入图片描述

3.7验证

在这里插入图片描述

总结

PREROUTING: 位于 nat 表,用于修改目的地址(DNAT)(上一节说的是数据包作路由选择前应用此链中的规则 记住!所有的数据包进来的时侯都先由这个链处理)

POSTROUTING:位于 nat 表,用于修改源地址 (SNAT)(上一节说的是对数据包作路由选择后应用此链中的规则,所有的数据包出来的时侯都先由这个链处理)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞什么滚去学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值