防火墙 iptables(二)--------------------SNAT与DNAT

一、SNAT

①SNAT 应用环境:

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

②SNAT原理:

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

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

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

③SNAT转换前提条件

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

linxu系统本身是没有转发功能 只有路由发送数据

④实验

实验目的:

公司内有2台机器,但是只有一个公网ip,利用SNAT技术实现2台私网地址都可以访问公网。

实验拓朴图:

内网主机通过网关服务器的SNAT转换实现访问外网

外网主机访问网关服务器地址,通过DNAT实现访问内网服务器

SNAT实验环境准备

三台服务器:PC1(centos7-1)客户端、PC2网关服务器(centos7-2)、PC3服务端(centos7-3)

硬件要求:PC1和PC3均只需一块网卡、PC2需要2块网卡

实验步骤:

首先关闭三台机器的防火墙和防护
[root@centos1 ~]#systemctl stop firewalld
[root@centos1 ~]#setenforce 0[root@centos2 ~]#systemctl stop firewalld
[root@centos2 ~]#setenforce 0[root@centos3 ~]#systemctl stop firewalld
[root@centos3 ~]#setenforce 0
①网关服务器:
第一步:先设置网关服务器的ip地址,两张网卡,ens33设置为内网,ens37设置为外网
先添加网卡

[root@centos2 ~]#cd /etc/sysconfig/network-scripts/
[root@centos2 network-scripts]#ls
ifcfg-ens33  ifdown-ipv6    ifdown-TeamPort  ifup-ippp   ifup-routes       network-functions
ifcfg-lo     ifdown-isdn    ifdown-tunnel    ifup-ipv6   ifup-sit          network-functions-ipv6
ifdown       ifdown-post    ifup             ifup-isdn   ifup-Team
ifdown-bnep  ifdown-ppp     ifup-aliases     ifup-plip   ifup-TeamPort
ifdown-eth   ifdown-routes  ifup-bnep        ifup-plusb  ifup-tunnel
ifdown-ib    ifdown-sit     ifup-eth         ifup-post   ifup-wireless
ifdown-ippp  ifdown-Team    ifup-ib          ifup-ppp    init.ipv6-global
[root@centos2 network-scripts]#cp ifcfg-ens33 ifcfg-ens37
[root@centos2 network-scripts]#vim ifcfg-ens37
[root@centos2 network-scripts]#vim ifcfg-ens37
[root@centos2 network-scripts]#systemctl restart network
[root@centos2 network-scripts]#ip a

第二步:开启路由转发功能

[root@centos2 network-scripts]#sysctl -a|grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens37.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
[root@centos2 network-scripts]#vim /etc/sysctl.conf
[root@centos2 network-scripts]#sysctl -p
net.ipv4.ip_forward = 1
[root@centos2 network-scripts]#sysctl -a|grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens37.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
②内网客户端(192.168.246.7)
[root@centos1 ~]#rpm -q httpd
未安装软件包 httpd 
[root@centos1 ~]#yum install httpd -y
第一步:修改内网服务器的网关ip地址,为网关服务器的ip地址
[root@centos1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centos1 ~]#systemctl restart network
第二步:开启本机httpd服务,并写上一个测试网页index.html内容为haha
[root@centos1 ~]#systemctl start httpd
[root@centos1 ~]#echo "haha" > /var/www/html/index.html
[root@centos1 ~]#

③外网服务器:
[root@centos1 ~]#rpm -q httpd
未安装软件包 httpd 
[root@centos1 ~]#yum install httpd -y
第一步:先修改外网服务器的ip地址和网关,都应该是12段的,ip地址是12.0.0.100,网关地址是12.0.0.1
[root@centos3 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centos3 ~]#systemctl restart network

会断,由于是不同网段

第二步:开启httpd服务
[root@centos3 ~]#systemctl start httpd
[root@centos3 ~]#echo "nihao" > /var/www/html/index.html
[root@centos3 ~]#tail -f /var/log/httpd/access_log 

检测PC1(centos1)、PC2(centos2)、PC3(centos3)三台机器之间是否互通(使用虚拟机做实验默认是互通的,是由于处在同一环境中,生产环境内网和外网没有SNAT的情况下是不通的)

进入xhell:

再进入虚拟机:

在PC1上curl 服务端ip,然后在服务端实时查看/var/log/httpd/access_log日志。可查看到源ip为PC1的ip,所以是未经过NAT的,生产环境中不可能直接curl通。

④再次进入网关服务器:
前两步骤参照上文
第三步:设置iptables的转换规则
[root@centos2 ~]#iptables -t nat  -A POSTROUTING -s 192.168.246.0/24 -o ens37 -j SNAT --to 12.0.0.1##表示当内网192.168.246.0网段的主机访问外网的时候,网关服务器会通过SNAT转换源ip地址为网关服务器的公网ip12.0.0.1
方法一:已知公网地址

验证:

在xhell中用内网客户机(192.168.246.7)去访问外网ip地址

再去虚拟机外网服务器查看:centos3

总结

内网主机通过网关服务器的SNAT转换实现访问外网 

不经过nat的地址为PC1(centos1)自己的地址,使用虚拟机环境才会出现这种情况,市场环境是不通的。

经过nat之后的地址是公司的公网ip地址,由网关服务器iptables规则SNAT实现

方法二:未知公网地址

验证:

二、DNAT

①DNAT应用环境:

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

②DNAT原理:

目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。

③DNAT转换前提条件:

DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录                                                                                           3. Linux网关开启IP路由转发

④实验:

实验拓朴图:

外网访问内网访问12.0.0.1 相当与访问192.168.246.7

实验步骤:

前边步骤参照SNAT前3步
④再次进入网关服务器:

设置iptables的转换规则

[root@centos2 ~]#iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.246.7
[root@centos2 ~]#iptables -t nat  -vnL

进入外网服务器进行直接访问,会被拒绝 , 接下来需要设置防火墙规则(如上图)

进入内网服务器查看验证;

总结

内网主机通过网关服务器的SNAT转换实现访问外网

外网主机访问网关服务器地址,通过DNAT实现访问内网服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

下一代模型:Gemini 1.5,正如它的名字一样闪亮登场

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

[uniapp的页面传参]详细讲解uniapp中页面传参的传递方式和接受方式 使用案例 代码注释

目录 一、传递方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 二、接受方式1. URL传参2. Storage传参3. Vuex传参4.api传参eventChannel 三、使用案例四.提醒 在uniapp中,页面传参是非常常见的需求。本文将详细讲解uniapp中页面传参的传递方式和接受…

003 - Hugo, 创建文章

003 - Hugo, 创建文章创建文章单个md文件md文件图片总结 文章内容Front Matter文章目录数学公式的显示KaTeXMathJax 图片 003 - Hugo, 创建文章 创建文章 单个md文件 创建文章的方式: 手动创建:在post目录下,手动创建md文件。命令创建&am…

QObject 的拷贝构造和赋值操作

QObject中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域。因此所有继承自QObject的类都使用这个宏声明了他们的拷贝构造函数和赋值操作符为私有。 …

Java集合篇之深入解析LinkedList

写在开头 作为ArrayList的同门师兄弟,LinkedList的师门地位逊色不少,除了在做算法题的时候我们会用到它之外,在实际的开发工作中我们极少使用它,就连它的创造者都说:“I wrote it,and I never use it”&am…

[java基础揉碎]二维数组

目录 什么是二维数组: 二维数组在内存中的布局: 动态初始化: 静态初始化: 杨辉三角: 使用细节和注意事项: 什么是二维数组: 1.从定义形式上看 int[][] 2.可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数…

OpenCV识别人脸案例实战

使用级联函数 基本流程 函数介绍 在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为: objects cv2.CascadeClassifier.detectMul…

Spring源码笔记之SpringIOC--(1)从XML文件到Bean的描述对象BeanDefinition

从XML文件到Bean的描述对象BeanDefinition 最开始学习spring的入门实践是&#xff0c;编写一个xml文件&#xff0c;然后利用spring读取xml文件中配置的bean。 编写一个xml配置文件default.xml <?xml version"1.0" encoding"UTF-8"?> <beans x…

问题:由于环境因素或人为因素干扰,致使土地生态系统的结构和功能失调,引起() #学习方法#经验分享

问题&#xff1a;由于环境因素或人为因素干扰&#xff0c;致使土地生态系统的结构和功能失调&#xff0c;引起&#xff08;) A&#xff0e;土地退化 B&#xff0e;土壤污染 C&#xff0e;生态平衡失调 D&#xff0e;土地沙化 参考答案如图所示

JavaSE-03笔记【继承~super】

文章目录 1. 继承1.1 继承概述&#xff08;理解&#xff09;1.2 如何继承&#xff08;掌握&#xff09;1.2.1 继承的语法格式1.2.2 具体举例 1.3 继承的相关特性&#xff08;掌握&#xff09;1.4 对继承自Object类的方法的测试&#xff08;理解&#xff09;1.5 难点解惑1.5.1 掌…

element ui 添加自定义方法

今天在修改 el-table 源码过程中遇到一个头大的问题&#xff0c;原本修改编译后&#xff0c;将 element的子目录lib下的文件复制到项目的响应目录里就可以了&#xff0c;但是&#xff0c;这次不知为何&#xff0c;编译老是出问题&#xff0c;实在没有办法&#xff0c;我就直接修…

JavaScript 分号踩坑

今天踩了一个JavaScript分号的坑 我想使用JavaScript的解构赋值语法来实现交换两个变量的值而不必引入第三个变量&#xff0c;代码如下所示&#xff1a; let a 100 let b 200 [a,b] [b,a] console.log(a) console.log(b)因为习惯了不加分号&#xff0c;所以没加分号产生报错…

leetcode hot 100最小花费爬楼梯

本题和之前的爬楼梯类似&#xff0c;但是需要考虑到花费的问题&#xff01;**注意&#xff0c;只有在爬的时候&#xff0c;才花费体力&#xff01;**那么&#xff0c;我们还是按照动态规划的五部曲来思考。 首先我们要确定dp数组的含义&#xff0c;那么就是我们爬到第i层所花费…

代码随想录 Leetcode134. 加油站

题目&#xff1a; 代码(首刷看解析 2024年2月15日&#xff09;&#xff1a; class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curSum 0;int sum 0;int startIndex 0;for (int i 0; i < gas.size(); i)…

SCI文章复现 | GEO文章套路,数据下载和批次效应处理

原文链接&#xff1a; SCI文章复现 | GEO文章套路&#xff0c;数据下载和批次效应处理https://mp.weixin.qq.com/s/KBA67EJ7cCK5NDTUzrwJ2Q 一、前言 这是2024年春节后的第一个推送教程&#xff0c;我们也给大家赠送一个福利。将前期的付费教程免费推送给大家。其实&#xff…

【头歌·计组·自己动手画CPU】四、控制器设计(理论版) 【计算机硬件系统设计】

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 文章目录 一、课程设计目的二、课程设计内容三、课程设计步骤四、课程设计总结 一、课程设计目的 掌握 CPU …

ChatGPT绘图指南:DALL.E3玩法大全(二)

在前一篇文章中&#xff0c;我们介绍了什么是 DALL.E3 模型&#xff0c; DALL.E3 有什么优势&#xff0c;使用DALL.E3 的两种方法&#xff0c;以及DALL.E3 绘图的基本规则&#xff0c; 感兴趣的朋友请前往查看: ChatGPT绘图指南&#xff1a;DALL.E3玩法大全(一). 接下来&#…

什么是Java中的非阻塞I/O,你能提供一个例子吗?

什么是Java中的非阻塞I/O&#xff0c;你能提供一个例子吗&#xff1f; 在Java中&#xff0c;非阻塞I/O是一种I/O模型&#xff0c;它允许程序在等待数据就绪时继续执行其他任务&#xff0c;而不必一直阻塞等待数据的到来。非阻塞I/O通常与多路复用技术&#xff08;如Java NIO的…

[UI5 常用控件] 09.IconTabBar,IconTabHeader,TabContainer

文章目录 前言1. IconTabBar1.1 简介1.2 基本结构1.3 用法1.3.1 颜色&#xff0c;拖放&#xff0c;溢出1.3.2 Icons Only , Inner Contents1.3.3 showAll,Count,key,IconTabSeparator 1.3.4 Only Text1.3.5 headerMode-Inline1.3.6 design,IconTabSeparator-icon1.3.7 DensityM…

【AIGC】Stable Diffusion插件安装

Stable Diffusion 的插件安装通常需要遵循以下步骤&#xff1a; 第一、查找插件&#xff0c;您需要确定您想要安装的 Stable Diffusion 插件。您可以从 Stable Diffusion 的官方网站或社区论坛上找到各种各样的插件&#xff0c;这些插件可能提供了额外的功能、模型或工具。 第…