内网是如何访问到互联网的(华为源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          
这个有点特别,在拨号接口调用,因为实际可上网的地址在拨号口上,而不再物理口

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

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

相关文章

C++编程: 基于cpp-httplib和nlohmann/json实现简单的HTTP Server

文章目录 0. 引言1. 完整实例代码2. 关键实现3. 运行与测试 0. 引言 本文基于 cpp-httplib 和 nlohmann/json 实现简单的 HTTPS Server 实例代码&#xff0c;这两个库均是head-only的。 1. 完整实例代码 如下实例程序修改自example/server.cc #include <httplib.h>#i…

收银pos源代码(Win版+安卓版)

1.收银pos版本 支持市面上主流系统版本&#xff0c;如支持win版&#xff08;exe安装包&#xff09;、安卓版&#xff08;apk安装包&#xff09;&#xff1b; 2.多样化收银 支持Windows收银机、安卓收银机、ai智能称重、收银称重一体机、无人自助收银、手机端收银等&#xff…

springboot项目如何运行起来

时常开发好的springboot项目是如何运行起来的&#xff1f; 经常会使用到打包插件spring-boot-maven-plugin SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包。在pom文件里加入这个插件即可&#xff1a; org.springframework.boot spring-b…

ubuntu18.04配置实时内核

ubuntu系统&#xff1a;18.04 当前内核&#xff1a;5.4.0-84-generic 待安装实时内核&#xff1a; 5.6.19-rt11 1、查看当前版本 uname -r 2、下载内核与补丁 一种方式从官网自己下载 官方内核下载地址官方补丁下载地址阿里镜像内核下载地址&#xff08;速度快&#xff0…

Centos7环境下安装Flink1.20

目录 介绍1、涉及安装包2、节点3、修改hostname4、将flink安装包上传并解压5、修改配置文件6、修改masters和workers&#xff08;所有节点&#xff09;7、集群启停 介绍 Flink 是一个分布式系统&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的…

EXCEL数据清洗的几个功能总结备忘

目录 0 参考教材 1 用EXCEL进行数据清洗的几个功能 2 删除重复值&#xff1a; 3 找到缺失值等 4 大小写转换 5 类型转化 6 识别空格 0 参考教材 精通EXCEL数据统计与分析&#xff0c;中国&#xff0c;李宗璋用EXCEL学统计学&#xff0c;日EXCEL统计分析与决策&#x…

深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理

深入解析Vue3响应式系统&#xff1a;从Proxy实现到依赖收集的核心原理 响应式系统的基本原理 作为一个热门的JavaScript框架&#xff0c;Vue在3.x版本中引入了基于Proxy的响应式系统。这个系统的核心思想是利用Proxy对象拦截对数据的访问和修改&#xff0c;从而实现数据的自动更…

Visual Studio 2022 安装和管理 GitHub Copilot

文章目录 前言一、&#x1f6e0;️安装 GitHub Copilot1.1 安装 GitHub Copilot Chat1.2 使用 Visual Studio 安装程序进行安装1.3 使用“管理扩展”对话框进行安装&#xff08;推荐&#xff09; 二、&#x1f3ad;管理 Copilot 状态2.1 Copilot 处于活动状态2.2 Copilot 处于非…

git企业的使用详细命令行操作

git是Linux创始人通过内核开发而创作的分布式版本的控制系统&#xff0c;而我们作为开发者需要开发与维护&#xff0c;避免不了版本的迭代和更新&#xff0c;git就是用来保存修改删除等操作的工具&#xff0c;可以记录代码改动情况&#xff0c;它能够保存代码的每个版本&#x…

高中数学:随机变量-二项分布与超几何分布(独立重复实验)

文章目录 一、二项分布伯努利实验概率公式均值与方差公式归纳例题 二、超几何分布定义均值例题 一、二项分布 伯努利实验 概率公式 补充&#xff1a;二项式定理 均值与方差公式 归纳 例题 二、超几何分布 定义 均值 证明 例题

【Leetcode】滑动窗口算法-编程苍穹下划破数据暗夜的高效光弧

前言 &#x1f31f;&#x1f31f;本期讲解关于滑动窗口问题~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不多说直接…

go-zero(十二)消息队列

go zero 消息队列 在微服务架构中&#xff0c;消息队列主要通过异步通信实现服务间的解耦&#xff0c;使得各个服务可以独立发展和扩展。 go-zero中使用的队列组件go-queue&#xff0c;是gozero官方实现的基于Kafka和Beanstalkd 的消息队列框架,我们使用kafka作为演示。 一、…

Django基础之模板

一.前言 前面我们讲了视图&#xff0c;我们今天来讲一下模板&#xff0c;模板其实也就是视图中render返回的html进行的渲染&#xff0c;然后展示到浏览器页面上去&#xff0c;那我们今天就来和大家来说一下模板的基本用法 二.寻找html模板 这个也就是我们前面说了的找html&a…

基于回溯法解决八皇后问题+以位运算方法优化n皇后问题(算法与数据结构期末设计)

文章目录 基于回溯法解决八皇后问题以位运算方法优化n皇后问题1. 八皇后问题问题描述2.回溯法求八皇后&#xff08;n皇后&#xff09;问题①由四皇后问题引入②皇后的占位问题③皇后的放置过程④放置过程中的问题⑤回溯算法核心⑥回溯算法的求解过程⑦验证算法和代码实现LeetCo…

Linux - MySQL迁移至一主一从

Linux - MySQL迁移至一主一从 迁移准备安装MySQL ibd文件迁移原服务器操作目标服务器操作 一主一从增量同步异常解决结尾 首先部分单独安装MySQL&#xff0c;请参考Linux - MySQL安装&#xff0c;迁移数据量比较大约400G左右且网络不通故使用文件迁移&#xff0c;需开启一段时间…

PaddleOCR模型ch_PP-OCRv3文本检测模型研究(一)骨干网络

从源码上看&#xff0c;PaddleOCR一共支持四个版本&#xff0c;分别是PP-OCR、PP-OCRv2、PP-OCRv3、PP-OCRv4。本文选择PaddleOCR的v3版本的骨干网络作为研究对象&#xff0c;力图探究网络模型的内部结构。 文章目录 研究起点卷归层压发层残差层骨干网代码实验小结 研究起点 参…

数据结构——栈的模拟实现

大家好&#xff0c;今天我要介绍一下数据结构中的一个经典结构——栈。 一&#xff1a;栈的介绍 与顺序表和单链表不同的是&#xff1a; 顺序表和单链表都可以在头部和尾部插入和删除数据&#xff0c;但是栈的结构就锁死了&#xff08;栈的底部是堵死的&#xff09;栈只能从…

Ubuntu 安装 Samba Server

在 Mac 上如何能够与Ubuntu 服务器共享文件夹&#xff0c;需要在 Ubuntu 上安装 Samba 文件服务器。本文将介绍如何在 Ubuntu 上安装 Samba 服务器从而达到以下目的&#xff1a; Mac 与 Ubuntu 共享文件通过用户名密码访问 安装 Samba 服务 sudo apt install samba修改配置文…

Alan Chhabra:MongoDB AI应用程序计划(MAAP) 为客户提供价值

MongoDB全球合作伙伴执行副总裁 Alan Chhabra 每当有人向我问询MongoDB&#xff0c;我都会说他们很可能在不觉之间已经与MongoDB有过交集。事实上&#xff0c;包括70%财富百强在内的许多世界领先企业公司都在使用MongoDB。我们在MongoDB所做的一切都是为了服务客户&#xff0c…

计算机组成原理与系统结构——微程序控制

笔记内容及图片整理自XJTUSE “计算机组成原理与系统结构” 课程ppt&#xff0c;仅供学习交流使用&#xff0c;谢谢。 基本概念 微指令 将控制单元实现为基本逻辑单元之间的互连并非易事&#xff0c;且设计相对呆板&#xff0c;难以灵活地改变&#xff0c;因此实现微程序控制…