NAT、代理服务与内网穿透技术全解析

🍑个人主页:Jupiter.
🚀 所属专栏:Linux从入门到进阶
欢迎大家点赞收藏评论😊

在这里插入图片描述

在这里插入图片描述

目录

    • `NAT 技术背景`
    • `NAT IP 转换过程`
    • `NAPT`
          • `NAT 技术的缺陷`
      • `代理服务器`
            • `正向代理`
            • `工作原理`
            • `功能特点`
            • `应用场景`
      • `反向代理`
            • `基本原理`
            • `应用场景`
      • `NAT 和代理服务器`
      • `内网穿透`
      • `内网打洞`
      • `手动部署内网穿透`
    • 环境准备:
    • 测试


NAT 技术背景

之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题,NAT 技术是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能;

  • NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是就是一种将私有 IP 和全局IP 相互转化的技术方法:
  • 很多学校, 家庭, 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务器上设置全局 IP;
  • 全局 IP 要求唯一, 但是私有 IP 不需要; 在不同的局域网中出现相同的私有 IP是完全不影响的;

下面的问题就能够被解决了。

在这里插入图片描述
上面图话有一点没有画,就是消息返回的时候,具体怎么到用户的主机的过程;

NAT IP 转换过程

NAT(Network Address Translation,网络地址转换)IP转换过程主要涉及数据包在内部网络(私有IP地址)和外部网络(公有IP地址)之间的转换,以实现内部网络主机与外部网络主机之间的通信。以下是NAT IP转换的详细过程:

  1. 数据包从内网发往外网
  • 发送数据包:内部网络的主机(源主机)生成一个数据包,该数据包的源IP地址为内部网络的私有IP地址,目的IP地址为外部网络的主机(目标主机)的公有IP地址。
  • 地址转换:当数据包到达NAT设备(通常是路由器)时,NAT设备将数据包中的源IP地址(私有IP)和源端口号转换为NAT设备自身的公有IP地址和一个随机或预分配的端口号。这个转换过程会在NAT转换表中记录一条映射关系,以便后续能够正确地将响应数据包发送回内网主机。
  • 发送转换后的数据包:NAT设备将转换后的数据包发送到外部网络,此时数据包的源IP地址和源端口号已经变为NAT设备的公有IP地址和相应的端口号。
  1. 数据包从外网返回内网
  • 接收响应数据包:外部网络的目标主机收到数据包后,根据数据包中的目的IP地址(NAT设备的公有IP)和目的端口号进行处理,并生成响应数据包。响应数据包的源IP地址和源端口号为目标主机的公有IP地址和端口号,目的IP地址和目的端口号为NAT设备的公有IP地址和之前转换时使用的端口号。
  • 地址转换:当响应数据包到达NAT设备时,NAT设备会查找NAT转换表中与数据包中的目的IP地址和目的端口号相匹配的映射关系。找到后,NAT设备将数据包的目的IP地址和目的端口号转换回内部网络主机的私有IP地址和端口号。
  • 发送转换后的响应数据包:NAT设备将转换后的响应数据包发送到内部网络,此时数据包的目的IP地址和目的端口号已经变回内部网络主机的私有IP地址和相应的端口号。
    在这里插入图片描述
  • NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;
  • NAT 路由器收到外部的数据时, 又会把目标 IP 从 202.244.174.37 替换回10.0.0.10;
  • 在 NAT 路由器内部, 有一张自动生成的, 用于地址转换的表;
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;

NAPT

那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的 IP 都是相同的. 那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机?

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

这种关联关系也是由 NAT 路由器自动维护的. 例如在 TCP 的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项

NAT 技术的缺陷

由于 NAT 依赖这个转换表, 所以有诸多限制:

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

代理服务器

正向代理
  • 正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。

在这里插入图片描述

工作原理
  • 客户端将请求发送给正向代理服务器。
  • 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
  • 正向代理服务器将处理后的请求转发给目标服务器。
  • 目标服务器处理请求,并将响应返回给正向代理服务器。
  • 正向代理服务器将响应返回给客户端。
功能特点
  • 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度。
  • 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
  • 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
  • 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
  • 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。
应用场景
  • 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密。

  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。

  • 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。

  • 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟。

  • 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。

反向代理

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

在这里插入图片描述

基本原理
  • 反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
  • 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。

  • 安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。

  • 缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。

  • 内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL 重写、用户认证等。

  • 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。

  • CDN(Content Delivery Network,内容分发网络)就是采用了反向代理的原理

NAT 和代理服务器

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

  • 从应用上讲, NAT 设备是网络基础设备之一, 解决的是 IP 不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
  • 从底层实现上讲, NAT 是工作在网络层, 直接对 IP 地址进行替换. 代理服务器往往工作在应用层.
  • 从使用范围上讲, NAT 一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.
  • 从部署位置上看, NAT 一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上. 代理服务器是一种应用比较广的技术.
  • 翻墙: 广域网中的代理.
  • 负载均衡: 局域网中的代理.
    代理服务器又分为正向代理和反向代理.

正向代理用于请求的转发(例如借助代理绕过反爬虫). 反向代理往往作为一个缓存.

内网穿透

在这里插入图片描述

内网打洞

在这里插入图片描述

手动部署内网穿透

  • 需要一个云服务器,一台本地主机,与一个不在本地的主机。

环境准备:

首先,下载frp,下载下来它就是一个可执行程序。
frp 下载:下载地址
如果下载太慢了,可以使用 github 提速工具,Watt Toolkit 官网:
在这里插入图片描述

然后将该文件远程拷贝到本地主机(虚拟机)上:
在这里插入图片描述

这样,云服务器与虚拟机上都有了frp。

下载完后,解压,会出现两个可执行程序与两个对应的配置文件。
如下图:
在这里插入图片描述
2.更改配置文件内容。

服务端文件配置
服务端:可以设置其他的选项,这里仅测试。
端口号默认是7000,这里改为8888做测试。
在这里插入图片描述
运行的时候,如果直接 ./frps运行,使用的是默认的端口号7000,如图:
在这里插入图片描述
如果想要使用我们的配置文件,需要带选项 -c指明配置文件路径
./frps -c ./frps.toml
在这里插入图片描述

客户端文件配置:

未来就是会通过其他地方的主机(比如学校,公司),来通过云服务器(代理服务器)访问本地主机,实际上是云服务器通过frps把请求转发给本地主机的frpc,实际上在本地主机的内部还需要将frpc收到的请求再一次转发,给本地主机部署的相关服务(这里是sshd,这个服务默认都是启动的,这样就可以远程连接了),所以在本机上实际上还有一次转发的。
在这里插入图片描述

当客户端向外提供一个22号端口的服务,但是在公司或其他的主机不知道,只知道云服务器的端口号,所以需要将22号端口映射到云服务器上指定的端口,也就是配置文件中的"remotePort = 6000 ",也就是说,如果其他主机想要访问云服务上的端口6000,此时这个请求就会被转发到本地主机内网的22号端口上。上面的端口号8888,是用来让本地主机frpc与云服务器frps建立连接用的。

在这里插入图片描述
到这里就配置完成了。

然后将云服务器上frps程序启动,本地主机frpc启动,这样云服务器与本地主机的连接就建立好了。
在这里插入图片描述
可以理解为:当客户端连接服务端8888号端口时,客户端会将自己配置文件中的remoteport推送给服务器,告诉服务器,在服务器中新启一个listen套接字,并绑定端口remoteport 8081,8081端口映射的是本地主机内部的22号端口,未来有主机访问请求8081端口,就通过内网穿透将请求发给本地主机的22号端口。

测试

我们做两个测试

• ssh 远程登录

使用云服务器IP地址与remoteport端口,就可以远程登录本地主机了。
在这里插入图片描述
• nginx 远程访问

nginx的安装

sudo yum install nginx # centos 安装
sudo apt install nginx # ubuntu 安装
#启动
$ nginx
#暂停
# nginx -s stop

在这里插入图片描述

查看nginx本地绑定的端口:80
在这里插入图片描述

我们在本地主机通过浏览器访问端口号 80,127.0.0.1:80 也可以访问到该服务器上的nginx
在这里插入图片描述
本地的nginx服务已经有了,所以只需要更改配置文件,映射一个端口号出去,外网也就可以访问了。
在这里插入图片描述
在这里插入图片描述
所以,在其他主机上,通过浏览器也可以访问部署到本地主机的nginx服务了。
云服务的ip:映射的端口号8082
在这里插入图片描述
nginx 首页默认 apt 安装之后, 首页是:/var/www/html/XXX(index.nginx-debian.html)
可以进入修改首页信息。

服务器和客户端都可以这样在后台启动

nohup ./frpc -c ./frpc.toml &> /dev/null &
nohup ./frps -c ./frps.toml &> /dev/null &
  • ./frpc -c ./frpc.toml 就是程序启动指令
  • &> /dev/null:这是重定向操作,用于将命令的标准输出(stdout)和标准错误(stderr)都重定向到/dev/null。/dev/null 是一个特殊的设备文件,向它写入的内
    容都会被丢弃,读取它则会立即返回文件结束。因此,这个操作的作用是忽略命令的所有输出信息。
  • 最后一个&,就是将该进程放到后端运行。

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

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

相关文章

优选算法 - 1 ( 双指针 移动窗口 8000 字详解 )

一&#xff1a;双指针 1.1 移动零 题目链接&#xff1a;283.移动零 class Solution {public void moveZeroes(int[] nums) {for(int cur 0, dest -1 ; cur < nums.length ; cur){if(nums[cur] 0){}else{dest; // dest 先向后移动⼀位int tmp nums[cur];nums[cur] num…

qt配合映美精取图开发

最近开发一个项目&#xff0c;用映美精相机配合halcon做取图开发&#xff0c;由于网上资料小特意写个记录。到映美精官网下载驱动&#xff0c;映美精官网&#xff0c;下载映美精的工具开发包SDK 映美精的SDK下载SDK后找到classlib文件夹 里面就是SDK新建一个qt程序&#xff0c…

华为云计算HCIE-Cloud Computing V3.0试验考试北京考场经验分享

北京试验考场 北京考场位置 1.试验考场地址 北京市海淀区北清路156号中关村环保科技示范园区M地块Q21楼 考试场选择北京&#xff0c;就是上面这个地址&#xff0c;在预约考试的时候会显示地址&#xff0c;另外在临近考试的时候也会给你发邮件&#xff0c;邮件内会提示你考试…

LeetCode 509.斐波那契数

动态规划思想 五步骤&#xff1a; 1.确定dp[i]含义 2.递推公式 3.初始化 4.遍历顺序 5.打印dp数组 利用状态压缩&#xff0c;简化空间复杂度。在原代码中&#xff0c;dp 数组保存了所有状态&#xff0c;但实际上斐波那契数列的计算只需要前两个状态。因此&#xff0c;我们…

反向代理开发

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

RabbitMQ — 异步调用

RabbitMQ 是一个开源的消息代理中间件&#xff0c;它使用高级消息队列协议&#xff08;AMQP, Advanced Message Queuing Protocol&#xff09;来实现不同系统之间的消息传递。它以 Erlang 语言编写&#xff0c;具有高可靠性、灵活性和易于扩展的特点&#xff0c;被广泛应用于异…

2025 年使用 Python 和 Go 解决 Cloudflare 问题

作为一名从事网络自动化和爬取工作的开发者&#xff0c;我亲眼目睹了日益复杂的安全性措施带来的挑战。其中一项挑战是 Cloudflare 的 Turnstile CAPTCHA 系统&#xff0c;目前该系统已在全球 2600 多万个网站上使用。这种先进的解决方案重新定义了我们对机器人检测的处理方式&…

大数据的实时处理:工具和最佳实践

在当今的数字世界中&#xff0c;数据以前所未有的速度从无数来源生成&#xff0c;包括社交媒体、物联网设备、电子商务平台等。随着组织认识到这些数据的潜在价值&#xff0c;他们越来越多地转向实时处理&#xff0c;以获得即时、可操作的见解。但是&#xff0c;实时处理大数据…

104、Python并发编程:基于事件Event实现多线程间的同步

引言 继续介绍关于多线程同步的实现方式&#xff0c;本文将介绍基于Event的线程同步方式。 本文的主要内容有&#xff1a; 1、什么是Event 2、Event的使用场景 3、Event的代码实例 4、Event与Condition的比较 什么是Event 在Python的多线程编程中&#xff0c;Event是一个…

第2章2.3立项【硬件产品立项的核心内容】

硬件产品立项的核心内容 2.3 硬件产品立项的核心内容2.3.1 第一步&#xff1a;市场趋势判断2.3.2 第二步&#xff1a;竞争对手分析1.竞争对手识别2.根据竞争对手分析制定策略 2.3.3 第三步&#xff1a;客户分析2.3.4 第四步&#xff1a;产品定义2.3.5 第五步&#xff1a;开发执…

ReactPress数据库表结构设计全面分析

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress是一个基于React框架开发的开源发布平台和内容管理系统&#xff08;CMS&#xff09;。它不仅支持用户在支持React和MySQL数据库的服务器上搭建自己的博客和网站&#…

ANDROIDWORLD: A Dynamic BenchmarkingEnvironment for Autonomous Agents论文学习

这个任务是基于androidenv的。这个环境之前学过&#xff0c;是一个用来进行强化学习的线上环境。而这篇文章的工作就是要给一些任务加上中间的奖励信号。这种训练环境的优点就是动态&#xff0c;与静态的数据集&#xff08;比如说我自己的工作&#xff09;不同&#xff0c;因此…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本&#xff0c;公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议&#xff0c;现打算迁移到IS-IS路由协议&#xff0c;张同学正在该公司实习&#xff0c;为了提高实际工作的准确性和…

python-26-Python ORM系列之pymysql实现对数据库的增删改查及新建表

python-26-Python ORM系列之pymysql实现对数据库的增删改查及新建表 一.简介 在Python基础系列ORM部分我们为大家介绍了如何搭建MySQL数据和MySQL一些访问配置&#xff0c;同时细节的同学应该已经了解到了ORM的2个库pymysql和sqlalchemy&#xff1b; PyMySQL — MySQL 数据库…

ADSP21489 M25P16启动后无法使用USBi的问题

项目背景是ADSP21489 使用SPI MASTER 启动模式,程序存储在M25P16中 编译cces产生运行代码 第二步,插上USBi仿真器下载sigma topo 发现无法正常下载 操作多次发现需要目标板重新上点后需要拔插usbi才能下载和启动dsp程序 原因分析: 就是第一次插上usbi后,在给目标板上电,可…

量子计算包kaiwu安装过程踩过的坑

目录 1 安装过程 2 官方代码测试 3 踩坑说明 首先&#xff0c;目前的kaiwu版本仅支持python3.8&#xff0c;所以必须要下载python3.8才能运行kaiwu 1 安装过程 step1: 在页面的SDK标签下&#xff0c;找到对应操作系统的kaiwu包。 step2: 下载python3.8到本地&#xff0c;可…

线程相关概念

线程概念 线程是操作系统中一种基本的执行单元&#xff0c;是程序的最小调度单位。一个程序可以包含多个线程&#xff0c;每个线程代表一个独立的执行路径&#xff0c;使得程序可以并发地处理多个任务。 线程的基本概念 线程与进程的区别&#xff1a; 进程是资源分配的单位&…

SSH实验5密钥登录Linuxroot用户(免密登录)

当用户尝试通过SSH连接到远程服务器时&#xff0c;客户端会生成一对密钥&#xff1a;公钥和私钥。公钥被发送到远程服务器&#xff0c;并存储在服务器的~/.ssh/authorized_keys文件中。而私钥则由客户端保管&#xff0c;不会传输给服务器。 在连接过程中&#xff0c;客户端使用…

域名邮箱推荐:安全与稳定的邮件域名邮箱!

域名邮箱推荐及绑定攻略&#xff1f;最好用的域名邮箱服务推荐&#xff1f; 域名邮箱&#xff0c;作为一种个性化且专业的电子邮件服务&#xff0c;越来越受到企业和个人的青睐。烽火将详细介绍域名邮箱登录的全过程&#xff0c;从注册到登录&#xff0c;帮助您轻松掌握这一重…

政治经济学笔记

【拯救者】政治经济学速成&#xff08;基础习题&#xff09; 研究生产关系必须联系生产力和上层建筑 1.生产力与生产关系 生产力代表生产的物质内容&#xff0c;生产关系是生产的社会形式。生产力决定生产关系&#xff0c;生产关系对生产力具有 反作用 *其中的”反作用”指的是…