NAT原理与NAT穿越

IPSec NAT穿越原理 IPSec 隧道的两个网关上同时开启 NAT 穿越功能(对应命令行 nat traversal)。开启 NAT 穿越功能后,当需要穿越 NAT 设备时, ESP 报文会被封装在一个 UDP 头中,源和目的端口号均是 4500。 阅读详情

最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下。

先做一个约定:

内网A中有:A1(192.168.0.8)、A2(192.168.0.9)两用户

               网关X1(一个NAT设备)有公网IP 1.2.3.4

内网B中有:B1(192.168.1.8)、B2(192.168.1.9)两用户,

               网关Y1(一个NAT设备)有公网IP 1.2.3.5

公网服务器:C (6.7.8.9) D (6.7.8.10)

  • NAT原理

     网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。下面介绍两类不同方式实现的NAT:

  1. NAT(Network Address Translators):称为基本的NAT

在客户机时      192.168.0.8:4000——6.7.8.9:8000

在网关时         1.2.3.4:4000——6.7.8.9:8000

服务器C          6.7.8.9:8000

其核心是替换IP地址而不是端口,这会导致192.168.0.8使用4000端口后,192.168.0.9如何处理?具体参考RFC 1631

基本上这种类型的NAT设备已经很少了。或许根本我们就没机会见到。

     2.   NAPT(Network Address/Port Translators):其实这种才是我们常说的 NAT

NAPT的特点是在网关时,会使用网关的 IP,但端口会选择一个和临时会话对应的临时端口。如下图:

在客户机时           192.168.0.8:4000——6.7.8.9:8000

在网关时              1.2.3.4:62000——6.7.8.9:8000

服务器C               6.7.8.9:8000

网关上建立保持了一个1.2.3.4:62000的会话,用于192.168.0.8:4000与6.7.8.9:8000之间的通讯。

对于NAPT,又分了两个大的类型,差别在于,当两个内网用户同时与8000端口通信的处理方式不同:

         2.1、Symmetric NAT型 (对称型)

在客户机时              192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000

在网关时,两个不同session但端口号不同      1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62001——6.7.8.10:8000

服务器C      6.7.8.9:8000

服务器 D     6.7.8.10:8000

这种形式会让很多p2p软件失灵。

        2.2、Cone NAT型(圆锥型)

在客户机时              192.168.0.8:4000——6.7.8.9:8000 192.168.0.8:4000——6.7.8.10:8000

在网关时,两个不同session但端口号相同      1.2.3.4:62000——6.7.8.9:8000 1.2.3.4:62000——6.7.8.10:8000

服务器C           6.7.8.9:8000

服务器D           6.7.8.10:8000

目前绝大多数属于这种。Cone NAT又分了3种类型:

  • a)Full Cone NAT(完全圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000 ,192.168.0.8可以收到任意外部主机发到1.2.3.4:62000的数据报。
  • b)Address Restricted Cone NAT (地址限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.0.8先给服务器C 6.7.8.9发送一个数据报后,192.168.0.8才能收到6.7.8.9发送到1.2.3.4:62000的数据报。
  • c)Port Restricted Cone NAT(端口限制圆锥型):从同一私网地址端口192.168.0.8:4000发至公网的所有请求都映射成同一个公网地址端口1.2.3.4:62000,只有当内部主机192.168.0.8先向外部主机地址端口6.7.8.9:8000发送一个数据报后,192.168.0.8才能收到6.7.8.9:8000发送到1.2.3.4:62000的数据报。   
  • 穿越NAT的实现

A1在客户机时                192.168.0.8:4000——6.7.8.9:8000

X1在网关时                   1.2.3.4:62000——6.7.8.9:8000

服务器C                       6.7.8.9:8000

B1在客户机时                192.168.1.8:4000——6.7.8.9:8000

Y1在网关时                   1.2.3.5:31000——6.7.8.9:8000

两内网用户要实现通过各自网关的直接呼叫,需要以下过程:

1、 客户机A1、B1顺利通过格子网关访问服务器C ,均没有问题(类似于登录)

2、 服务器C保存了 A1、B1各自在其网关的信息(1.2.3.4:62000、1.2.3.5:31000)没有问题。并可将该信息告知A1、B2。

3、 此时A1发送给B1网关的1.2.3.5:31000是否会被B1收到?答案是基本上不行(除非Y1设置为完全圆锥型,但这种设置非常少),因为Y1上检测到其存活的会话中没有一个的目的IP或端口于1.2.3.4:62000有关而将数据包全部丢弃!

4、 此时要实现A1、B1通过X1、Y1来互访,需要服务器C告诉它们各自在自己的网关上建立“UDP隧道”,即命令A1发送一个 192.168.0.8:4000——1.2.3.5:31000的数据报,B1发送一个192.168.1.8:4000——1.2.3.4:62000的数据报,UDP形式,这样X1、Y1上均存在了IP端口相同的两个不同会话(很显然,这要求网关为Cone NAT型,否则,对称型Symmetric NAT设置网关将导致对不同会话开启了不同端口,而该端口无法为服务器和对方所知,也就没有意义)。

5、 此时A1发给Y1,或者B1发给X1的数据报将不会被丢弃且正确的被对方收到.

综合P2P可实现的条件需要:

1、 中间服务器保存信息、并能发出建立UDP隧道的命令

2、 网关均要求为Cone NAT类型。Symmetric NAT不适合。

3、 完全圆锥型网关可以无需建立udp隧道,但这种情况非常少,要求双方均为这种类型网关的更少。

4、 假如X1网关为Symmetric NAT, Y1为Address Restricted Cone NAT 或Full Cone NAT型网关,各自建立隧道后,A1可通过X1发送数据报给Y1到B1(因为Y1最多只进行IP级别的甄别),但B2发送给X1的将会被丢弃(因为发送来的数据报中端口与X1上存在会话的端口不一致,虽然IP地址一致),所以同样没有什么意义。

5、 假如双方均为Symmetric NAT的情形,新开了端口,对方可以在不知道的情况下尝试猜解,也可以达到目的,但这种情形成功率很低,且带来额外的系统开支,不是个好的解决办法。

6、 不同网关型设置的差异在于,对内会采用替换IP的方式、使用不同端口不同会话的方式,使用相同端口不同会话的方式;对外会采用什么都不限制、限制IP地址、限制IP地址及端口。

7、 这里还没有考虑同一内网不同用户同时访问同一服务器的情形,如果此时网关采用AddressRestricted Cone NAT 或Full Cone NAT型,有可能导致不同用户客户端可收到别人的数据包,这显然是不合适的。

 

一些现在常用的技术:

ALG(应用层网关):它可以是一个设备或插件,用于支持SIP协议,主要类似与在网关上专门开辟一个通道,用于建立内网与外网的连接,也就是说,这是一种定制的网关。更多只适用于使用他们的应用群体内部之间。

UpnP:它是让网关设备在进行工作时寻找一个全球共享的可路由IP来作为通道,这样避免端口造成的影响。要求设备支持且开启upnp功能,但大部分时候,这些功能处于安全考虑,是被关闭的。即时开启,实际应用效果还没经过测试。

STUN(Simple Traversalof UDP Through Network):这种方式即是类似于我们上面举例中服务器C的处理方式。也是目前普遍采用的方式。但具体实现要比我们描述的复杂许多,光是做网关Nat类型判断就由许多工作,RFC3489中详细描述了。

TURN(Traveral Using Relay NAT):该方式是将所有的数据交换都经由服务器来完成,这样NAT将没有障碍,但服务器的负载、丢包、延迟性就是很大的问题。目前很多游戏均采用该方式避开NAT的问题。这种方式不叫p2p。

ICE(Interactive Connectivity Establishment):是对上述各种技术的综合,但明显带来了复杂性。

NAT网关和NAT穿越原理 一、原理图 1、我们模拟的情形是位于局域网A 阅读详情

相关推荐

IT知识百科:NAT穿越

NAT(Network Address Translation)穿越是指在存在NAT设备的网络环境中,实现两个位于不同NAT网络之间的主机进行直接通信的技术。由于NAT的存在,私有IP地址在经过NAT设备时会被转换为公网IP地址,因此通常情况下,位于不同NAT网络的主机无法直接进行通信。然而,通过使用NAT穿越技术,可以绕过NAT的限制,实现跨越NAT网络的直接通信。

网络技术联盟站 916

打破网络边界,畅享无障碍通信——NAT穿越技术全解析

网络地址转换(NAT)是一种网络协议,用于在私有网络和公共网络之间转换IP地址。由于IPv4地址资源有限,私有网络中的设备通常使用内部私有IP地址,而在与公共网络通信时需要通过NAT将私有IP地址转换为公共IP地址。NAT穿越技术为我们打破网络边界、实现无障碍通信提供了有效的解决方案。通过端口映射、UPnP、STUN、TURN等技术手段,我们可以使设备在私有网络和公共网络之间建立直接连接,享受更加便捷、稳定的网络体验。

m0_72410588的博客 1030

NAT穿越技术详细介绍

本文收集并整理了关于NAT穿越的一些技术,介绍这些技术的实现过程,让大家对NAT穿越技术的相关内容有个初步的认识与了解。

dvlinker的技术专栏 1万+

NAT穿越技术原理

NAT由来 为了解决全球公有IP的稀缺,提出了NAT技术。NAT是 Network Address Translation 网络地址转换的缩写。 在NAT技术下,网络被分为私有网络和公有网络两部分,NAT网关设置在私网到公网的路由出口位置,双向流量都要经过NAT网关,如下图。 NAT将私有IP地址通过NAT网关转换成公网IP地址,在网关的NAT地址转换表记录下这个转换映射记录,当外部数据返回时,网关使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址。当一个公司内部配置了这些私有地址后,

LY_624的专栏 6026

NatTunnel:NAT穿透隧道

NatTunnel是什么?可以用来干什么? NatTunnel·Server+Client是一套独立的公网辅助内网穿透软件。 把NatTunnel·Server放置在一台公网服务器上,各个NatTunnel·Client可以互相建立p2p连接,连接成功后,可以添加Tcp端口转发。 编译 需要Qt4或5,至少需要vs2008环境。Linux下理论上也可以用,不过有些功能支持得不如Windows好。     配置Server环境 把编译出的Server.exe和Client.exe放在单独目录下,Qt相关dll也放在同一目录,需要哪些库下面有说明。 创建一个文件,命名为NatTunnelServer.ini,输入以下内容: [Other] GlobalKey=YourKey       传输密钥,自行设置,所有连接到这个Server的Client都必须设置相同的密钥 [Port]      

OPTISYSTEM实战指南:线性调频连续波激光雷达系统仿真设计

本文提供了一份基于OPTISYSTEM软件的线性调频连续波激光雷达系统仿真实战指南。文章详细阐述了从软件界面熟悉、核心参数设置,到发射端、信道模型、相干接收端完整系统搭建的全过程,并介绍了性能优化与高级仿真技巧,旨在帮助读者快速掌握利用OPTISYSTEM进行低成本、高效率激光雷达系统设计与验证的方法。

weixin_29288313的博客 296

NAT 原理与NAT穿越

NAT的简介和原理 简介 NAT即Network Address Translation,它可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上.NAT路由在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址. 原理: 当内部网络中的一台主机想传输数据到外部网络时,它先将数据包传输到NAT路由器上,路由器检查数据包的报头,获取该数据包

杨龙飞的博客 1万+

mysql数据库中使用存储过程带来的好处和示例(存储过程的概念、定义、作用等详解)

MySQL的存储过程(Stored Procedure)是一组SQL语句集合。用户通过指定的存储过程名和参数来调用并执行它。存储过程可以在数据库中预编译并存储,这样它们可以被多次调用而无需重新编写或解析SQL语句。 存储过程将复杂的SQL逻辑封装在一个可重用的单元中。多次调用存储过程,而不需要重复编写相同的SQL代码。- 通过封装,可以隐藏复杂的SQL逻辑,只向用户或应用程序提供简单的接口。MySQL的存储过程和编程语言中的函数的原理和目标是一致的:封装可重用的代码逻辑并提高代码的可维护性和可重用性。

weixin_70208651的博客 1717

NAT穿越原理介绍

NAT是为了节省IP地址而设计的,但它隐藏了内网机器的地址,“意外”起到了安全的作用,由于客户端是主动登录P2P网络才可穿越,所以P2P的方式也没有违背企业的内部管理原则…… 穿越NAT的意义: NAT是为了节省IP地址而设计的,但它隐藏了内网机器的地址,“意外”起到了安全的作用。对外不可见,不透明的内部网络也与互联网的“公平”应用,“相互共享”的思想所不容,尤其是P2P网络中“相互服

研发客 3048

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

新手必看!BUUCTF-PWN题实战:从零搭建Kali环境到成功RIP栈溢出

本文为CTF二进制安全新手提供了一份详实的BUUCTF-PWN入门指南。内容涵盖从零搭建Kali Linux环境、安装配置pwntools等核心工具,到深入浅出地讲解栈溢出原理与汇编基础,并手把手带领读者完成一道名为“rip”的经典栈溢出题目实战,成功利用漏洞获取系统权限。

t8u9v0w1x的博客 504

NAT穿越原理

PS:走读代码时候看到代码实现yo 最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下。 先做一个约定: 内网A中有:A1(192.168.0.8)、A2(192.168.0.9)两用户                网关X1(一个NAT设备)有公网IP 1.2.3.4 内网B中有:B1(192.168.1.8)、B2(192.168.1.9)两用户,       

liangkdm的专栏 743

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

UDP穿越NAT原理

论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。 首先先介绍一些基本概念:      NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Ne

fzubbsc的专栏 1230

手把手教你用微信小程序实现智能硬件音视频通话(含Linux/RTOS适配)

本文详细介绍了如何利用微信小程序硬件框架(WMPF)和音视频SDK,在智能硬件(包括Linux与RTOS设备)上实现音视频通话功能。文章从架构设计、设备端SDK集成、小程序VOIP插件开发到跨平台调试与性能优化,提供了全链路实战指南,帮助开发者打通微信小程序与嵌入式设备间的实时音视频通信。

ooo22的博客 329

9.16华为OD机试真题 新系统 - 统计特殊数字 (Java/Py/C/C++/Js/Go)

9.16华为OD机试真题 新系统 - 统计特殊数字 (Java/Py/C/C++/Js/Go)

算法大师! 753

IPSec NAT穿越场景原理分析

IPSec NAT穿越场景分析

qq_43326214的博客 1164

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IPSec-NAT穿越原理和配置

本节 2 大核心重难点1. IPSec 场景的「NAT 穿越≠外网主机主动向内网发起连接」:这是 90% 学习者误区。IPSec 的 NAT 穿越,仅指IPSec 隧道保护的两端内网互访流量可以双向通行;NAT-T 做不到让互联网陌生 IP 主动穿透 NAT 访问内网,主动入站是端口映射 / 全锥 NAT 打洞的范畴,二者完全无关。2. IKE 协商报文(UDP500)天生带四层端口,无论开不开 NAT-T,IKE SA 都能协商建立;原生故障仅出在 ESP 业务报文:也就是。

汤小萌的博客 630

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: javascript 相关书籍 网站
下一篇: NAT穿越浅谈
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值