当前位置: 首页 > news >正文

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的?

图片

在上一篇中,我们用任意一个内网的终端都能访问到百度的服务器,但是这是我们在互联网设备上面做了回程路由才实现的,在实际中,之前也说过运营商是不会写任何路由过来的,那对于我们这种私网地址是如何访问到公网的呢?那就是依靠一个技术,NAT---网络地址转换

 「模拟器、工具合集」复制整段内容
链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab=7ulgil

NAT技术的由来与实现

在网络基础篇中讲解过目前的IPV4地址已经是枯竭的状态了,在早期发现问题的时候提出过几个解决办法,取消固定网络位的方式,引入了子网掩码,VLSM、CIDR来解决IP地址浪费的问题,同时提出了私网地址的概念,这样使得局域网都可以使用私网地址来进行通信,缓解了IPV4地址被用尽的情况,但是也带来了一个问题,私网地址的流量是不能进入公网的,因为私网地址每个不同的局域网都可以使用,重复都没有关系,在这样的情况下引入了一个技术,就是NAT,它实现的功能就是把私网地址转换成公网地址,相当于做了一个”伪装”一样,这样自然就能够去访问互联网了。

(1)配置更改

想要知道是如何实现的,那就先得配置上,然后在配合抓包以及查看状态来整体了解,先来做下初始化操作。

#出口路由器整改[AR1200]interface  g0/0/1[AR1200-GigabitEthernet0/0/1]undo pppoe-client dial-bundle-number 1[AR1200-GigabitEthernet0/0/1]ip address dhcp-alloc [AR1200]undo  ip route-static 0.0.0.0 0.0.0.0 Dialer1这里把之前做的PPPOE去掉,改成简单的DHCP模式,跟目前家庭网络其实差不多,更容易理解  #互联网设备整改[internet]interface  g0/0/1[internet-GigabitEthernet0/0/1]ip address 192.168.1.1 24[internet-GigabitEthernet0/0/1]dhcp select interface 
[internet]undo  ip route-static allWarning: This operation may lead to the deletion of all the public IPv4 static routes and their configurations. Continue? [Y/N]:y           //去掉所有静态路由

图片

图片

现在已经获取到地址了,也可以访问到外网的百度服务器,但是下面是无法访问的,配置下NAT,来看看它是如何实现的。

(2)NAT相关配置
#ACL匹配需要NAT转换的流量[AR1200]acl number 3000[AR1200-acl-adv-3000]rulepermit  ip在华为路由器配置里面,它是需要先定义一个规则的,这个规则的作用是匹配哪些内网网段能够做NAT转换,也就是该列表里面的允许转换,如果不在则不允许,而这个规则匹配工具就叫做ACL(Access Control list,访问控制列表),它的作用非常广泛,在NAT里面它就起到一个匹配的作用。#命令解析#ACL匹配需要NAT转换的流量[AR1200]acl number 3000[AR1200-acl-adv-3000]rule permit  ip
在华为路由器配置里面,它是需要先定义一个规则的,这个规则的作用是匹配哪些内网网段能够做NAT转换,也就是该列表里面的允许转换,如果不在则不允许,而这个规则匹配工具就叫做ACL(Access Control list,访问控制列表),它的作用非常广泛,在NAT里面它就起到一个匹配的作用。
#命令解析 acl number 3000:这条命令的作用是定义一个高级ACL,ID编号范围是3000~3999,高级可以匹配源目IP、源目端口号、协议类型等参数,在实际中用的最多,也最推荐用这种。
 rule permit ip:这个命令的作用是定义规则,一个ID编号里面是可以匹配N多规则的  • rule 后面跟动作,其中permit为匹配(抓取)的意思  • ip表示整个IPV4全部匹配,其实它是一条简化命令,完整是rule permit ip source any destination any,平时可以省略不写
整体下来这条ACL的作用就是匹配(抓取)所有ipv4数据。
#NAT转换配置[AR1200]interface  g0/0/1[AR1200-GigabitEthernet0/0/1]nat outbound 3000 这条命令的就是做NAT转换,但是这里注意outbound表示是出去的方向,也就是从内网进从外网出,其中3000就是上面定义的acl number 3000,这里只需要输入ID即可,整体命令的意思是,ACL 3000里面规则匹配上的进行NAT转换。(目前这里ACL是全部匹配)
(3)开始测试

图片

图片

访问成功了,现在是互联网设备没有回程路由的(注意服务器DNS与HTTP服务开启)

(4)NAT是如何实现内网访问外网的

图片

开启互联网接口的抓包以及出口路由器G0/0/0口抓包,然后来看看NAT是如何实现访问的

图片

图片

出口路由器G0/0/0口的抓包,过滤下,输入tcp or dns

图片

互联网G0/0/1口的抓包,不知道大家第一眼看过去有没有发现不一样的地方

图片

这个地址就是出口路由器对接互联网接口获取到的地址,源地址是从192.168.255.1变成了192.168.1.254了!来看看具体是如何实现的

图片

1、PC2发起DNS请求,经过办公区一交换机的二层转发、A核心的三层转发,以及出口路由器的三层转发

图片

查询路由表交给互联网处理,该路由是DHCP模式,自动从运营商设备获取到的

2、出口路由器在发出的时候,发现接口配置了NAT转换

图片

有了nat outbound 3000这个配置存在,路由器会查询ACL 3000的规则,发现是全部匹配,就会执行一个操作,NAT转换

图片

图片

抓包对比可以发现,源地址:192.168.255.1变成了192.168.1.254,源端口:49153变成了3624,其余的目的IP与目的端口号是没有变化的。

图片

并且路由器会记录这个转换记录在NAT 会话中(原始的五元组信息:源IP、目的IP、源端口、目的端口、协议,以及转换后的源地址以及源端口号),它的作用待会就能体现了,但是,这里模拟器有一个小问题,它的端口号记录的是不对的,跟抓包的完全对应不上的,真机是没这个问题的,转换后,把这个数据从G0/0/1发送出去,交给互联网。

3、互联网设备收到以后,查询路由表直接发现目标地址是直连,直接把数据交给服务器处理。

图片

4、服务器收到DNS请求后,开始回应,告诉客户端 www.baidu.com ,对应的地址是61.128.1.1

图片

将这个回应交给网关处理,就从网卡发出去,值得注意的是,服务器回应的地址是192.168.1.254(出口路由器的接口地址)

5、互联网收到这个数据包后,查询目的地址,查询路由表,发现是直连网段,直接丢给出口路由器

6、关键的来了,出口路由器收到以后,发现是给自己的,但是它发现自己的G0/0/1口是有NAT功能配置的,于是查询是否有NAT会话表

图片

路由器只要发现NAT会话里面有对应匹配(比如这里目的地址是192.168.1.254,端口号是10258的,就会匹配第二条,自然就会把192.168.1.254转换成192.168.255.1,端口号变成2312,当然这个模拟器的NAT会话不对,但过程是这样的)

图片

抓包对比,从互联网交给出口路由器的回包,目的地址是192.168.1.254,目的端口号是3624,经过出口路由器后,出口路由缓存了NAT会话信息,该数据包匹配了NAT会话的信息,它执行一个操作,NAT还原,把192.168.1.254还原成192.168.255.1,目的端口号3624还原成49153,这个就是就是路由器保留这个会话信息的作用,如果说路由器只执行转换操作,而不去生成这个NAT会话信息,那么导致的情况是,数据包回来的时候,路由器发现找的是自己,但是自己并没与去DNS请求,就把数据包给丢弃了,导致内网无法得到响应,也可以看出来NAT会话信息的重要性,后续排错会经常查看会话表。

图片

转换后,出口路由器查询路由表,发现192.168.255.1属于直连路由,直接从G0/0/0口发出去,交给192.168.250.1处理,然后核心A经过三层转发,交给办公区1交换机,同样执行二层转发交给PC2,至此PC2就得到了www.baidu.com 对应的IP地址了,剩下的流程是一样的,发起SYN,关键的地方就在于出口路由器的NAT转换。

有用的信息汇总与经验分享

(1)通过上面的分析知道,之所以内网能够去访问到外网资源,就是出口路由器做了NAT技术,NAT技术在实际中有两种分类,目前我们这篇接触到的叫做源NAT技术中的NAPT(网络地址端口转换),从上面抓包可以看到,在经过出口路由做了NAT配置的接口,源地址以及端口都会被转换,所以这个技术叫做源NAT--NAPT。

(2)数据包经过出口路由器的时候,接口配置了nat outbound 3000,路由器会查看ACL 3000里面的规则来进行转换,那转换的是哪个地址呢?就是接口的地址

图片

从抓包也可以看出来,内网的192.168.255.1经过出口路由器后被转换成了192.168.1.254,这种直接使用接口获取的地址进行转换的在实际中用的最多的,通常的场景是能上外网的地址只有一个的情况下使用这种方式,像DHCP从猫获取只有一个可上网地址,PPPoE拨号获取到的也只有一个地址,所以我们直接在接口下面配置nat outbound后面跟对应的ACL ID即可,它就会利用接口获取(配置)的地址进行转换,这种方式叫做Easy IP,这个只是一个称呼,每个厂商不太一样,记住它的作用即可。

(3)在回顾之前说过的运营商不会去在乎你内网是如何配置的,它也不会写回程路由,第一个是因为内网使用的是私网地址,运营商没法写,第二个是运营商知道在企业的出口,都会去配置NAPT技术,把内网的IP信息转换成运营商能够正常回包的地址。比如上面的环境,就像家庭网一样,猫出来分配192.168.1.0/24的网络,电脑或者路由器接下面就可以直接上网,因为猫能够处理该网段的信息,同样的上面的出口路由器从互联网那获取了一个地址192.168.1.254,这个互联网是知道这个地址在哪的,它能够去处理与转发,最终内网的192.168.255.1或者其他网段过来转换成该地址,就自然能够穿越互联网抵达服务器那了,换个角度看,它就像换了一个”马甲”伪装了一样,从始至终互联网设备看到的都是192.168.1.254在发数据,是看不到内网里面真实的地址信息的,所以NAT技术还有一个特性是隐藏地址真实信息。

(4)出口路由器在进行NAPT转换以后,在NAT信息中会保存一份记录,叫做NAT会话信息表,它的作用就是记录当前的该会话把源地址以及端口号转换成了多少,当该数据从外网返回的时候,出口路由器能够正常的处理,它可以依据之前生成的会话信息表,来还原成之前的信息。

图片

这里要注意,很多初学者卡在这,觉得为什么要还原呢?,PC2在发起DNS请求的时候,源端口是自己随机生成的(抓包看到得是49153),目的端口是53,它本地会维护这样一个会话,等待服务器的返回,记录的信息就是对应的端口号信息,如果这个时候外网返回的不进行还原,第一个目的地址互联网返回的是192.168.1.254,而不是192.168.255.1,第二个互联网返回的端口号是转换后的3624,实际PC2随机的端口号是49153,这两个是缺一不可的,否则会导致该通信就失败了,这就是要还原的原因,也是为什么要生成这样一个NAT会话表的作用,就是为了后续的数据包能够正常的还原信息返回。

(5)NAT会话信息并不是永久存在的,它有一个生存时间,不同的协议与应用生存时间不一样

图片

通过display firewall-nat session aging-time可以查看,也可以通过firewall-nat session 修改时间

多个内网网段它是如何转换的?

图片

在上面我们只测试了192.168.255.1访问,实际内网有很多内网都需要去访问外网的很多资源,那假设同时用PC2以及client2都去访问61.128.1.1,能不能通呢?

图片

重新抓互联网G0/0/1接口的数据

图片

测试没有问题

图片

过滤一下,只看DNS,有两次请求,两次回应,自然有一个是PC2,一个是client2的,这是经过路由器NAPT转换,所以源地址都变成了192.168.1.254了

图片

源地址都是一样,因为现在出口路由器就一个可上网地址,自然都转换的192.168.1.254,区别不一样的就是源端口,一个是3112,一个是3624,这个就是NAPT的核心机制了,不同的内网终端在经过出口路由器的时候,执行NAPT转换,接口地址只有一个都转换成192.168.1.254,端口号随机转换成不一样的,这样就能够很清晰的区分,当服务器回应这两个请求后,抵达出口路由器的时候,可以根据对应的端口号信息来进行区分,到底哪个回应给PC2的,哪个是回应给client2的,还原成会话信息表中之前的信息进行回复,这样保证只有一个可上网地址的情况下,多私网用户可以上网。

其他外网对接方式如何调用(PPPoE与静态)

#静态专线调用NATinterface GigabitEthernet0/0/1 ip address 219.135.2.55 255.255.255.192  nat outbound 3000这个跟DHCP模式是一样的,直接物理口调用即可
#PPPoE拨号调用NATinterface Dialer1 link-protocol ppp ppp chap user ccieh3c ppp chap password simple ccieh3c.com ppp pap local-user ccieh3c password simple ccieh3c.com mtu 1492 tcp adjust-mss 1452 ip address ppp-negotiate dialer user ccieh3c dialer bundle 1 nat outbound 3000          
这个有点特别,在拨号接口调用,因为实际可上网的地址在拨号口上,而不再物理口

相关文章:

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的? 在上一篇中,我们用任意一个内网的终端都能访问到百度的服务器,但是这是我们在互联网设备上面做了回程路由才实现的,在实际中,之前也说过运营商是不会写任何路由过来的,那对于…...

华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)

华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理,我们需要统一把局域网内的所有AP上线到AC,由AC做集中式管理部署。这里我们需要理解CAPWAP协议,该协议分为两种报文:1、管理报文 2、数据报文。管理报文实际在抓包过程…...

奖励模池化

奖励模池化 奖励模型概述 奖励模型(Reward Model)在机器学习,特别是强化学习领域中被广泛使用。它的主要作用是**对智能体(Agent)的行为进行评估并给予奖励。**例如,在训练一个机器人执行任务时,当机器人的动作符合预期目标(如成功抓取物品、按照正确路线行走等),奖励…...

基于django协同过滤的音乐推荐系统的设计与实现

一、摘要 随着现代音乐的快速发展,协同过滤的音乐推荐系统已成为人们业余生活的需求。该平台采用Python技术和django搭建系统框架,后台使用MySQL数据库进行信息管理;通过用户管理、音乐分类管理、音乐信息管理、歌曲数据管理、系统管理、我的…...

Tiptap,: 富文本编辑器入门与案例分析

Tiptap 是一个现代的富文本编辑器,基于 ProseMirror 打造,旨在提供一个灵活且功能强大的文本编辑解决方案。它具有开箱即用的能力,同时也允许开发者根据业务需求进行高度定制化扩展。与传统的富文本编辑器相比,Tiptap 提供了更精细…...

使用Linux的logrotate工具切割日志:Tomcat、NGINX(journal文件清理)

文章目录 引言I Tomcat日志切割配置轮转参数验证码II NGINX访问文件的配置和切割access.log 访问日志的配置使用Linux的logrotate工具切割日志验证文件切割III /run/log/journaljournalctl文件清理引言 journal文件清理: 只保留过去两天,清理之前的文件 journalctl --vacuu…...

CSS系列(11)-- 滤镜与混合模式详解

前端技术探索系列:CSS 滤镜与混合模式详解 🎨 致读者:探索视觉效果的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 滤镜与混合模式,学习如何创建独特的视觉效果。 滤镜效果详解 🚀 基础滤…...

linux - 存储管理

1.了解硬件 -- 磁盘 硬盘有机械硬盘(HDD)和固态硬盘(SDD) 接下来,主要以机械磁盘为例(更具代表性,在linux系统层面,无论是机械磁盘还是固态硬盘,文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块) 1.盘片&#x…...

在 Kibana 中为 Vega Sankey 可视化添加过滤功能

作者:来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗?了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中,我们将了解如何启用 Vega Sankey 可视…...

styled-components 库的用法介绍和实践总结

styled-components 库的实践用法总结 前言 前段时间开发了一个 NiceTab 浏览器插件,并写了一篇介绍文章,新开发了一款浏览器Tab管理插件,OneTab 的升级替代品, 欢迎品尝!。 在插件中用到了 styled-components 这个库,于是做一个基本的介绍和分享。 在开发 NiceTab 插件…...

SSE(Server-Sent Events)主动推送消息

说明 使用Java开发web应用,大多数时候我们提供的接口返回数据都是一次性完整返回。有些时候,我们也需要提供流式接口持续写出数据,以下提供一种简单的方式。 SSE(Server-Sent Events) SSE 是一种允许服务器单向发送事…...

pandas.core.frame.DataFrame怎么进行对象内容的读写

在 Python 中,pandas.core.frame.DataFrame 是 Pandas 数据库的核心数据结构,可以方便地读取和操作表格数据。以下是几种常见的读取内容的方法: 读取特定列 通过列名获取数据。 # 假设 df 是一个 DataFrame data df["列名"] # …...

短作业优先调度算法

一、实验目的 了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。 二、实验内容 模拟实现SJF调度。 设置作业体:作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运行,F——完成)…...

SpringBoot 应用并发处理请求数的深入解析

SpringBoot 应用并发处理请求数的深入解析 一、引言 在现代Web开发中,了解一个应用程序可以同时处理多少个并发请求是至关重要的。 对于基于Spring Boot构建的应用程序来说,这个问题的答案并非绝对,而是取决于多个因素,包括但不…...

MetaGPT中的教程助手:TutorialAssistant

1. 提示词 COMMON_PROMPT """ You are now a seasoned technical professional in the field of the internet. We need you to write a technical tutorial with the topic "{topic}". """DIRECTORY_PROMPT (COMMON_PROMPT "…...

介绍一款docker ui 管理工具

http://vm01:18999/main.html 管理员登陆账号 jinghan/123456 ui启动命令所在文件夹目录 /work/docker/docker-ui 参考链接 DockerUI:一款功能强大的中文Docker可视化管理工具_docker ui-CSDN博客...

0022 基于SpringBoot的婚纱摄影线上预约系统的设计与实现

电子商城系统 1.项目描述2. 绪论2.1 研究背景2.2 目的及意义2.3 国内外研究现状 3.需求分析4.界面展示5.源码获取 1.项目描述 摘 要 本文旨在研究并开发一套基于Spring Boot框架的婚纱摄影线上预约系统,以满足现代婚纱摄影行业对高效、便捷、个性化服务的需求。该系…...

uni-app在image上绘制点位并回显

在 Uni-app 中绘制多边形可以通过使用 Canvas API 来实现。Uni-app 是一个使用 Vue.js 开发所有前端应用的框架,同时支持编译为 H5、小程序等多个平台。由于 Canvas 是 H5 和小程序中都支持的 API,所以通过 Canvas 绘制多边形是一个比较通用的方法。 1.…...

Comparator.comparing 排序注意

1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 &#xff08;正确的排序方法&#xff09;//倒…...

PPO系列3 - PPO原理

On Policy: 采集数据的模型&#xff0c;和训练的模型&#xff0c;是同一个。缺点&#xff1a;慢&#xff0c;生成一批样本数据&#xff0c;训练一次&#xff0c;又要重新生成下一批。 Off Policy: 采集数据的模型&#xff0c;和训练的模型&#xff0c;不是同一个。有点&#xf…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...