NAT:地址转换技术

为什么会引入NAT?

NAT(网络地址转换)的引入主要是为了解决两个问题

  1. IPv4地址短缺:互联网快速发展,可用的公网IP地址越来越少。
  2. 网络安全:需要一种方法来保护内部网络不被直接暴露在互联网上。

IPv4 & IPv6

IPv4使用32位地址,理论上可以提供约43亿个唯一地址

a) 私有地址范围:
10.0.0.0 到 10.255.255.255 (10/8 前缀)
172.16.0.0 到 172.31.255.255 (172.16/12 前缀)
192.168.0.0 到 192.168.255.255 (192.168/16 前缀)
b) 回环地址:127.0.0.0 到 127.255.255.255

IPv6使用128位地址,提供了一个极其庞大的地址空间,约340万亿亿亿亿个地址。IPv6的地址空间如此之大,以至于即使给地球上的每一粒沙子分配一个IPv6地址,也只会用掉很小一部分地址空间。

为什么不能引入IPv6来解决IP不够用?

IPv6的引入是为了从根本上解决IPv4地址短缺的问题。然而,尽管IPv6已经存在多年,但它并没有完全取代IPv4

因为IPv6的全面部署是一个缓慢的过程。网络设备、操作系统、应用程序都需要更新以支持IPv6。这个过程耗时很长,且成本较高。

虽然IPv6最终会解决地址短缺问题,但在完全过渡期间,NAT仍然扮演着重要角色:

  • 它允许组织在现有IPv4基础设施上继续运营。
  • 提供了IPv4到IPv6过渡的缓冲时间。
  • 在混合环境中,帮助IPv4和IPv6网络互相通信。

总之,虽然IPv6是长期解决方案,但NAT在当前和可预见的未来仍然非常重要,它为向IPv6的平滑过渡提供了必要的支持。/

NAT是什么?

网络地址转换 (NAT) 是一种将 IP 地址空间映射到另一个 IP 地址空间的方法,方法是在数据包通过流量路由设备传输数据包时修改数据包的 IP 标头中的网络地址信息。但无法路由网络的地址空间。面对 IPv4 地址耗尽,它已成为节省全局地址空间的流行且必不可少的工具。NAT 网关的一个 Internet 可路由 IP 地址可用于整个专用网络。 

NAT就像是一个翻译官,负责在内部网络和外部网络之间转换IP地址。想象一下,NAT是一个办公室的前台接待:

  • 当内部员工(内网设备)需要与外界通信时,前台会用公司的地址(公网IP)代替员工的个人地址(内网IP)。
  • 当外部人员(互联网)想要联系公司内部时,前台会将请求转发给相应的员工(内网设备)。

NAT可以干什么?

NAT有几个重要的功能:

a) 节省IP地址:允许多台内网设备共享一个公网IP地址。

b) 增强安全性:隐藏内部网络结构,减少直接攻击的可能。

c) 简化网络管理:可以更灵活地管理内部网络,而不影响外部通信。

d) 实现负载均衡:可以将incoming的流量分配到不同的内部服务器。

总的来说,NAT就像是网络世界的一个智能门卫,它既能帮助解决地址短缺的问题,又能提高网络的安全性和灵活性。


NAT mapping vs NAT filtering

NAT Mapping(NAT映射)

NAT mapping 定义了内部网络地址和端口如何映射到外部网络地址和端口。

主要类型包括:

a) Static (静态映射):

  • 一对一映射,内部IP总是映射到同一个外部IP。
  • 例如:内部IP 192.168.1.10 永远映射到外部IP 203.0.113.5。

b) Dynamic (动态映射):

  • 从一个IP池中动态分配外部IP。
  • 例如:内部IP可能在不同时间映射到不同的外部IP。

c) Port Address Translation (PAT):

  • 多个内部IP共享一个外部IP,通过修改端口号来区分不同的连接。
  • 这是最常见的形式,也称为NAT overload。

NAT Filtering(NAT过滤)

NAT filtering 决定了如何处理进入内部网络的数据包,主要关注安全性。

主要类型包括:

a) Endpoint-Independent Filtering:

  • 只要内部主机已经发起了连接,就允许任何外部主机向内部主机发送数据包。
  • 最宽松的过滤方式。

b) Address-Dependent Filtering:

  • 只允许内部主机曾经通信过的外部IP地址发送数据包回内部网络。
  • 提供了一定程度的安全性。

c) Address and Port-Dependent Filtering:

  • 最严格的过滤方式。
  • 只允许内部主机曾经通信过的特定外部IP和端口组合发送数据包回内部网络。

  1. NAT Mapping:
    • Static: 固定的一对一映射
    • Dynamic: 动态分配外部IP
    • PAT (Port Address Translation): 多个内部IP共享一个外部IP,通过端口区分
  2. NAT Filtering:
    • Endpoint-Independent: 允许任何外部主机发送数据包
    • Address-Dependent: 只允许已知IP地址发送数据包
    • Address and Port-Dependent: 只允许已知IP和端口组合发送数据包

主要区别


NAT 的类型

NAT可以分为三种类型:Source NAT、Destination NAT和Bidirectional NAT。具体取决于数据包的源或目标的IP地址是否被转换,这些是NAT(网络地址转换)的不同实现方式。

总结

  • SNAT主要用于内网访问外网。如:员工A(IP:192.168.1.15)想要访问 www.example.com(IP:93.184.216.34)
  • DNAT主要用于外网访问内网特定服务。如:外部用户想访问公司的网站 www.mycompany.com(指向203.0.113.10)
  • BiNAT用于解决复杂网络环境中的地址冲突。如:公司A的员工(IP:192.168.1.10)需要访问公司B的服务器(IP:192.168.1.20)

Source NAT (SNAT)

  • 定义:修改数据包的源IP地址。
  • 主要用途:允许私有网络中的设备访问互联网。
  • 工作原理:
    • 当内部设备发送数据包到外网时,SNAT将源IP地址从私有IP改为公网IP
    • 返回的数据包会自动被转换回原始的私有IP地址。
  • 优点:隐藏了内部网络结构,提高安全性。

示例:内网PC(192.168.1.10)访问网站时,路由器将源地址改为其公网IP(203.0.113.1)。

Destination NAT (DNAT)

  • 定义:修改数据包的目标IP地址。
  • 主要用途:允许外部网络访问内部网络中的特定服务。
  • 工作原理:
    • incoming数据包的目标地址从公网IP改为内网IP
    • 对应的回复数据包会自动被转换回公网IP。
  • 优点:可以在不暴露整个内网的情况下,提供特定的内部服务。

示例:外部请求访问Web服务器时,路由器将目标地址从公网IP(203.0.113.1:80)改为内网服务器IP(192.168.1.100:80)。

Bidirectional NAT (BiNAT)

目的: BiNAT主要用于连接两个使用重叠IP地址空间的网络,例如两个都使用192.168.1.x私有地址范围的公司网络。

BiNAT的主要优点是

  • 允许有重叠IP地址的网络进行通信
  • 适用于网络合并或VPN连接的场景
  • 提供了额外的安全层,因为外部网络无法直接看到内部网络结构

工作原理:在两个使用重叠IP地址空间的网络之间进行通信,同时执行源NAT和目标NAT。

  • 数据流向:对outgoing流量执行SNAT,对incoming流量执行DNAT。
    • 从网络A到网络B:
      • 源IP被转换(类似SNAT)
      • 目标IP被转换(类似DNAT)
    • 从网络B到网络A:
      • 同样进行源IP和目标IP的双向转换

Bidirectional NAT的工作原理示例

示例:两个使用相同私有IP范围(如192.168.1.x)的公司网络需要合并或通过VPN连接时

  1. 数据从网络A(192.168.1.10)发送到网络B(192.168.1.20)。
  2. 当数据包经过BiNAT设备时:
    • 源IP从192.168.1.10转换为10.0.0.1
    • 目标IP从192.168.1.20转换为10.0.0.2
  3. 当数据包进入网络B时:
    • 源IP从10.0.0.1转换为临时分配的IP 192.168.1.200
    • 目标IP从10.0.0.2转换回原始的192.168.1.20

这个过程允许两个使用相同私有IP地址范围的网络进行通信,同时避免了地址冲突。返回的数据包会经历相反的转换过程。

  • SRC(Source)指的是数据包的发送方或起始点的IP地址。
  • DST(Destination)指的是数据包的接收方或目标的IP地址。


NAT 的实现类型

  • 静态NAT:一对一的固定映射。
  • 动态NAT:从IP池中动态分配地址。
  • PAT/NAPT:多个内部IP共享一个公网IP,通过端口区分。

1. 静态NAT(Static NAT)

  • 定义:一对一的固定映射,内部IP地址与外部IP地址永久对应。
  • 用途:通常用于需要从外网访问的内部服务器。
  • 优点:配置简单,易于管理。
  • 缺点:需要为每个内部主机分配一个公网IP,不节省IP地址。

2. 动态NAT(Dynamic NAT)

  • 定义:从一个公网IP地址池中动态分配地址给内部主机。
  • 用途:适用于内部主机数量少于公网IP数量的情况。
  • 优点:比静态NAT更灵活,可以在多个内部主机间共享公网IP。
  • 缺点:仍然需要相当数量的公网IP,可能在高峰时段耗尽IP池。

3. NAPT (网络地址端口转换)

  • 定义:NAPT不仅转换IP地址,还转换端口号。它允许多个内网设备共享同一个公网IP地址,通过不同的端口号来区分不同的连接。
  • 用途:最常见的NAT实现,广泛用于家庭和小型办公室网络。
  • 优点:极大地节省公网IP地址,一个公网IP可以服务成百上千的内部主机。
  • 缺点:可能在某些应用程序中造成兼容性问题,特别是那些依赖特定端口的应用。
  •  3.1 对称NAT
    • 为每个内部连接创建一个唯一的外部映射。即使是相同的内部IP:端口对,如果目标不同,外部映射也会不同。
    3.2 锥形NAT
    • 完全锥形:一旦内部地址(iAddr:iPort)映射到外部地址(eAddr:ePort),所有发自iAddr:iPort的包都经由eAddr:ePort向外发送。任何外部主机都可以通过向eAddr:ePort发送包到达iAddr:iPort。
    • 受限锥形:类似于完全锥形,但仅允许iAddr:iPort之前发送过数据的外部主机通过eAddr:ePort到达iAddr:iPort。
    • 端口受限锥形:比受限锥形更严格,仅允许iAddr:iPort之前发送过数据的特定外部主机:端口组合通过eAddr:ePort到达iAddr:iPort。

补充说明

  • 基础NAT主要关注IP地址的转换,而NAPT则同时处理IP地址和端口号的转换。
  • 锥形NAT通常更有利于P2P应用和某些网络游戏,因为它们允许特定类型的入站连接。
  • 对称NAT提供了最高级别的安全性,但可能会影响某些应用程序的正常运行,尤其是那些依赖入站连接的应用。

NAT Server

  1. NAT服务器的作用: NAT服务器位于内部网络和外部网络(互联网)之间,负责转换IP地址和端口号,使得内部网络的设备能够与外部网络通信。
  2. 地址转换:
    • 内部服务器的IP是192.168.1.2(私有IP地址)
    • 外部访问者使用7.7.7.7(公网IP地址)来访问内部服务器
  3. 端口映射:
    • 外部访问者使用端口3535
    • 内部服务器实际使用端口80(通常是Web服务)
  4. 服务器映射表(Server Mapping Table):
    • 显示了NAT如何将外部请求映射到内部服务器
    • 对于任何源IP(S-IP: Any),从外部1.1.1.10:80来的TCP请求会被转发到内部的192.168.1.2:80
  5. 会话表(Session Table):
    • 记录了当前活跃的连接
    • 显示从7.7.7.7:3535来的TCP连接被映射到1.1.1.10:80,然后再转发到内部的192.168.1.2:80
  6. 双向通信: NAT服务器通过维护这些映射关系,确保了内外网络之间的双向通信可以正常进行。

这个NAT配置允许外部用户通过公网IP和特定端口访问内部的Web服务器,同时保护了内部网络的结构和真实IP地址。这是端口转发的一个典型应用,常用于允许外部访问内部托管的服务,如网站、游戏服务器等。


NAT实现的应用

如:智能家居系统,远程办公访问,多人游戏主机服务器,个人博客网站

Port forwarding

端口转发:端口转发是 NAT 的一种实现,当数据包通过网络网关(如路由器或防火墙)时,它将通信请求从一个地址和端口号组合转发到另一个地址和端口号组合。此技术最常用于使在专用网络上的主机上运行的应用程序服务可供公用网络(如 Internet)上的主机使用。正如设备需要 IP 才能在网络中被识别一样,设备上运行的服务(如 SMTP 或 FTP)也需要被识别以启用外部通信。端口号有助于识别这些服务,端口转发是使服务可供公共网络上的主机使用的技术。每当服务需要通信时,端口号都有助于识别设备上的正确目标/源,并有助于进行适当的数据传输

例子:IT支持远程访问

  • 远程员工通过互联网发起VPN连接到公司的公网IP(203.0.113.1)和VPN端口(1194)。
  • 公司路由器接收到VPN请求,使用NAT和端口转发。
  • 路由器将VPN流量转发到内部网络的VPN服务器(192.168.1.10:1194)。
  • 建立VPN连接后,远程员工可以安全地访问内部资源,如文件服务器。


参考

https://en.wikipedia.org/wiki/Network_address_translation#Implementation

What Is NAT? What Are the NAT Types? | FS Community

https://www.comparitech.com/net-admin/network-address-translation-overloading/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人脸检测(Python)

目录 环境: 初始化摄像头: 初始化FaceDetector对象: 获取摄像头帧: 获取数据: 绘制数据: 显示图像: 完整代码: 环境: cvzone库:cvzone是一个基于…

RAG实践:ES混合搜索BM25+kNN(cosine)

1 缘起 最近在研究与应用混合搜索, 存储介质为ES,ES作为大佬牌数据库, 非常友好地支持关键词检索和向量检索, 当然,支持混合检索(关键词检索向量检索), 是提升LLM响应质量RAG(Retri…

spring boot(学习笔记第十二课)

spring boot(学习笔记第十二课) Spring Security内存认证&#xff0c;自定义认证表单 学习内容&#xff1a; Spring Security内存认证自定义认证表单 1. Spring Security内存认证 首先开始最简单的模式&#xff0c;内存认证。 加入spring security的依赖。<dependency>…

【TB作品】51单片机 Proteus仿真 MAX7219点阵驱动数码管驱动

1、8乘8点阵模块&#xff08;爱心&#xff09; 数码管测试程序与仿真 实验报告: MAX7219 数码管驱动测试 一、实验目的 通过对 MAX7219 芯片的编程与控制&#xff0c;了解如何使用单片机驱动数码管显示数字&#xff0c;并掌握 SPI 通信协议的基本应用。 二、实验器材 51…

触发器编程-创建(CREATE TRIGGER)、删除(DROP TRIGGER)

一、定义 1、触发器&#xff08;Trigger&#xff09;是用户对某一表中的数据做插入、更新和删除操作时被处罚执行的一段程序&#xff0c;通常我们使用触发器来检查用户对表的操作是否合乎整个应用系统的需求&#xff0c;是否合乎商业规则以维持表内数据的完整性和正确性 2、一…

SPL-404:如何彻底改变Solana上的NFT与DeFi

在不断发展的数字资产领域中&#xff0c;非同质化Token&#xff08;NFT&#xff09;已成为一股革命性力量&#xff0c;彻底改变了我们对数字所有权的看法和互动方式。从艺术和收藏品到游戏和虚拟房地产&#xff0c;NFT吸引了创作者、投资者和爱好者的想象力。 本指南将带您进入…

力扣-双指针1

何为双指针 双指针指向同一数组&#xff0c;然后配合着进行搜索等活动。 滑动窗口的时候很好使用。 167.两数之和Ⅱ-输入有序数组 167. 两数之和 II - 输入有序数组 题目 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从…

[Flink]三、Flink1.13

11. Table API 和 SQL 如图 11-1 所示&#xff0c;在 Flink 提供的多层级 API 中&#xff0c;核心是 DataStream API &#xff0c;这是我们开发流 处理应用的基本途径&#xff1b;底层则是所谓的处理函数&#xff08; process function &#xff09;&#xff0c;可以访…

Android 简单快速实现 下弧形刻度尺(滑动事件)

效果图&#xff1a; 直接上代码&#xff1a; package com.my.view;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pai…

iptables实现端口转发ssh

iptables实现端口转发 实现使用防火墙9898端口访问内网front主机的22端口&#xff08;ssh连接&#xff09; 1. 防火墙配置(lb01) # 配置iptables # 这条命令的作用是将所有目的地为192.168.100.155且目标端口为19898的TCP数据包的目标IP地址改为10.0.0.148&#xff0c;并将目标…

基于Java+SpringMvc+Vue技术的在线学习交流平台的设计与实现---60页论文参考

博主介绍&#xff1a;硕士研究生&#xff0c;专注于Java技术领域开发与管理&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经…

【PB案例学习笔记】-29制作一个调用帮助文档的小功能

写在前面 这是PB案例学习笔记系列文章的第29篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

【Spring Boot】关系映射开发(三):多对多映射

《JPA 从入门到精通》系列包含以下文章&#xff1a; Java 持久层 API&#xff1a;JPA认识 JPA 的接口JPA 的查询方式基于 JPA 开发的文章管理系统&#xff08;CRUD&#xff09;关系映射开发&#xff08;一&#xff09;&#xff1a;一对一映射关系映射开发&#xff08;二&#…

Java_网络编程

网络通信的关键三要素 IP、端口号、协议 IP地址 IP地址&#xff08;Internet Protocol&#xff09;&#xff1a;全程“互联网协议地址”&#xff0c;是分配给上网设备的唯一标志。 IP地址有两种形式&#xff1a;IPv4、IPv6 InetAddress 代表IP地址 InetAddress 的常用方法…

【算法训练记录——Day42】

Day42——动态规划Ⅳ 1.leetcode_1049最后一块石头的重量II2.leetcode_494目标和3.leetcode_474一和零 1.leetcode_1049最后一块石头的重量II 思路&#xff1a;石头只能用一次。。。怎么才能让碰撞后重量最小呢&#xff0c;还要转换成动态规划&#xff0c;难以理解。。 看题解&…

J024_打印电影的全部信息

一、需求描述 展示多部电影的信息。 电影信息包括&#xff1a;电影名称、电影得分、电影票价格。 二、代码实现 2.1 Movie类 package com.itheima.collection;public class Movie {//电影名称private String name;//电影得分private int score;//电影票价格private double…

【Excel】输入内容自动添加边框线

1. 选中表格区域 → 新建条件规则 2. 设置公式 3. 设置格式 测试生效

[吃瓜教程]南瓜书第6章支持向量机

0.补充知识 0.1 超平面 定义&#xff1a; 超平面是指在&#x1d45b;维空间中&#xff0c;维度为 &#x1d45b;−1的子空间。它是分割空间的一个平面。 性质&#xff1a; n维空间的超平面 ( w T x b 0 , 其中 w , x ∈ R n ) (w^Tx_b0,其中w,x\in \mathbb R^n) (wTxb​0,其…

C++的set / multiset容器

一、介绍 C的set容器又被称为集合&#xff0c;所有元素在被插入后都会自动排序。 二、数据结构 set / multiset属于关联式容器&#xff0c;底层数据结构是用二叉树实现的。 其余的容器比如vector、deque和list等为序列式容器&#xff0c;因为他们底层使用线性序列结构&#xf…

Windows环境安装Redis和Redis Desktop Manager图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Redis概述 Redis是一个开源的高性能键值对数据库&#xff0c;以其卓越的读写速度而著称&#xff0c;广泛用于数据库、缓存和消息代理。它主要将数据存储在内存中&#xff0…