Linux系统之iptables应用SNAT与DNAT

本文详细介绍了SNAT和DNAT的概念、工作原理以及在Linux环境下的配置方法。通过实验展示了如何开启SNAT和DNAT,包括固定和动态公网IP地址的转换,并提供了iptables规则的配置示例。此外,还探讨了SNAT和DNAT的区别,并介绍了iptables规则的备份与还原操作。

目录

SNAT

一.SNAT的原理介绍

1.应用环境

2.SNAT原理

3.SNAT转换前提条件

二.开启SNAT

1.临时打开

2.永久打开

三.SNAT的转换

1.固定的公网IP地址

2.非固定的公网IP地址(共享动态IP地址)

四.SNAT实验

1.实验环境准备

2.配置web服务器(192.168.100.100)

3.配置网关服务器(192.168.100.101、12.0.0.1)

4.配置win10客户端(12.0.0.10)

5.web服务器网络测试

6.Win10客户端的网络测试

7.网关服务器开启SNAT的命令

8.使用win10客户端来访问web服务器的apache网站 

9.配置网关服务器的iptables规则

10.清除记录再次使用Win10客户机进行访问web服务器 

DNAT

一.DNAT的原理介绍

1.应用环境

2.DNAT原理

3.DNAT转换前提条件

 二.DNAT的转换

1.发布内网的Web服务

2.发布时修改目标端口

三.DNAT实验

1.实验环境准备

2.配置网关服务器(192.168.192.110、12.0.0.254)

3.配置web服务器(192.168.192.100)

4.配置win10客户端(12.0.0.200)

5.网关服务器开启SNAT

6.外网客户端访问内网服务端

7.配置网关服务器的iptables规则

8.除记录再次使用Win10客户机进行访问web服务器 

四.SNAT和DNAT的区别

五.iptables规则的备份与还原

1.备份

2.还原

3.设置规则

六.tcpdump:Linux抓包


SNAT

一.SNAT的原理介绍

1.应用环境

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

2.SNAT原理

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

数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP

当响应的数据包从公网发送到内网时,会把数据包的目的IP由公网IP转换为私网IP

3.SNAT转换前提条件

  • 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  • Linux网关开启IP路由转发
  • linxu系统本身是没有转发功能,只有路由发送数据

二.开启SNAT

1.临时打开

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

2.永久打开

vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1				#将此行写入配置文件

sysctl -P			                	#读取修改后的配置

三.SNAT的转换

1.固定的公网IP地址

#配置SNAT策略,实现snat功能,将所有192.168.100.0这个网段的ip的源ip改为10.0.0.1

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to 10.0.0.1
                                    可换成单独IP   出站外网网卡            外网IP


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或地址池

2.非固定的公网IP地址(共享动态IP地址)

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


iptables -t nat -A POSTROUTING -s 12.0.0.0/24 -d 192.168.100.0/24 -j MASQUERADE


一个IP地址做SNAT转换,一般可以让内网 100到200 台主机实现上网

四.SNAT实验

1.实验环境准备

web服务器IP地址:192.168.100.100(内网)

                                 关闭防火墙和selinux、开启http服务

网关服务器内网iIP地址:192.168.100.101

                  外网IP地址:12.0.0.1

                                         关闭防火墙和selinux、开启http服务

win10客户端IP地址:12.0.0.10

VMware的虚拟网络编辑器中默认nat1模式网段:192.168.100.0,nat2模式网段:12.0.0.0
 

注意查看真机的网段与虚拟机所设网段是否一致

2.配置web服务器(192.168.100.100)

第一步:设置网络连接模式为VMnet1

第二步: 开启虚拟机终端,配置网卡ens33如下

vim /etc/sysconfig/network-scrips/ifcfg-ens33
#修改网卡配置文件

第三步:关闭防火墙和selinux、安装并开启http服务 

yum install httpd -y          #安装httpd
systemctl stop firewalld      #关闭防火墙
setenforce 0                  #关闭selinux
systemctl start httpd         #开启httpd
systemctl status httpd        #查看状态

3.配置网关服务器(192.168.100.101、12.0.0.1)

第一步:设置网络连接模式为VMnet1与2

第二步: 开启虚拟机终端,配置网卡ens33并复制修改ens36

使用ifconfig命令查看新加网卡为ens36或ens37等

vim /etc/sysconfig/network-scrips/ifcfg-ens33
cd /etc/sysconfig/network-scrips
cp ifcfg-ens33 ifcfg-ens36
vim /etc/sysconfig/network-scrips/ifcfg-ens36
systemctl restart network
ifconfig

 

第三步:关闭防火墙和selinux、安装并开启http服务  

yum install httpd -y          #安装httpd
systemctl stop firewalld      #关闭防火墙
setenforce 0                  #关闭selinux
systemctl start httpd         #开启httpd
systemctl status httpd        #查看状态

 

4.配置win10客户端(12.0.0.10)

第一步:设置网络连接模式为VMnet2

第二步:配置iIP地址和网关为下图所示 

5.web服务器网络测试

6.Win10客户端的网络测试

7.网关服务器开启SNAT的命令

vim /etc/sysctl.conf
添加内容:
net.ipv4.ip_forward = 1

可以使用sysctl -p读取修改后的配置

8.使用win10客户端来访问web服务器的apache网站 

查看web服务器的访问日志,显示访问的ip为win10客户机的ip

tail /var/log/httpd/access_log

9.配置网关服务器的iptables规则

第一步:查看网关服务器的iptables规则并清除

iptables -nL			#查看规则
iptables -nL -t nat		#查看规则
iptables -F				#清除iptables的规则
iptables -F -t nat		#清除iptables的规则

第二步:添加 SNAT转换∶固定的公网IP地址 

iptables -t nat -A POSTROUTING -s 12.0.0.0/24 -o ens33 -j SNAT --to-source 192.168.100.101

10.清除记录再次使用Win10客户机进行访问web服务器 

 第一步:清除浏览器缓存数据

第二步:再次使用win10客户端来访问web服务器的apache网站

第三步:查看web服务器的访问日志,可以看到现在显示的访问ip为网关地址的ip,是我使用iptables配置的ip 

tail /var/log/httpd/access_log

从  原外网客户机IP地址 变为  网关服务器内网网关地址

DNAT

一.DNAT的原理介绍

1.应用环境

在Internet中发布位于局域网内的服务器

2.DNAT原理

  • 目标地址转换
  • 修改数据包的目标地址

3.DNAT转换前提条件

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
  • Linux网关开启IP路由转发
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
sysct1 -p

 二.DNAT的转换

1.发布内网的Web服务

#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80 -j DNAT --to 192.168.80.11
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80-j DNAT --to-destination 192.168.80.11
							 入站|外网网卡 | 外网ip											内网服务器ip

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80-j DNAT --to 192.168.80.11-192.168.80.20

2.发布时修改目标端口

#发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 250-jDNAT --to 192.168.100.102:22

三.DNAT实验

1.实验环境准备

web服务器IP地址:192.168.192.100(内网)

                                 关闭防火墙和selinux、开启http服务

网关服务器内网iIP地址:192.168.192.110

                  外网IP地址:12.0.0.254

                                         关闭防火墙和selinux、开启http服务

win10客户端IP地址:12.0.0.200

VMware的虚拟网络编辑器中默认nat1模式网段:192.168.192.0,nat2模式网段:12.0.0.0

2.配置网关服务器(192.168.192.110、12.0.0.254)

第一步:设置网络连接模式为VMnet1与2

第二步: 开启虚拟机终端,配置网卡ens33并复制修改ens36

使用ifconfig命令查看新加网卡为ens36或ens37等

vim /etc/sysconfig/network-scrips/ifcfg-ens33
cd /etc/sysconfig/network-scrips
cp ifcfg-ens33 ifcfg-ens36
vim /etc/sysconfig/network-scrips/ifcfg-ens36
systemctl restart network
ifconfig

第三步:关闭防火墙和selinux、安装并开启http服务  

yum install httpd -y          #安装httpd
systemctl stop firewalld      #关闭防火墙
setenforce 0                  #关闭selinux
systemctl start httpd         #开启httpd
systemctl status httpd        #查看状态

3.配置web服务器(192.168.192.100)

第一步:设置网络连接模式为VMnet1

第二步:开启虚拟机终端,配置网卡ens33如下

vim /etc/sysconfig/network-scrips/ifcfg-ens33
#修改网卡配置文件

第三步:关闭防火墙和selinux、安装并开启http服务  

yum install httpd -y          #安装httpd
systemctl stop firewalld      #关闭防火墙
setenforce 0                  #关闭selinux
systemctl start httpd         #开启httpd
systemctl status httpd        #查看状态

4.配置win10客户端(12.0.0.200)

第一步:设置网络连接模式为VMnet2

第二步:配置iIP地址和网关为下图所示 

5.网关服务器开启SNAT

vim /etc/sysctl.conf
添加内容:
net.ipv4.ip_forward = 1
 
sysctl -p
#验证

6.外网客户端访问内网服务端

第一步:清除浏览器缓存数据

第二步:使用win10客户端来访问web服务器的apache网站

第三步:查看web服务器的访问日志,显示访问的ip为win10客户机的ip

7.配置网关服务器的iptables规则

第一步:查看网关服务器的iptables规则并清除

iptables -nL			#查看规则
iptables -nL -t nat		#查看规则
iptables -F				#清除iptables的规则
iptables -F -t nat		#清除iptables的规则

第二步:添加SNAT与DNAT规则

iptables -t nat -A POSTROUTING -s 192.168.192.0/24 -o ens36 -j SNAT --to 12.0.0.254
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 8080 -j DNAT --to 192.168.192.100:80
iptables -nL -t nat

8.清除记录再次使用Win10客户机进行访问web服务器 

第一步:清除浏览器缓存数据

第二步:再次使用win10客户端来访问web服务器的apache网站,输入网关地址即可

四.SNAT和DNAT的区别

从定义上讲,SNAT是原地址转换,DNAT是目标地址转换。区分这两个功能可以简单的由服务的发起者是谁来区分,内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有ip。

五.iptables规则的备份与还原

1.备份

默认备份文件/etc/sysconfig/iptables

iptables-save > /opt/ibf.txt
#重定向输入到opt目录下新文件ibf.txt中

2.还原

iptables-restore < /opt/ibf.txt
#快速还原

可以使用
iptables -nL
#查看最初状态
iptables -F 
#删除模拟丢失规则
iptables -nL
#查看是否为空

iptables-restore < /opt/ibf.txt
#快速还原
iptables -nL
#查看是否还原

3.设置规则

#重定向输入到默认配置文件当中
iptables-save >/etc/sysconfig/iptables      
 
#重启防火墙
systemctl stop iptables
systemctl start iptables
 
#查看规则
iptables -nL
iptables -nL -t nat

六.tcpdump:Linux抓包

tcpdump tcp-i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
  • tcp∶ ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
  • -i ens33 ∶只抓经过接口ens33的包
  • -t ∶不显示时间戳
  • -s 0 ∶ 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
  • -c 100 ∶只抓取100个数据包
  • dst port ! 22 ∶不抓取目标端口是22的数据包
  • src net 192.168.1.0/24 ∶数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机
  • -w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析
     
<think>好的,我现在需要给用户介绍一下iptables中的SNATDNAT。首先,我得回忆一下自己对这两个概念的理解,确保没有混淆。SNAT是源地址转换,DNAT是目的地址转换,对吗?对的,我记得SNAT主要用于当内部网络的主机访问外部网络时,修改源IP地址,通常是用来共享一个公网IP出口。而DNAT则是当外部网络的主机访问某个公网IP的特定端口时,将其转发到内部网络的某个服务器上,比如端口映射。 接下来,我需要考虑用户可能的背景。用户可能对iptables有一定了解,但需要明确区分这两个NAT类型,或者是在配置网络时遇到了问题。需要从基本概念入手,解释两者的用途和典型应用场景,同时给出实际例子,这样用户更容易理解。 需要确认SNATDNATiptables中的具体应用链。SNAT一般用在POSTROUTING链,而DNAT用在PREROUTING链。这是因为SNAT是在路由之后修改源地址,而DNAT是在路由之前修改目标地址,确保数据包能正确路由到内部主机。 同时,应该提到MASQUERADE,这是SNAT的一种特殊形式,适用于动态IP的情况,比如拨号上网。而DNAT常用于将外部请求转发到内部的Web服务器或SSH服务器。 还要注意语法格式,比如SNAT的--to-source和DNAT的--to-destination,以及相应的端口映射示例。比如,将外部的80端口请求转发到内网服务器的8080端口。 可能会遗漏一些细节,比如conntrack模块的作用,或者需要开启IP转发功能(net.ipv4.ip_forward=1)。这些虽然不是核心概念,但对于实际配置成功很重要,应该提到。 用户可能想知道什么时候用SNAT,什么时候用DNAT,所以需要明确两者的区别:SNAT改的是发出数据包的源地址,DNAT改的是接收数据包的目标地址。典型的SNAT用例是让多个内网设备通过一个公网IP上网,而DNAT用于从外部访问内网服务。 最后,结构要清晰,分点解释,给出示例命令,并总结两者的区别和常见应用场景,这样用户能快速抓住重点。</think>**iptablesSNATDNAT详解** **1. 核心概念对比** - **SNAT(Source NAT)** - 作用:修改数据包源地址 - 典型场景:内网设备共享公网IP访问互联网 - 生效阶段:`POSTROUTING`链(路由决策之后) - 特点:需指定固定IP(如 `--to-source 202.96.128.5`) - **DNAT(Destination NAT)** - 作用:修改数据包目标地址 - 典型场景:公网访问内网服务器 - 生效阶段:`PREROUTING`链(路由决策之前) - 特点:支持端口映射(如 `--to-destination 192.168.1.10:8080`) **2. 配置示例** ```bash # SNAT示例(静态IP环境) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 202.96.128.5 # SNAT动态IP场景(ADSL拨号) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE # DNAT端口映射(外部80转内部8080) iptables -t nat -A PREROUTING -d 202.96.128.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080 ``` **3. 关键实现原理** - **连接跟踪机制**:依赖`conntrack`模块记录NAT前后的连接状态 - **双向地址转换**:自动处理响应数据包的逆向转换 - **路由决策时机**: - DNAT在路由前修改目标地址,影响后续路由路径 - SNAT在路由后修改源地址,保证出站路径正确 **4. 典型应用场景** - SNAT常见用途: - 企业内网共享上网 - 多服务器负载均衡出口 - 隐藏真实客户端IP - DNAT常见用途: - 家庭宽带映射游戏服务器 - 云服务器端口转发 - 反向代理后端服务 **5. 必要系统配置** ```bash # 启用IP转发(永久生效需修改/etc/sysctl.conf) echo 1 > /proc/sys/net/ipv4/ip_forward ``` **6. 流量路径示意图** ``` 外部访问DNAT流程: 互联网 → 防火墙PREROUTING(DNAT) → 路由决策 → 内网服务器 内部访问SNAT流程: 内网主机 → 路由决策 → 防火墙POSTROUTING(SNAT) → 互联网 ``` **7. 诊断命令** ```bash # 查看NAT表规则 iptables -t nat -nvL --line-numbers # 监控NAT连接状态 conntrack -E ``` **注意**:实际部署时需同步考虑安全策略,建议
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小啄学习日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值