NAT地址转换+多出口智能选路,附加实验内容

news2024/11/15 11:50:29

本章主要讲:基于目标IP、双向地址的转换    

注意:基于目标NAT进行转换  ---基于目标IP进行地址转换一般是应用在服务器端口映射;

NAT的基础知识

1、服务器映射

服务器映射是基于目标端口进行转换,同时端口号也可以进行修改;

服务器映射可能会触环:

条件:

当服务是http时,防火墙上有缺省指向外界,路由器有该接口的IP指向防火墙

我们的服务器映射是做在虚拟IP上的(虚拟接口也可以做端口映射,且这个虚拟IP的网段和边界接口IP不是在同一个网段

情况:

--1、那么当我们从右边路由器访问这个服务时,正常访问80端口完全ok;

--2、当我们从右边外界访问这个服务时,访问的端口不是80端口,就会发生环路;

如:外界数据包发过来,我们的防火墙就会首先尝试进行一个nat地址转换;这里因为端口号不一样,而服务器映射是需要看端口号是否符合要求才会进行转换的;

显然这里端口号不一样就不会进行相应的转换;即使IP一样也不行,需要看端口和IP

而这里转换不了之后,下一步就是匹配路由表;一旦匹配路由表就会匹配上缺省,然后又将数据包丢回路由器了,而路由器匹配上路由发现边界接口的IP是在防火墙上,所以又会丢回来;------触环

解决办法:在缺省路由那个设备上设置空接口,也叫空接口路由;

提问:如果端口映射的接口IP是属于防火墙边界的直连网段的,那么还会不会触环?

不会,因为你看,老样子;

当数据包过来防护墙后,防火墙会先尝试NAT地址转换;显然端口不一样,转换不了;

然后会匹配路由表,因为这边路由表是有缺省和直连路由,这里显然就会匹配上直连路由,而他知道刚刚这个数据包就是从那边直连网段所在接口进来的;

所以他不会再传进去了,那么他会干嘛;当然是最后尝试发送一个ARP,最后再挣扎一下,看是否还有本网段内还有没有漏的;

---空接口也是路由,他叫空接口路由,只是子网掩码比较长

空接口一般是设置在缺省路由所在设备上;

2、NAT和路由谁先谁后

当然是NAT先,进行转换之后再路由;

安全策略的先后:安全策略是必须要一个区域和另一个区域的匹配;所以安全区域的先后取决于数据包刚刚进来的时候源和目标是否是同一个区域;

是同一个区域就需要先NAT转换;

不是同一个区域就先安全策略再nat;

当NAT地址转换设置成出接口转换时,且数据包也是从这个接口出去的,此时其实转换的地址可以是别的边界接口的地址;

我想说的是:nat地址出去的时候怎么转换的,回来的时候肯定也是用相同地址进行转换,即使出去和回来的接口不一样且nat还是出接口转换也不会改变这个规则;

如:

当这里做了一个服务器映射,是21 IP接口上做的

数据包从路由器发向防火墙,且防火墙的两个边界接口都是设置成的出接口地址转换;

当数据包是从21接口进来的,所以数据包在公网的时候,数据包的目标IP肯定就是21;

当数据包又从12接口出去的时候,这时做地址转换其实还是会按着进来的那两个地址进行转换;

所以出去的时候,即使我们是从12接口出去的,但是我们的源地址依然是进来的时候的目标地址21;

nat地址转换规则不会变,即使进来和出去的接口不一致也不会改变

出接口的地址转换可以用其他的出接口地址进行转换

注意:地址转换是首选nat,但是如果没有nat,server map表在老化之前也用来给防火墙用作地址转换;

3、策略路由

抓取目标流量,同时设置路由,然后让抓取的流量往我单独设置的这条路由上走;

---就是修改流量的轨迹,让他按我指定的方向走;

4、双向地址转换:源IP和目标IP都进行转换,端口是否需要转换看需求设置的nat策略

当我们的内部pc想通过公网访问内部服务器时,那么我们的数据包首先从pc来到我们的防洪墙,

--1、如果此时我们的防洪墙做的是基于源IP进行地址转换:显然这样是访问不到内部的服务器的;因为一旦转换,两个都是公网IP,防火墙通过缺省就会丢到路由器,路由器找不到就会直接丢包;

--2、如果我们此时是基于目标进行地址转换:我们的数据包就会把目标修改为内部服务器的真实IP,然后数据包成功来到这个服务器;但是服务器回包的时候,发现目标就是本网段的(因为我们的源IP一直没变,一直是私网的),所以此时我们的服务器就会直接向pc回包,不会去防火墙;

因为前面我的目标IP是服务器公网IP,现在回来的数据包发送者,即源IP不是公网IP,所以这个tcp连接会建立失败,因为前后对不上;这样我们就不能在这个服务器上面进行资源获取;   ---但是ping可以通,因为ping只管发送和回复,所以他才不会管回来的包的源IP是谁,他才不会管回来的包发送者是谁;

--3、如果我们此时是基于双向nat进行地址转换:我们的数据包首先还是会去到防火墙,然后防火墙就会把我的源IP和目标IP进行转换,注意此时的源IP转换之后必须不是在本网段的,不然还是会出现2的问题;当然,为了还满足上网需求,我们应该将源IP转换之后的IP变成公网的IP,所以最后源IP转换成了公网IP,目标IP转换成了私网IP;

发送给服务器后,服务器回包,发现目标IP是不属于本网段的,是公网的,然后也是发送给防火墙,然后防火墙再重新转换回来;服务器发送的源私网IP变成了开始的服务器的公网IP,目标公网IP变成了开始的私网IP;这样回复给了pc,这样pc看是目标发送给我的,就会成功建立tcp连接;

补充:服务器端口映射可以不用真实接口IP,因为数据包进来就会被端口地址映射,所以不是说要必须要外界能和这个IP进行通信,才能用这个IP地址;

5、多出口智能选路:    ---全局选路策略;当边界设备上面有多个出口可以去公网,我们 进行择优选择

--1、基于链路带宽进行负载分担:

如果一条链路超过了过载保护阈值,则该链路不再参加智能选路(如果已经创建了会话

表的流量,则将依然走该链路。),将在剩下链路中继续进行智能选路。

基于源IP的会话保持---来自同一个源IP或者同网段源IP的流量将始终使用同一个出接口转发,适用于对链路切换敏感的场景

基于目的IP的会话保持---访问同一个目标或者相同的目标网段,流量将始终使用同一个出接口转发,适用于对链路切换敏感的场景

--2、基于链路质量进行负载分担

---1,丢包率---防火墙会连续发送若干个(默认5个)探测报文,去计算丢包的比

例。(丢包个数/探测报文个数)---丢包率是最主要的链路质量参数

---2,时延---防火墙会连续发送若干个(默认5个)探测报文,取五次往返时间的平均值

作为时延参数。

---3,延时抖动---防火墙会连续发送若干个(默认5个)探测报文,取两两之间时延差值

的绝对值的平均值。

--3、基于链路权重的负载分担

权重值由网路管理员手工指定

--4根据链路优先级的主备备份

--优先级也是由网络管理员手工指定

--如果没有配置过载保护,则优先级最高的先工作,当该链路故障,则次高的开始工作,其余继续备份,以此类推;

--如果配置了过载保护,则优先级最高的先工作,当超过保护阈值,则次高的开始工作,其余继续备份,相当于此时两条链路同时工作,以此类推。

6、DNS透明代理    ---去的时候修改目标dns,回来的时候又修改回来

举例:百度,其实电信给百度设置的公网IP和移动对百度设置的IP是不一样的;所以一旦选择电信的dns服务器,那么解析出来的IP肯定就是电信对百度设置的IP,那么就会通过电信的线路对百度进行访问;

有时电信的网络链路质量已经很差了,那么我们就应该让后续找想找电信dnf服务器解析的数据包变成去找移动;

---这就是dns透明代理:就是让边界设备,如防火墙修改数据包想访问的dns服务器;

回来的时候又将源IP修改回来;

这样客户端就不会发现;

如:去的时候因为电信的数据链路质量太差了,所以我们的边界就修改了数据包中目标dns的IP,让他去访问移动dns,回来的时候,又将本来源IP是移动dns,修改为电信的dns;提高网络质量的同时不能让客户端知道我修改了他的目标dns

上实验:

前面6题上一个文章见过,我们这次主要讲后面5个;

问题7:办公区可以通过移动和电信进行上网,且是多对多

        在配置时候,我们此时可以直接写一个既不属于电信又不属于移动的地址池的动态nat,这样就可以避免分开写电信和移动的地址此了;减少代码量

问题8:分公司可以访问总公司的服务器

        从题目中我们可以看出,题目是想让公网访问我们内部的服务器,所以我们应当做一个服务器映射,即基于目标的IP的nat;

这里面需要注意的点是:

        1、我们的安全区域是指:哪个区域能访问我们的这个服务器,其实就是用来匹配的源区域;

        2、我们的端口地址转换是可选,这里如果写两个80,那么就代表公网访问80端口,转换之后的端口号还是80,即我的http服务;

其实我们可以看出,既然目标nat可以做,那我们的双向地址转换肯定也可以做

问题9:这里无非就是对链路选路进行一个策略;

        --1、首先在接口里面把接口的带宽配置欧克

        再通过接口创建一个链路接口,链路接口和接口基本一样,只是作用对象不同,链路接口是作用于选路策略的

--2、创建链路接口    ---这里应当选择源进源出,保证网络的稳定性

--3、选择智能选路

这里就是来选择智能选路的方式,同时把接口添加进智能选路机制里面来,让系统进行合理的选路

问题10:翻译一下:分公司内部可以通过公网IP访问内部服务器,公网也可以通过公网IP访问内网服务器;这里后半截问题很简单,公网访问内部服务器,基于目标地址转换即可;

主要是前半截问题:这里只能用双向nat,具体原因请思考包的发送过程!!

选择双向nat转换

配置转换后的源IP、目标IP、源服务、目标端口号(也是目标服务);

注意这里的源服务和目标服务(目标端口号)的个数必须相同

问题11:游客只能通过移动电路访问公网,可以看出这里我们需要写策略路由

策略路由:对抓取到的目标数据包进行一个针对性的转发,就像是为抓取到的数据包专门设置一个针对性的路由

这个出接口:就是针对我们抓取的数据包,我们需要选择哪条路进行一个转发;让你选择是移动这个出口还是电信这个出口

----------------------------------我们只讲思路,不讲详细过程;

                                          过程是背,思路是理解;

                                           想要走多远,10%背+90%理解

祝你年薪百万,成绩辉煌!!!

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

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

相关文章

AI算法14-套索回归算法Lasso Regression | LR

套索回归算法概述 套索回归算法简介 在统计学和机器学习中,套索回归是一种同时进行特征选择和正则化(数学)的回归分析方法,旨在增强统计模型的预测准确性和可解释性, 正则化是一种回归的形式,它将系数估…

接口基础知识2:http通信的组成

课程大纲 一、http协议 HTTP(Hypertext Transfer Protocol,超文本传输协议)是互联网中被使用最广的一种网络协议,用于客户端与服务器之间的通信。 HTTP协议定义了一系列的请求方法,例如 GET、POST、PUT、DELETE 等&…

一篇学通Axios

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它提供了一种简单易用的方式来发送 HTTP 请求,并支持诸如请求和响应拦截、转换数据、取消请求以及自动转换 JSON 数据等功能。 Axios 名字的由来 Axios 的名字来源于希腊神话中的…

在Linux系统实现瑞芯微RK3588部署rknntoolkit2进行模型转换

一、首先要先安装一个虚拟的环境 安装Miniconda包 Miniconda的官网链接:Minidonda官网 下载好放在要操作的linux系统,我用的是远程服务器的linux系统,我放在whl这个文件夹里面,这个文件夹是我自己创建的 运行安装 安装的操作都是yes就可以了 检查是否安装成功,输入下面…

秋招突击——7/13——多线程编程(基础知识回顾+编程练习 )

文章目录 引言基础知识Synchronized关键字使用方式用于同步方法针对同步块的方法静态方法使用原理解析 Volatile使用方式实现原理 final关键字 编程练习(synchronized就能实现)双线程轮流打印1-100个人实现参考实现 三线程顺序打出1-100个人实现参考实现…

笔记 4 :linux 0.11 中继续分析 0 号进程创建一号进程的 fork () 函数

(27)本条目开始, 开始分析 copy_process () 函数,其又会调用别的函数,故先分析别的函数。 get_free_page () ; 先 介绍汇编指令 scasb : 以及 指令 sstosd :…

[USACO24OPEN] Smaller Averages G (单调性优化dp)

来源 题目 Bessie 有两个长度为 N的数组(1≤N≤500)。第一个数组的第 i 个元素为 ai​(1≤ai​≤10^6),第二个数组的第 i个元素为bi​(1≤bi​≤10^6)。 Bessie 希望将两个数组均划分为若干非空…

大数据开发中的数据驱动决策:关键问题与实践指南

目录 决策前的准备工作1. 我已经掌握了哪些信息?2. 我们已经做出决定了吗?3. 我们需要哪些额外信息以及何时需要? 决策过程中的关键问题1. 我们需要做这个决定吗?2. 错误地做出这个决定的代价是什么? 决策后的反思1. 我…

主机安全-开源HIDS字节跳动Elkeid安装使用

目录 概述什么是HIDSHIDS与NIDS的区别EDR、XDR是啥? Elkeid架构Elkeid Agent && Agent centerElkeid DriverElkeid RASPElkeid HUBService DiscoveryManager安装数据采集规则&告警 参考 概述 什么是HIDS HIDS( host-based intrusion detec…

CentOS7.X系统部署Zabbix6.0版本(可跟做)

文章目录 一、部署环境说明二、基本环境部署步骤1、环境初始化操作2、部署并配置Nginx3、部署并配置PHP4、测试NginxPHP环境5、部署并配置MariaDB 三、Zabbix-Server部署步骤1、编译安装Zabbix-Server2、导入Zabbix初始化库3、配置Zabbix前端UI4、启动Zabbix-Server5、WEB页面配…

基于 BERT+BILSTM 实现情感分析分类(附源码)

目录 一、数据集 二、数据清洗和划分 2.1 安装依赖 2.2 清洗和划分 三、下载 Bert 模型 四、训练和测试模型 本文主要基于 Bert 和 BiLSTM 实现情感分类,其中参考了多个博客,具体见参考链接。 源码已上传Gitee : bert-bilstm-in-Sentiment-classi…

基于JavaSpringBoot+Vue+uniapp微信小程序校园宿舍管理系统设计与实现

基于JavaSpringBootVueuniapp微信小程序实现校园宿舍管理系统 目录 第一章 绪论 1.1 研究背景 1.2 研究现状 1.3 研究内容 第二章 相关技术介绍 2.1 Java语言 2.2 HTML网页技术 2.3 MySQL数据库 2.4 Springboot 框架介绍 2.5 VueJS介绍 2.6 ElementUI介绍 第三章 系…

pytorch训练的时候 shm共享内存不足,导致训练停止

1.查看shm情况 df -h /dev/shm内存已经满了,因为之前训练多次训练意外停止到shm中的缓存不能及时被清理 2、手动清理shm 依然没被释放 3、查看关联的进程,一个一个kill lsof |grep deletedkill -9 46619 44618 44617 。。。。。4、搞定

3011.力扣每日一题7/13 Java(冒泡排序)

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 冒泡排序 解题思路 解题过程 时间复杂度 空间复杂度 冒泡排序 冒…

jenkins系列-07.轻易级jpom安装

jpom是一个容器化服务管理工具:在线构建,自动部署,日常运维, 比jenkins轻量多了。 本篇介绍mac m1安装jpom: #下载:https://jpom.top/pages/all-downloads/ 解压:/Users/jelex/Documents/work/jpom-2.10.40 启动前修…

[论文阅读]MaIL: Improving Imitation Learning with Mamba

Abstract 这项工作介绍了mamba模仿学习(mail),这是一种新颖的模仿学习(il)架构,为最先进的(sota)变换器策略提供了一种计算高效的替代方案。基于变压器的策略由于能够处理具有固有非…

思维+构造,CF 1059C - Sequence Transformation

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1059C - Sequence Transformation 二、解题报告 1、思路分析 n 1,2,3的情况从样例已知 考虑n > 4的情况 我们考虑要字典序最大,自然要最早出现非1的数,…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下,3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间,还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性,让艺术不再是单一的视觉享受。在这里&#x…

【香菇带你学Linux】Linux环境下gcc编译安装【建议收藏】

文章目录 0. 前言1. 安装前准备工作1.1 创建weihu用户1.2 安装依赖包1.2.1 安装 GMP1.2.2 安装MPFR1.2.3 安装MPC 2. gcc10.0.1版本安装3. 报错解决3. 1. wget下载报错 4. 参考文档 0. 前言 gcc(GNU Compiler Collection)是GNU项目的一部分,…

Leetcode-203-移除链表元素-临时变量作用域-c++

题目详见https://leetcode.cn/problems/remove-linked-list-elements/ 题解代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullpt…