七、NAT场景下黑洞路由作用

学习防火墙之前,对路由交换应要有一定的认识

  • 1.源NAT场景下的黑洞路由
  • 2.NAT Server场景下的路由黑洞
  • 3.总结
  • 4.黑洞路由其他作用

——————————————————————————————————————————————————

1.源NAT场景下的黑洞路由

先搭建一个典型的源NAT组网环境。

在这里插入图片描述

防火墙上NAT相关配置如下:

1、配置NAT地址池

nat address-group GW section 0 110.1.1.10 110.1.1.10

2、配置NAT策略

nat-policyrule name sounatsource-zone trustdestination-zone untrustsource-address 192.168.100.0 mask 255.255.255.0action source-nat address-group GW

3、配置安全策略

security-policyrule name sounatpolicysource-zone trustdestination-zone untrustsource-address 192.168.100.0 mask 255.255.255.0action permit

4、默认路由

ip route-static 0.0.0.0 0.0.0.0 110.1.1.2

NAT地址池是110.1.1.10,防火墙与路由器相连接口地址是110.1.1.0/30,NAT地址池和防火墙公网接口地址不在同一网段。

正常情况下,私网PC访问公网WEB服务器,会生成会话表,源地址进行了转换,一切都没有问题。

在这里插入图片描述

此时,如果公网上的一台PC,主动访问防火墙的NAT地址池地址,会发生什么情况?

在公网WEB执行Ping 110.1.1.10,发现无法Ping通。

在这里插入图片描述

显然,这是正常的结果,因为NAT地址池只有在转换私网地址的时候才会用到,也就是说,私网PC必须先发起访问请求,防火墙收到该请求后才会为其转换地址。NAT地址池地址并不对外提供任何单独的服务。所以当公网PC主动访问NAT地址池地址时,报文无法穿过防火墙到达私网PC,结果肯定不通。

但实际情况远远没有这么简单,我们在防火墙的G1/0/0口上抓包,然后再次在公网WEB上执行PING 110.1.1.10命令,使用-c 1参数,就Ping一次报文。

在这里插入图片描述
不看不知道,一看吓一跳,报文的TTL值逐一递减,最后变为1。

TTL是报文的生存时间,每经过一台设备的转发,TTL值减1,当TTL值为0时,就会被设备丢弃。这说明公网PC主动访问NAT地址池地址的报文,在防火墙和路由器之间相互转发。

梳理下过程:

1、路由器收到公网PC访问NAT地址池地址报文后,发现目的地址不是自己的直连网段,因此查找路由表,发送到防火墙。

2、防火墙收到报文后,该报文不属于私网访问公网的回程报文,无法匹配会话表,同时目的地址也不是自己的直连网段(防火墙没有意识到该报文的目的地址是自己的NAT地址池地址),只能根据缺省路由来转发。因为报文从同一接口入和出,相当于一个安全区域流动,默认情况下不受安全策略控制,这样报文又从防火墙出接口发送至路由器。

3、路由器收到该报文后,再次查找路由表,还是发送到防火墙,如此反复。

下来我们配置一条路由黑洞,为了避免影响其他业务,将掩码设置为32位。

ip route-static 110.1.1.10 255.255.255.255 NULL0

第二种方法:在防火墙配置NAT地址池时,配置命令:

nat address-group GW route enablesection 0 110.1.1.10 110.1.1.10

两者作用相同

在这里插入图片描述
Ping了一次,抓到了1个ICMP报文,说明防火墙收到路由器发送过来的报文后,匹配到了黑洞路由,直接将报文丢弃。此时就不会在防火墙和路由器之间产生路由环路,及时收到再多的报文,都会送到黑洞中。且不会影响正常业务。

上面只是用了一个Ping报文来演示这个过程,如果公网上的捣乱分子利用成千上万的PC主动向NAT地址池地址发起大量访问,无数的报文就会在防火墙和路由器之间循环,占用链路带宽资源,消耗大量的系统资源来处理这些报文,可能会导致正常报文无法处理。

所以,在防火墙上NAT地址池地址和公网接口地址不在同一网段时,必须配置路由黑洞,避免在防火墙和路由器之间产生路由环路。

———————————————————————

如果NAT地址池和防火墙公网接口地址在同一网段,还会出现这种问题?再次验证下。

interface GigabitEthernet1/0/0ip address 110.1.1.1 255.255.255.0

在来Ping抓包看看。

在这里插入图片描述
抓到了ARP报文和ICMP报文,但是没有在防火墙和路由器之间相互转发。过程:

1、路由器收到PC访问NAT地址池地址报文后,发现目的地址属于自己的直连网段,发送ARP请求,防火墙会回应这个ARP请求,前两个ARP就是来完成这一交互过程。路由器使用防火墙告知的MAC地址封装报文,发送至防火墙。

2、防火墙收到后,发现报文的目的地址和自己的G1/0/0接口在同一网段,直接发送ARP请求报文,寻找该地址的MAC地址(防火墙依然没有意识到该报文的目的地址是自己的NAT地址池地址),但是网络中其他设备都没有配置这个地址,肯定就不会回应,最终防火墙将报文丢弃。

所以说,在这种情况下不会产生路由环路,但是如果公网上捣乱分子发起大量访问时,防火墙将发送大量ARP请求报文,也会消耗系统资源。所以,当防火墙上NAT地址池地址和公网接口地址在同一网段时,建议也配置黑洞路由,避免防火墙发送ARP请求报文,节省防火墙系统资源。

ip route-static 110.1.1.10 32 NULL 0

在这里插入图片描述
配置了路由黑洞后,防火墙再也不会发送ARP请求报文。

———————————————————————

还有一种极端的情况,配置源NAT时,直接把公网接口地址作为转换后地址Easy-IP方式。也可以把公网接口地址配置成地址池地址。这样NAT转换使用的地址和公网接口地址是同一个地址。

Easy-IP方式下不需要配置路由黑洞。防火墙收到PC报文后,发现访问自身报文,这时候取决于公网接口所属安全区域和Local区域之间的安全策略。安全策略允许通过就处理,安全策略不允许通过,就丢弃。不会产生环路,也不需要配置黑洞路由。

——————————————————————————————————————————————————

2.NAT Server场景下的路由黑洞

NAT Server也存在环路的问题,不过发生环路的前提条件比较特殊,要看NAT Server是怎么配置的。先看看NAT Server Global地址和公网接口地址不再同一网段的情况。

在这里插入图片描述

假设接口地址、安全策略、安全区域、路由都已完成配置。

如果我们在防火墙上配置一条粗犷型NAT Server,将私网Web服务器发布到公网。

nat server 0 global 110.1.1.10 inside 192.168.100.2

公网PC访问110.1.1.10,目的地址都会转换成192.168.100.2,然后发送给私网Web服务器,自然不会产生环路。

但是如果配置了一条精细化的NAT Server,只把私网Web服务器特定的端口发布到公网上:

nat server protocol tcp global 110.1.1.10 8889 inside 192.168.100.2 80

此时,如果公网PC不按常理出牌,没有访问110.1.1.10的8889端口,而使用ping命令访问110.1.1.10,防火墙收到该报文,既无法匹配server-map表,也无法匹配会话表,就只能查找路由,从G1/0/0接口发出,路由器收到报文后,还是送到防火墙,依然产生环路。

在这里插入图片描述
所以,当防火墙配置了特定协议和端口的NAT Server并且NAT Server的Global地址和公网接口地址不在同一网段,必须配置路由黑洞,避免在防火墙和路由器之间产生环路。

如果NAT Server的Global地址和公网接口地址在同一网段,会发送ARP请求,和上面说的情况是一样的。

所以,当防火墙配置了特定协议和端口的NAT Server并且NAT Server的Global地址和公网接口地址在同一网段,建议也配置路由黑洞,避免在防火墙发送ARP请求报文,节省防火墙系统资源。

如果配置NAT Server时,把公网接口地址配置成Global地址,防火墙收到PC报文,匹配Server-map表然后转换目的地址,发送到特定私网。如果匹配不上Server-map表,就会认为是访问自身报文,由公网接口所属安全区域和Local区域之间安全策略决定如何处理,不会产生环路,也不需要配置黑洞路由。

——————————————————————————————————————————————————

3.总结

源NAT来说:
—————————————————

如果NAT地址池地址与公网接口地址不在同一网段,必须配置黑洞路由。
如果NAT地址池地址与公网接口地址在同一网段,建议配置黑洞路由。

对于特定协议和端口的NAT Server来说:
—————————————————

如果NAT Server的Global地址与公网接口地址不在同一网段,必须配置路由黑洞。
如果NAT Server的Global地址与公网接口地址在同一网段,建议配置路由黑洞。

——————————————————————————————————————————————————

4.黑洞路由其他作用

除了防止环路,节省系统资源,其实黑洞路由还有一个作用,就是在防火墙上引入到OSPF中,发布给路由器。

当NAT地址池地址或NAT Server的Global地址与公网接口地址不在同一网段,在路由器上需要配置静态路由,保证路由器可以把去往NAT地址池地址或NAT Server的Global地址的报文发送到防火墙。

[Router]ip route-static 110.1.1.10 255.255.255.255 110.1.1.1

如果防火墙和路由器之间运行OSPF协议,那么可以通过OSPF协议来学习路由,减少手动配置的工作量,但是NAT地址池不同于接口地址,无法在OSPF中通过network命令发布,路由器如何才能学到路由?

此时可以使用OSPF中引入静态路由方式,把黑洞路由引入到OSPF中,然后通过OSPF发布给路由器。 这样路由器就知道去往NAT地址池地址或NAT Server的Global地址的报文都要发送到防火墙上。

ospf 100import-route staticarea 0.0.0.0network 110.1.1.0 0.0.0.3

在这里插入图片描述
——————————————————————————————————————————————————

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

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

相关文章

乔拓云平台:微信小程序开发的全新视角与高效路径

随着微信小程序的日益普及,越来越多的人开始关注如何开发自己的小程序。对于没有开发经验的人来说,借助第三方平台如乔拓云,可以轻松实现小程序的开发。本文将介绍微信小程序开发需要学习的东西,并探讨如何借助乔拓云平台进行无经…

多线程并发Ping脚本

1. 前言 最近需要ping地址,还是挺多的,就使用python搞一个ping脚本,记录一下,以免丢失了。 2. 脚本介绍 首先检查是否存在True.txt或False.txt文件,并在用户确认后进行删除,然后从IP.txt的文件中读取IP地…

一篇文章带你快速入门 Vue 核心语法

一篇文章带你快速入门 Vue 核心语法 一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) …

什么是CAS, 什么是AQS

文章目录 什么是CAS, 什么是AQSCASAQS 什么是CAS, 什么是AQS CAS AQS AQS 全称是AbstractQueuedSynchronizer, 是juc 下一个核心的抽象类,用于构建各种同步器和锁 比如我们熟悉的 ReentrantLock、ReadWriteLock、CountDownLatch等等是基于AQS. 首先在…

2023.11.30 关于 MyBatis 动态 SQL 的使用

目录 引言 if 标签 trim 标签 where 标签 set 标签 foreach 标签 引言 动态 sql 是 MyBatis 的强大特性之一允许你根据输入的参数动态地构建 sql 语句从而在运行时根据不同的条件生成不同的 sql 核心思想 基于提供的数据和条件,能够修改、增加、删除 sql…

css 输入框动态特效

先上图 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 输入框动效</title><style>.inputBox {position: relative;width: 250px;}.inputBox input {width: 100%;padding: 10px…

NodeJS(二):npm包管理工具、yarn、npx、pnpm工具等

目录 (一)npm包管理工具 1.了解npm 2.npm的配置文件 常见的配置属性 scripts属性*** 依赖的版本管理 3.npm安装包的细节 4.package-lock文件 5.npm install原理** 6.npm的其他命令 (二) 其他包管理工具 1.yarn工具 基本指令 2.cnpm工具 3.npx工具 (1)执行本地…

MVCC是什么

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

R语言手册30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

Python-滑雪大冒险【附源码】

滑雪大冒险 《滑雪大冒险》是一款充满趣味性和挑战性的休闲竞技游戏&#xff0c;在游戏中&#xff0c;玩家将扮演一位勇敢的滑雪者&#xff0c;在雪山上展示他们的滑雪技巧&#xff0c;游戏采用2D图形界面&#xff0c;以第三人称视角呈现 运行效果&#xff1a;用方向键及方向键…

TCP/IP_整理起因

先分享一个初级的问题&#xff1b;有个客户现场&#xff0c;终端设备使用客户网络更新很慢&#xff0c;使用手机热点更新速度符合预期&#xff1b;网络部署情况如下&#xff1a; 前期花费了很大的精力进行问题排查对比&#xff0c;怀疑是客户网络问题&#xff08;其他的客户现…

Java网络编程——Java语言的反射机制

在Java运行环境中&#xff0c;对于任意一个类&#xff0c;能否知道这个类有哪些属性和方法&#xff1f;对于任意一个对象&#xff0c;能否调用它的任意一个方法&#xff1f;答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自Java语言的反射&#xff08;Refl…

vuepress-----18、图片缩放

图片引入两种方式 地址 # 图片缩放插件 # 实战 md文件引入图片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安装配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示

Spring框架学习:Bean生命周期

目录 SpringBean的生命周期 Bean实例属性填充 三级缓存 常用的Aware接口 Spring IoC容器实例化Bean总结 SpringBean的生命周期 Spring Bean的生命周期是从 Bean 实例化之后&#xff0c;即通过反射创建出对象之后&#xff0c;到Bean成为一个完整对象&#xff0c;最终存储到…

Termux+Hexo结合内网穿透轻松实现安卓手机搭建博客网站发布公网访问

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

视频剪辑:视频转码实用技巧,批量将MP4转为MP3音频

随着数字媒体设备的普及&#xff0c;视频和音频文件已成为日常生活中的重要组成部分。有时&#xff0c;可能要将MP4视频文件转换为MP3音频文件&#xff0c;以提取其中的音频内容或者进行其他处理。这是耗费时间的任务&#xff0c;那要如何操作呢&#xff1f;本文详解云炫AI智剪…

一文理解什么是交叉熵损失函数以及它的作用

今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。 作为一种损失函数&#xff0c;它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比&#xff0c;从而输出 loss 值&#xff0c;直到 loss 值收敛&#xff0c;可以认为神经网络模型训练完成。 那么这…

进制 + 原码,反码,补码

进制转换 整数部分 小数部分 原码 反码 补码 原码转补码&#xff1a; 左边和右边第一个1不变&#xff0c;中间取反。-0 除外。 计算机系统中数值一律用补码来存储的原因 其他 术语 进制表 进制数的表示 详细教程可转 爱编程的大丙

SpringDataRedis 操作 Redis,并指定数据序列化器

文章目录 1. SpringDataRedis 概述2. 快速入门2.1 导入pom坐标2.2 配置文件2.3 测试代码2.4 数据序列化器2.5 StringRedisTemplate2.6 总结 1. SpringDataRedis 概述 SpringData 是Spring 中数据操作的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中对Redis的集成模…

在pytorch中自定义dataset读取数据

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 有关我们数据读取预训练 以及如何将它打包成一个一个batch输入我们的网络的 首先我们来看一下之前我们在讲resnet网络时所使用的源码 我们去使用了官方实现的image folder去读取我们的图像数据 然…