防火墙中的SNAT 与DNAT

SNAT:让内网机器可以访问外网服务器

DNAT:让外网机器可以访问内网服务器

SNAT的原理

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

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

 切记:私网地址永远不会出现在公网地址上

 SNAT转换前提条件

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

效果图: 

模拟实验:7-1 表示网关

                 7-2表示内网服务器

                7-3表示外网服务器

 第一步,所有机器关闭防火墙,核心防护

 7-1网关配置

第一步,先添加网卡,因为有两个网卡 一个外网,一个内网

 ens36为外网网卡 ens33为内网网卡,vens33跟ens36都是网关 切换到网卡配置中,修改ens36网卡的配置内容

 随后,重启network服务,查看ens36虚拟网卡

 然后修改ens33 ,因为为网关,所以ip跟网关都设置成一样的

 

随后,开启路由转发的功能

配置文件的内容:

 7-2内网服务器配置

因为内网服务器跟网关连接,所以7-2的网关要设置成7-1内网的ip地址

随后,重启网关服务,查看网关

随后给网页写个内容

7-3外网服务器配置

 

 随后,重启 ,因为是不同网段,所以断开连接了 去虚拟机上面操作

随后,给外网页面写点东西

进入xshell,用7-2 内网去curl 7-3外网

可以看见互通,使用虚拟机做实验默认是互通的,在生产环境中内网跟外网没有SNAT是没办法互通的

随后,再进入虚拟机,查看外网的日志 可以看出有7-2内网服务器的ip地址

然后进入7-1网关服务器上,修改iptables的转换规则

ptables -t nat -A POSTROUTING -s 192.168.68.0/24 -o ens36 -j SNAT --to 12.0.0.1

验证,在xshell用内网去访问外网服务器,然后再去虚拟机上面查看日志

方法二:未知公网地址 MASQUERADE 伪装 当不知道公网地址的时候,可以使用此项

验证一下,在内网服务器去curl公网服务器

然后在虚拟机查看日志

 DNAT

DNAT应用环境:

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

②DNAT原理:

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

③DNAT转换前提条件:

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

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

配置网卡跟ip地址的路由跟上面步骤是一样的

要在7-1网关服务器上面设置iptables的转换规则

iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.68.4

随后,在虚拟机上面的外网服务器去curl一下12.0.0.1,curl12.0.0.1出现的是内网服务器的网页内容,表明去连外网网关,就等于访问内网服务器

然后查看内网的日志,DNAT改变的是目的地址,所以访问的ip地址不会改变

iptables -t nat  -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to  192.168.68.4
iptables -t nat:指定操作在NAT表上
-A PREROUTING:在PREROUTING链中追加一条新规则。数据包在进入本机并进行路由                                     决策之前,PREROUTING链上的规则会被执行
-i ens36:仅针对从名为ens36的网络接口进入的数据包应用此规则。
-d 12.0.0.1:匹配目标IP地址为12.0.0.1的数据包
-p tcp --dport 80:进一步限定仅当数据包是TCP协议且目标端口号为80时才进行转换
-j DNAT:执行DNAT动作,即改变数据包的目标IP地址
--to  192.168.68.4:将满足上述条件的数据包的目标IP地址更改为此特定IP地址(192.168.68.4)
#总结起来,这条规则的效果是:所有发往公网IP地址12.0.0.1且目标端口为80的TCP数据包,在到达本地主机并准备转发到内部网络之前,其目标IP地址都会被转换成192.168.68.4。这通常用于对外发布服务,使得外部用户可以通过公网IP访问位于私有网络内的服务器提供的服务。

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

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

相关文章

JAVA 100道题目(2)

2.创建一个程序,接受用户输入的字符串并检查它是否为回文。 以下是一个简单的Java程序,它接受用户输入的字符串并检查该字符串是否为回文(正读和反读都相同的字符串): java复制代码 import java.util.Scanner; public…

with open----bug

with open(os.path.join(output_path, "closed_rel_paths.jsonl"), "w") as f: # 打开文件,准备写入闭合关系路径for head in tqdm(rdict.rel2idx): # 遍历头部关系paths set() # 初始化路径集合if head "None" or "inv_&q…

【JetsonNano】onnxruntime-gpu 环境编译和安装,支持 Python 和 C++ 开发

1. 设备 2. 环境 sudo apt-get install protobuf-compiler libprotoc-devexport PATH/usr/local/cuda/bin:${PATH} export CUDA_PATH/usr/local/cuda export cuDNN_PATH/usr/lib/aarch64-linux-gnu export CMAKE_ARGS"-DONNX_CUSTOM_PROTOC_EXECUTABLE/usr/bin/protoc&qu…

在Java中如何将十进制转换为二进制,八进制,十六进制以及它们之间的互相转换

目录 一、算法实现进制之间的转换 (1)十进制转换为二进制 (2)二进制转换成十进制 二、Java中的API实现进制转换 (1)十进制转换为二进制 (2)十进制转换为八进制 (3…

OJ_点菜问题(背包问题)

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;int main() {int c, n;scanf("%d%d", &c, &n);int p[101];int v[101];for (int i 0; i < n; i){scanf("%d%d", &p[i],…

Android Studio实现内容丰富的安卓宠物用品管理系统

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.系统公告 3.宠物社区&#xff08;可发布宠物帖子&#xf…

47、C++/引用,函数重载,类相关学习20240312

一、自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show()。 代码&…

oppo前端开发一面

提问&#xff1a; 1. 谈谈你怎么实现响应式布局 2. 谈谈你对weback的了解&#xff0c;vite和webpack的区别&#xff0c;webpack loader 3. 你项目怎么用CI/CD&#xff08;不懂&#xff0c;只知道自动化部署了&#x1f62d;&#xff09; 4. ts中type和interface区别 5. axi…

html5cssjs代码 008 名画欣赏

html5&css&js代码 008 名画欣赏 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;展示了名画欣赏的内容。主要包括页面的标题、样式定义和主体内容。其中&#xff0c;样式定义使用了CSS来控制页面的布局和外观&#xff0c;主体内容使用了结构化的HTML标签来展…

旅游市场游客满意度调查报告

民安智库开展游客满意度调查主要通过问卷调查的方式进行&#xff0c;在设计问卷时&#xff0c;应确保问题覆盖游客在某省旅游过程中可能遇到的各个方面&#xff0c;包括交通、住宿、餐饮、旅游景点、导游服务等。此外&#xff0c;还可以设置一些开放性问题&#xff0c;让游客提…

架构设计-复杂度来源:高性能

对性能孜孜不倦的追求是整个人类技术不断发展的根本驱动力。例如计算机&#xff0c;从电子管计算机到晶体管计算机再到集成电路计算机&#xff0c;运算性能从每秒几次提升到每秒几亿次。但伴随性能越来越高&#xff0c;相应的方法和系统复杂度也是越来越高。现代的计算机 CPU 集…

C++常用容器总结

容器分为三类&#xff0c;顺序容器&#xff0c;关联容器和适配器。顺序容器又分为连续的容器&#xff08;vector&#xff0c;array&#xff09;&#xff0c;顺序容器中的离散容器&#xff08;list&#xff0c;slist&#xff0c;forward_list&#xff09;&#xff0c;离连形的de…

[uni-app] 小程序码转为二维码, 小程序解析此码获取数据

小程序码缩小后太细, 不好扫, 还是改成二维码扫 记录解析该二维码 onLoad(e) {if (e.shareTimeline) { // 以单页面启动-朋友圈分享出的单页面this.shareTimeline e.shareTimeline;let param {certId: e.certId,uid: e.uid,unionid: e.unionid,openid: e.openid,}this.initD…

Html+threejs数字孪生三维场景实现

程序示例精选 Htmlthreejs数字孪生三维场景实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Htmlthreejs数字孪生三维场景实现》编写代码&#xff0c;代码整洁&#xff0c;规则&#xf…

第十四届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 特殊日期试题 B: 与或异或试题 C: 棋盘试题 D: 子矩阵试题 E : \mathrm{E}: E: 互质数的个数试题 F: 小蓝的旅行计划试题 G: 奇怪的数试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现宝藏 前些天发现了一个巨牛的人…

讲述微信小程序宿主环境

上文 科普编程中 宿主环境(host environment) 基础概念 带大家科普了一下宿主环境的基本概念 那么 本文 我们就来说说小程序的一个宿主环境 首先 小程序的 宿主环境 肯定是 手机微信 安卓手机 只能安装安卓微信 IOS 系统 也只能安装IOS 系统的 微信 这是软件的宿主环境 但 微…

mysql离线版安装

1.解压zip包&#xff0c;并将解压文件 mysql-8.0.19-winx64 文件放在想放的位置&#xff0c;比如 D 盘下 2.配置环境变量&#xff08;目的是为了避免在CMD窗口下操作时反复切换路径&#xff09;&#xff0c;在Path下添加 D:\mysql-8.0.19-winx64\bin&#xff0c;环境变量设置好…

Linux生产者消费者模型(简易版)

task.hpp(用来封装一个任务): #include<iostream> #include<mutex> #include<queue> #include<pthread.h> using namespace std; class Task { public:Task(){pthread_mutex_init(&_mtx,nullptr);pthread_cond_init(&_cond,nullptr);}void Pu…

helm部署hadoop

&#xff08;作者&#xff1a;陈玓玏&#xff09; 参考helm仓库的文档&#xff1a;https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop helm helm repo add pfisterer-hadoop https://pfisterer.github.io/apache-hadoop-helm/ helm install hadoop pfistere…

无设备树platform驱动实验:platform驱动注册代码实现

一. 简介 本实验编写一个无设备树文件&#xff08;即不支持设备树的旧Linux内核&#xff09;的platform驱动实验。这里选择 点亮 Led灯来举例说明。 本实验的实现分两个部分&#xff1a; (1) 一个设备模块注册的代码 (2) 一个驱动模块注册的代码 本文先实现设备模块代码的…