iptables之SNAT与DNAT
文章目录前言一、SNAT策略及应用1.1SNAT策略概述1.2开启SNAT的命令1.2.1临时打开1.2.2永久打开1.3SNAT转换1:固定的公网IP地址1.3.1命令名词解释1.3.2基本语法1.4SNAT转换2:非固定的公网IP地址(共享动态IP地址)二、SNAT实验2.1给两台服务器安装httpd以及iptables服务并启动2.2打开虚拟网络编辑器,查看VMnet1和VMnet3的网段。
前言
Linux 防火墙在很多的时候承担着连接企业内、外网的重任,除了提供数据包过滤以外,还提供一些基本的网关应用。下面我们将了解防火墙中的SNAT 和DNAT策略。
一、SNAT策略及应用
1.1SNAT策略概述
SNAT 应用环境
局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由
SNAT原理
源地址转换(根据指定的条件修改数据包的源IP地址,通常被叫做源映射。)
修改数据包的源地址
客户端往网关服务器发数据包,通过网关服务器不进行转发,发送至需要访问的服务器,访问后,数据包回来的时候还是私网IP,原来的源IP作为目的IP进行传送,私网IP作为目的地址在互联网中会被丢弃,所以我们需要将IP进行转换,这样就能以公网IP的身份返回
SNAT转换前提条件
局域网各主机已正确设置IP地址、子网掩码
局域网各主机已正确设置默认网关地址
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)