Linux系统之iptables应用SNAT与DNAT
目录
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.1iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to 10.0.0.1可换成单独IP 出站外网网卡 外网IPiptables -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 MASQUERADEiptables -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 内网服务器ipiptables -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 = 1sysctl -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)分析
相关文章:
Linux系统之iptables应用SNAT与DNAT
目录 SNAT 一.SNAT的原理介绍 1.应用环境 2.SNAT原理 3.SNAT转换前提条件 二.开启SNAT 1.临时打开 2.永久打开 三.SNAT的转换 1.固定的公网IP地址 2.非固定的公网IP地址(共享动态IP地址) 四.SNAT实验 1.实验环境准备 2.配置web服务器(192.168.100.100…...
2023美赛ABCDEF思路汇总
注:以下每个题思路仅是个人所想所做,不代表他人。由于时间仓促完成这么多,难免有不足之处,还请谅解。 文章目录A题第一大问第二大问B题第一问第二问第三问C题第一问第二问第三问第四问D题第一问第二问第三问第四问第五问E题第一问…...
Damask和abaqus晶体塑性联合仿真培训通知
一 软件介绍 DAMASK 是一个统一的多物理晶体塑性模拟包。连续体力学边值问题的求解需要连接每个材料点的变形和应力的本构响应,该问题在 DAMASK 中基于晶体可塑性使用各种本构模型和均质化方法能够被有效解决。除此之外,孤立地处理力学已不足以研究新兴的先进高强度…...
用javascript分类刷leetcode17.栈(图文视频讲解)
目录 Stack的特点:先进后出(FILO) 使用场景:十进制转2进制 函数调用堆栈 js里没有栈,但是可以用数组模拟 42/2 42%20 21/2 21%21 10/2 10%20 5/2 5%21 2/2 2%20 1/2 1%21 stack: [0,1,0,1,0,1] res: 1 0 1 …...
转换大小写与完成字符串反转
问题 编写一个程序,实现字符串的大小写转换并倒序输出,如输入为“HelloWord”,输出为“DROwOLLEH”。 方法 需要掌握char与int的转换,需要将helloord大写输出和W小写输出,不能直接使用toUpperCase方法。因此可以使用ch…...
大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——InputFormat数据输入
3.1.1切片与MapTask并行度决定机制 1、问题引出 MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度。 思考:1G的数据,启动8个MapTask,可以提高集群的并发处理能力。那么1K的数据,也启动8个M…...
【Opencv 系列】 第4章 直方图
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1、直方图的定义、意义、特征2、直方图:2.1 灰度直方图2.2 彩色直方图前言 提示:以下是本篇文章正文内容,下面案例可供参考 …...
C#反射原理
一、前言反射(Reflection)的内容在博客中已经写了一篇,什么是反射,反射的使用,反射优缺点总结;在面试中突然被问道反射的原理,按照理解反射就是在Reflection命名空间和对象的Type对象获取类的方…...
python+vue微信小程序的线上服装店系统
服装行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,服装行业也在发生着变化,单就服饰这一方面,利用手机购物正在逐步进入人们的生活。传统的购物方式,不仅会耗费大量的人力、时间,有时候还会出错。小程序系统伴随智能手机为我们提供了新的方向。手机线上服装…...
众德全自动批量剪辑工具,批量去重伪原创视频,全自动合成探店带货等视频
众德全自动批量剪辑工具已连续更新两年,服务了大大小小的自媒体公司工作室共200多个,成就了几百个草根创业者,实现月入10万,自从创办众德传媒之前,我一直坚信自媒体才是年轻草根创业者的出路,不需要技术门槛…...
【项目精选】基于网络爬虫技术的网络新闻分析(论文+源码+视频)
基于网络爬虫技术的网络新闻分析主要用于网络数据爬取。本系统结构如下: (1)网络爬虫模块。 (2)中文分词模块。 (3)中3文相似度判定模块。 (4)数据结构化存储模块。 &…...
华为OD机试 - 任务混部(JS)
任务混部 题目 公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务混部问题:有taskNum项任务,每个任务有开始时间(startTime),结束时间(endTime),并行度(parallelism)三个属性,并行度是指这个任务运行时将会占用的服务…...
Matlab搭建AlexNet实现手写数字识别
Matlab搭建AlexNet实现手写数字识别 个人博客地址 文章目录Matlab搭建AlexNet实现手写数字识别环境内容步骤准备MNIST数据集数据预处理定义网络模型定义训练超参数网络训练和预测代码下载环境 Matlab 2020aWindows10 内容 使用Matlab对MNIST数据集进行预处理,搭建…...
比较全面的HTTP和TCP网络传输的单工、全双工和半双工
文章目录单工、全双工、半双工1. 单工2. 半双工3. 全双工HTTP协议的工作模式TCP协议的工作模式本文参考: 图解网络传输单工、半双工、全双工 - 知乎 (zhihu.com) 问:HTTP是单工的还是双工的还是半双工的 - 简书 (jianshu.com) 关于TCP全双工模式的解释_忙…...
CSS Houdini
前言 最近看了几篇文章,是关于 CSS Houdini 的。作为一个前端搬砖的还真不知道这玩意,虽然不知道的东西挺多的,但是这玩意有点高大上啊。 Houdini 是一组底层 API,它们公开了 CSS 引擎的各个部分,从而使开发人员能够通…...
C++引用
这里写目录标题引用引用的基本使用引用做函数参数引用作为函数返回值引用的本质常量引用引用与指针的区别&的三种作用引用 引用的基本使用 作用: 给变量起别名 语法: 数据类型 &别名 原名 引用的本质是给变量起别名,因此࿰…...
YOLOv6-目标检测论文解读
文章目录摘要问题算法网络设计BackboneNeckHead标签分配SimOTA(YOLOX提出):TAL(Task alignment learning,TOOD提出)损失函数分类损失框回归损失目标损失行业有用改进自蒸馏图像灰度边界填充量化及部署实验消…...
【factoryio】使用SCL编写 <机械手控制> 程序
使用虚拟工厂软件和博图联合仿真来编写【scl】机械手控制程序 文章目录 目录 文章目录 前言 二、程序编写 1.机械手运行部分 2.启动停止部分 3.急停复位部分 三、完整代码 总结 前言 在前面我们一起写过了许多案例控制的编写,在这一章我们一起来编写一下一个…...
QT学习记录散件
fromLocal8Bit() qt中fromLocal8Bit()函数可以设置编码。 因为QT默认的编码是unicode,不能显示中文的 而windows默认使用(GBK/GB2312/GB18030) 所以使用fromLocal8Bit()函数,可以实现从本地字符集GB到Unicode的转换,从…...
[SSD科普之1] PCIE接口详解及应用模式
PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。一、PCI-E x1/x4/x8/x16插槽模式PCI-E有 x1/…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
