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

【计网】深入理解NAT机制,内网穿透与内网打洞,代理服务

在这里插入图片描述

我没胆量犯错 才把一切错过
--- 林夕 《我对不起我》---

一文了解NAT机制,代理服务,内网穿透

  • 1 再谈 NAT 机制
  • 2 内网穿透与内网打洞
  • 3 代理服务器

1 再谈 NAT 机制

NAT机制我们在解决IP地址不足的问题中提到过。为了解决IP地址不足的问题,采取了私有IP与公网IP的策略:

  • 私有IP是随机分配的,保证在局域网中不重复,在不同子网中可以重复!

那么这样在网络通信过程中势必会造成问题,因为私有IP并不是唯一的,所以私有IP不能出现在公网通信中的。解决这个问题的机制就是NAT机制。NAT机制即在路由器进行转发时将报文源IP更换为路由器WAN口IP,**进行一次源IP地址替换!**这样就可以私有IP就不会出现在公网中!并且在通信过程中够可以层层向下找到唯一的主机!

在这里插入图片描述
上图中,NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;NAT 路由器收到外部的数据时, 又会把目标 IP 从 202.244.174.37 替换回10.0.0.10

  • 这个转换的基础是:在 NAT 路由器内部,有一张自动生成的,用于地址转换的表NAPT;
  • 10.0.0.10 第一次向163.221.120.9发送数据时就会生成表中的映射关系。

此时就会有一个新问题!应该局域网中的多台主机在经过路由器路由转发后,源IP都变成了路由器的WAN口IP,那么这样服务端发送回的报文到达路由器时,目的IP是路由器的WAN口IP。那么路由器如何知道这个报文是要传送给局域网中的哪台主机呢?

  • 这时候 NAPT 来解决这个问题了,使用 IP+port 来建立这个关联关系!

在这里插入图片描述
路由器之中,进行转发时,维护了一张NAPT转换表。其中记录目的IP+端口号port WAN口IP + 端口号port的映射关系,互为键值。这两个都具有唯一性:局域网唯一,公网唯一!源IP发生替换,源端口也可能发生替换!这样保证了映射的唯一性!

每个路由器在转发过程中都会生成一份NAPT表,最终就可以到达公网进行通信!这样其实也说明了一个问题,公网是无法直接访问内网机器的,只有内网机器向公网发送过数据,建立过NAPT表,才能从外部进入内部!

所以NAT 技术是有缺陷的,由于 NAT 依赖这个转换表, 所以有诸多限制:

  • 无法从 NAT 外部向内部服务器建立连接;
  • 转换表的生成和销毁都需要额外开销;一般不需要担心性能不够!
  • 通信过程中一旦 NAT 设备异常,即使存在热备, 所有的 TCP 连接也都会断开;

使用WIndows访问我们的Linux服务端时,我们仔细观察会发现服务端接收到的IP地址和WIndo端是不一致的!
这也是由于路由器NAT转发的结果!Linux服务上的实际获取到的IP是出入口路由器的WAN口IP

2 内网穿透与内网打洞

如果今天可以做到:

  1. 首先我们拥有一个云服务器.
  2. 并且我们在内网构建一个Linux机器,使用22端口部署了一个ssh服务,可以与云服务器建立一个连接。
  3. 云服务器也部署一个服务,可以将机器上所以8888端口获取的数据,可以转到内网的Linux服务器上!
  4. 这样云服务器8888端口与内网服务器的22端口就建立了映射;
  5. 那么其他内网的机器可以通过访问云服务器的8888端口就直接可以访问到内网的Linux机器了!

这样内网的机器就能访问另一台内网的机器了,这叫做内网穿透技术
这个我们可以在云服务器使用frp软件进行内网穿透服务:

  • 服务器:拥有一台具有公网IP地址的服务器,作为FRP的服务端。
  • 客户端:需要穿透的内网机器,作为FRP的客户端。

那么为什么要进行内网穿透呢?内网穿透有这样的优点:

  1. 成本效益:内网穿透可以避免购买服务器公网IP地址的高昂成本,同时也能实现公网服务的功能。
  2. 访问限制:由于NAT(网络地址转换)和防火墙的存在,内网中的设备通常无法直接从外网访问。内网穿透技术可以帮助绕过这些限制,使得内网服务可以被外网访问。
  3. 资源共享:内网穿透使得个人或企业可以将其内网中的资源(如文件服务器、Web服务、数据库等)分享给外网的用户,而无需复杂的网络配置。
  4. 远程管理:系统管理员可以通过内网穿透技术,从外部网络远程管理内网中的服务器或设备,方便进行维护和监控。可以实现远程访问公司服务器进行办公!
  5. 开发与测试:开发者可以在内网环境中开发应用程序,并通过内网穿透技术让外网的测试人员或合作伙伴访问,以便进行测试和反馈。
  6. 安全性:内网穿透可以提供一种更安全的远程访问方式。通过配置,可以限制哪些外部地址可以访问内网服务,从而保护内网资源不被未经授权的访问。

上面的客户端,最终被云服务器获取的源IP是出入口路由器的WAN口IP。服务端这里通过配置会有内网服务器的IP地址与端口号,那么可不可以将服务端IP+port发给客户端,客户端IP+port发给服务端呢?

当然可以,这样客户端就可以直接向内网服务器进行访问,服务端也可以直接给客户端发送数据!这种技术就叫做内网打洞!这样就直接跨过了云服务器,在出入口路由器上打了一个洞,可以直接进行访问!

一些出入口路由器是不允许进行内网打洞,这里我们了解其原理就可以了!

3 代理服务器

在学校,公司这些地方会有对应的校园网,公司网。这样的网络可以提供更好的内网服务或者网络监视。在这个内网中,所有的机器都会先将数据发送到代理服务器上,进行一次处理,在进行转发。这就是一种正向代理服务。

  • 正向代理(Forward Proxy) 是一种常见的网络代理方式, 它位于客户端和目标服务器之间, 代表客户端向目标服务器发送请求。
  • 正向代理服务器接收客户端的请求, 然后将请求转发给目标服务器, 最后将目标服务器的响应返回给客户端。 通过这种方式, 正向代理可以实现多种功能, 如提高访问速度、 隐藏客户端身份、 实施访问控制等。
    在这里插入图片描述
    那么如何做到让所有的机器都会将报文发送到这台服务器上呢?就是通过路由器,在学校公司中,所有的网络配置都是统一进行管控的,最终都会将数据包发送到这个代理服务器上!这个过程是这样的:

• 客户端将请求发送给正向代理服务器。
• 正向代理服务器接收请求, 并根据配置进行处理, 如缓存查找、 内容过滤等。
• 正向代理服务器将处理后的请求转发给目标服务器。
• 目标服务器处理请求, 并将响应返回给正向代理服务器。
• 正向代理服务器将响应返回给客户端

代理服务器有很多优点:

  • 缓存功能: 正向代理服务器可以缓存经常访问的资源, 当客户端再次请求这些资源时, 可以直接从缓存中获取, 提高访问速度。
  • 内容过滤: 正向代理可以根据预设的规则对请求或响应进行过滤, 如屏蔽广告、阻止恶意网站等。
  • 访问控制: 通过正向代理, 可以实现对特定网站的访问控制, 如限制员工在工作时间访问娱乐网站。
  • 隐藏客户端身份: 正向代理可以隐藏客户端的真实 IP 地址, 保护客户端的隐私。
  • 负载均衡: 在多个目标服务器之间分配客户端请求, 提高系统的可扩展性和可靠性。

同样的还有反向代理服务器,用来保证调控服务器群。
在这里插入图片描述

反向代理服务器是一种网络架构模式, 其作为 Web 服务器的前置服务器, 接收来自客户端的请求, 并将这些请求转发给后端服务器, 然后将后端服务器的响应返回给客户端。 这种架构模式可以提升网站性能、 安全性和可维护性等。

  • 反向代理服务器位于客户端和 Web 服务器之间, 当客户端发起请求时, 它首先会到达反向代理服务器。
  • 反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器, 并将 Web 服务器的响应返回给客户端。
  • 在这个过程中, 客户端并不知道实际与哪个 Web 服务器进行了交互, 它只知道与反向代理服务器进行了通信。
  • 这样客户端只会访问这一个代理服务器,代理服务器调控流量,让服务器群负载均衡。

反向代理服务器有以下优点:

  1. 负载均衡: 反向代理服务器可以根据配置的负载均衡策略, 将客户端的请求分发到多个后端服务器上, 以实现负载均衡。 这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
  2. 安全保护: 反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址, 降低其被直接攻击的风险。 同时, 它还可以配置防火墙、 访问控制列表(ACL) 等安全策略,对客户端的请求进行过滤和限制, 以保护后端服务器的安全。
  3. 缓存加速: 反向代理服务器可以缓存后端 Web 服务器的响应内容, 对于重复的请求, 它可以直接从缓存中返回响应, 而无需再次向后端服务器发起请求。 这可以大大减少后端服务器的负载, 提升网站的响应速度。
  4. 内容过滤和重写: 反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写, 例如添加或删除请求头、 修改请求路径等。 这有助于实现一些特定的业务需求, 如 URL 重写、 用户认证等。
  5. 动静资源分离: 在大型网站中, 通常需要将静态资源和动态资源分开处理。 通过将静态资源部署在反向代理服务器上, 可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。 这可以大大提升静态资源的访问速度。 CDN(Content Delivery Network, 内容分发网络) 就是采用了反向代理的原理。

那么NAT和代理服务器的功能好像有点类似啊?

  • 路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。
  • 代理服务器看起来和 NAT 设备有一点像。 客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端。

那么 NAT 和代理服务器的区别有哪些呢?

  1. 从应用上讲:NAT 设备是网络基础设备之一,解决的是 IPv4版本IP 不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
  2. 从底层实现上讲:NAT 是工作在网络层,直接对 IP 地址进行替换。代理服务器往往工作在应用层。
  3. 从使用范围上讲: NAT 一般在局域网的出口部署;代理服务器可以在局域网做,也可以在广域网做,也可以跨网。
  4. 从部署位置上讲:NAT 一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。

相关文章:

【计网】深入理解NAT机制,内网穿透与内网打洞,代理服务

我没胆量犯错 才把一切错过 --- 林夕 《我对不起我》--- 一文了解NAT机制,代理服务,内网穿透 1 再谈 NAT 机制2 内网穿透与内网打洞3 代理服务器 1 再谈 NAT 机制 NAT机制我们在解决IP地址不足的问题中提到过。为了解决IP地址不足的问题,采…...

C# 创建型设计模式----工厂模式

1 、什么是工厂模式 简单来说就是由一个对象去生成不同的对象,工厂模式是用工厂方法代替new操作的一种模式。工厂方法封装了多个相关联类的new方法,每次实例化这些类的时候不需要new多次,只需要调用工厂类的对应方法即可实例化这些类&#x…...

java中Scanner的nextLine和next方法

思考&#xff0c;输入1 2 3 4 5加上enter&#xff0c;输出什么 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[][] m new int[2][2];for (int i 0; i < 2; i) {for (int j 0; j < 2;…...

2024年全国山洪径流模拟与洪水危险性评价技术及典型地区洪水淹没及损失分析

洪水淹没危险性&#xff08;各种年遇型洪水淹没&#xff09;是洪水损失评估、风险评估及洪水应急和管理规划等工作的重要基础。当前开展洪水危险性研究工作中的主要困难之一是水文资料稀缺&#xff0c;尤其是径流资料稀缺&#xff0c;既包括径流观测资料在时间上的短缺&#xf…...

CDC 同步数据需要的MySQL数据权限

授权命令如下: grant Replication client on *.* to username%; grant Replication slave on *.* to username%; flush privileges;...

Ubuntu20.04 更新Nvidia驱动 + 安装CUDA12.1 + cudnn8.9.7

一、概述 最近客户给了几台GPU服务器,长期放置落灰那种,然后想利用起来,所以上去看看了配置,系统是Ubuntu20.04,相关的驱动版本稍嫌老一些,所以需要更新Nvidia驱动,同时在安装CUDA和CUDNN,查看了显卡型号之后,打算使用onnxruntime进行推理,对比了版本,最后选择了CUD…...

算法自学 Lesson3 - 逻辑回归(LR)

目录 背景 一、适用数据集 1. 数据集选择 1.1 领域 1.2 数据集维度 1.3 记录行&#xff08;样本数量&#xff09; 2. 本文数据集介绍 3. 数据集下载 注意 二、逻辑回归的基本原理 1. 目的 2. Sigmoid 函数 3. 类别划分 4. 召回率 三、代码 1. 导入所需包&数…...

文件IO流

1.文件流概念 2.文件创建方式 3.常用方法 4.IO流原理 &#xff08;1&#xff09;InputStream&#xff0c;OutputStream, Reader, Writer四个都是抽象类&#xff0c;无法直接new, 需要由子类继承&#xff0c;然后new子类&#xff1b; &#xff08;2&#xff09;Reader和Writer…...

拥塞控制与TCP子问题(粘包问题,异常情况等)

​拥塞控制 除了拥塞控制 以上的策越都是为了解决tcp 客户端和服务端提高效率&#xff0c;解决丢包的策略 但是拥塞控制是了为解决网络拥堵 出现了大面积丢包&#xff0c;我们发送方会判定是网络出现了问题&#xff1f; 丢包好解决&#xff0c;我们直接采用超时重传&#…...

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA&#xff0c;转运到另一个数组DataB中&#xff0c;这个基本结构里的各个参数应该如何配置呢&#xff1f; 首先是外设站点和存储器站点的起始地址、…...

【使用Flask构建RESTful API】从零开始开发简单的Web服务!

使用Flask构建RESTful API&#xff1a;从零开始开发简单的Web服务 引言 随着Web应用程序的广泛使用&#xff0c;RESTful API已成为现代Web服务的核心技术之一。通过RESTful API&#xff0c;我们可以轻松地创建、读取、更新和删除&#xff08;CRUD&#xff09;数据&#xff0c…...

用sdcc给51单片机编译C程序

学习单片机大部分人用的是Keil uVision&#xff0c;虽然好用&#xff0c;可大部分人用的是盗版&#xff0c;其实单片机程序小的话&#xff0c;完全可以用文本编辑器&#xff08;推荐notepad)编写&#xff0c;然后用免费的sdcc来编译&#xff0c;下面介绍一下大致的过程。 sdcc…...

Java Lock LockSupport 源码

前言 相关系列 《Java & Lock & 目录》&#xff08;持续更新&#xff09;《Java & Lock & LockSupport & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & Lock & LockSupport & 总结》&#xff08;学习总结/最新…...

Elasticsearch基础操作入门

阅前准备知识 学习 Elasticsearch (简称 ES) 的查询方式&#xff0c;建议从以下几个步骤入手&#xff1a; 理解 Elasticsearch 的基础概念 首先要了解 Elasticsearch 的核心概念&#xff0c;例如&#xff1a; Index&#xff08;索引&#xff09;&#xff1a;相当于数据库中…...

跨域问题解决办法

跨域问题在Web开发中是一个常见的问题&#xff0c;特别是在前后端分离的开发模式下。以下是一些解决跨域问题的办法&#xff1a; 一、后端配置CORS&#xff08;跨来源资源共享&#xff09; CORS是一种机制&#xff0c;它使用额外的HTTP头来告诉浏览器一个网页的当前来源&…...

【数据结构与算法】力扣 23. 合并 K 个升序链表

题干描述 23. 合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a; lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a; [1,1,2,3,4,4,5,6]…...

Java Lock CountDownLatch 总结

前言 相关系列 《Java & Lock & 目录》&#xff08;持续更新&#xff09;《Java & Lock & CountDownLatch & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & Lock & CountDownLatch & 总结》&#xff08;学习总…...

vue+spreadjs开发

创建vue3项目 pnpm create vite --registryhttp://registry.npm.taobao.org安装spreadjs包 pnpm install "grapecity-software/spread-sheets17.1.7" "grapecity-software/spread-sheets-resources-zh17.1.7" "grapecity-software/spread-sheets-vu…...

针对初学者的PyTorch项目推荐

文章目录 1. MNIST手写数字识别2. CIFAR-10图像分类3. 图像风格迁移4. 文本生成&#xff08;使用RNN&#xff09;5. 简单的问答系统6. 简单的生成对抗网络&#xff08;GAN&#xff09;7. 简单的推荐系统 对于初学者来说&#xff0c;选择一些简单且具有教育意义的项目来实践PyTo…...

Helm Chart文件介绍

介绍&#xff08;这个还没有完善 &#xff0c;目前在找工作呢&#xff09; Helm是Kubernetes的包管理器&#xff0c;类似于Ubuntu中的apt、CentOS中的yum或Python中的pip&#xff0c;可以快速查找、下载和安装软件包。Helm主要由客户端组件helm和服务端组件Tiller组成&#xf…...

1Panel 是新一代的 Linux 服务器运维管理面板

1Panel 是一款新一代的 Linux 服务器运维管理面板&#xff0c;旨在通过现代化的 Web 界面帮助用户轻松管理 Linux 服务器。它集成了主机监控、文件管理、数据库管理、容器管理等功能&#xff0c;并且支持多语言和国际化&#xff0c;包括英语、中文(繁体)和日语。以下是 1Panel …...

Qml-ShaderEffect的使用

Qml-ShaderEffect的使用 ShaderEffect的概述 ShaderEffect使用自定义的顶点和片段着色器用于渲染一个矩形。用于在qml场景中添加阴影、模糊、着色和页面卷曲等效果。 Qt5和Qt6中ShaderEffect有一定区别&#xff0c;在Qt6中由于支持不同的渲染API&#xff0c;ShaderEffect是用…...

鸿蒙next之axios二次封装并携带cookie

由于官方提供的ohos.net.http模块&#xff0c;直接使用不是很灵活&#xff0c;就引入了第三方ohos/axios库。 以下是引入axios并进行二次封装的步骤&#xff1a; 1、DevEco Studio打开终端输入命令安装插件 ohpm install ohos/axios 2、新建RequestUtil.ets import { JSON, …...

WordPress中最值得推荐的AI插件:专家级指南

WordPress平台上&#xff0c;人工智能&#xff08;AI&#xff09;技术不断发展&#xff0c;为用户提供了丰富的工具和功能。对于有经验的用户&#xff0c;这些工具不仅能提升网站性能和用户体验&#xff0c;还能在安全和互动方面提供更多支持。在这篇文章中&#xff0c;我将为大…...

HTTP介绍及请求过程

HTTP(HyperText Transfer Protocol),即超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。以下是关于 HTTP 的详细介绍: 一、基本概念 定义与作用: HTTP 是互联网上应用最为广泛的一种网络协议,它定义了客户端和服务器之间请求和响应的标准方式。…...

WebGL进阶(五)-可视域

理论基础&#xff1a; 顶点着色器 Vertex Shader 主要是负责处理顶点位置、顶点颜色、顶点向量等顶点的数据&#xff1b;处理一些顶点的变换&#xff1a;例如在进行视图变换和投影变换时MVP矩阵会改变顶点的位置信息。 输入&#xff1a; 顶点着色器输入部分主要是声明&…...

2024性价比家居好物有哪些?推荐五款值得每个家庭拥有的好物品牌!

每年双11的时候我都特别喜欢买一些家居好物&#xff0c;今年双11也不例外&#xff0c;经过我一两周的精心挑选&#xff0c;专门选了五款性价比高的家居好物&#xff0c;接下来给大家分享一下&#xff01; 家居好物一、希亦ACE Pro内衣洗衣机 我买过、评测过的内衣洗衣机&#…...

字节青训-查找热点数据问题

问题描述 给你一个整数数组 nums 和一个整数 k&#xff0c;请你返回其中出现频率前 k 高的元素。请按升序排列。 1 < nums.length < 10^5k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一&#xff0c;换句话说&#xff0c;数组中前 k 个高频元素的集合…...

Codeforces Round 981 (Div. 3) (A~F)

文章目录 A. Sakurako and Kosuke思路code B. Sakurako and Water思路code C. Sakurakos Field Trip思路code D. Kousukes Assignment思路code E. Sakurako, Kosuke, and the Permutation思路code F. Kosukes Sloth思路code Codeforces Round 981 (Div. 3) A. Sakurako and Ko…...

shell脚本实例(4)while实现1+...+100,linux新增用户

while实现1到100求和 #!/bin/bash/ s0 i1 #-le小于等于 while [ $i -le 100 ] dos$[ $s$i ]i$[ $i1 ] done echo $s echo $i 执行结果如下 修改用户名密码脚本 #!/bin/bash/ #提示用户输入用户名 read -p "请输入用户名&#xff1a;"username useradd $username #提…...

wordpress怎么开启/sem和seo区别与联系

设计思想与代码规范均借鉴明德扬至简设计法&#xff0c;有不足之处希望大家多提建议&#xff0c;真正做到至简设计。本篇着重提出FPGA通用设计思想&#xff0c;以计数器为核心的代码规范以及VIVADO debug操作流程。  此次试验旨在通过串口试验&#xff0c;讲述FPGA的硬件设计…...

凡科网站模板/又一病毒来了比新冠可怕

前言 之前我有整理过一系列文章“支付功能如何测试&#xff1f;”&#xff0c;“抖音直播要如何测试”&#xff0c;“微信红包如何测试”&#xff0c;很多学生说是及时雨&#xff0c;帮助了他们的测试面试&#xff0c;需要的同学可以点击查看&#xff08;附上文章链接&#xf…...

大良网站建设市场/软文广告100字

目录 一&#xff0c;写在前面 二&#xff0c;栈的定义 1&#xff0c;栈的定义 2&#xff0c;进栈出栈变化形式 三&#xff0c;栈的抽象数据类型 四&#xff0c;栈顺序存储结构及实现 1&#xff0c;栈的顺寻存储结构 2&#xff0c;栈的顺序存储结构——进栈操作 3&…...

一个企业做网站的意义/2022百度搜索风云榜

使用php下载图片的时候遇到md5问题, 源图片通过http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png下载,原图和curl获取到图片源时的md5一致,但使用php中的fwrite后就不行.问sf的朋友们: 如何用PHP保存图片的时候使得md5值不变!代码如:/*** 加载图片**/$save_d…...

淘宝做轮播广告哪个网站好/市场推广怎么做

Swift中的注释 使用"// MARK:- 注释内容",对属性或方法进行注释 使用"///注释内容"对属性或方法提供调用说明的注释 使用extension对同一个类中的相关方法进行划分. extension类似于OC中的category,也是只能扩充方法,不能扩充属性 使用代码添加UITableView…...

wordpress 空间推荐/网络营销的工具和方法

多年以后&#xff0c;面对办公室的屏幕&#xff0c;我会回忆起开始肝第二周OO作业的那个遥远的下午。那时的程序是一个一两百行的符号求导&#xff0c;基类与接口在包里一字排开&#xff0c;工整的注释一望到底 谁能想到&#xff0c;接下来的十几个小时我要经历什么样的噩梦&am…...