NAT-DDNS | 原理 / 类型解析

注:本文为 “ NAT-DDNS ” 相关文章合辑。

未整理去重。


NAT 与内网穿透

2017/11/16

NAT

NAT 是什么

网络地址转换(Network Address Translation,NAT),是指对 IP 报文头部的地址信息进行替换。由于 IPv4 地址资源有限,无法为每一个上网设备都分配一个独立的 IP 地址,NAT 技术正是为解决这一问题而产生的。当用户上网时,很可能处于一个 NAT 设备之后。NAT 设备会在 IP 包通过时修改其源 / 目标 IP 地址,有时还会修改 TCP/UDP 协议的端口号,从而实现多台设备共用同一外网 IP 进行互联网通讯。

内网地址外网地址
192.168.0.2:5566120.132.92.21:9200
192.168.0.3:7788120.132.92.21:9201
192.168.0.3:8888120.132.92.21:9202

如上所示,三台设备都使用 120.131.92.21 这一公网 IP。对于这三台设备分别从各自端口发出的 TCP/UDP 请求,NAT 设备会将其映射至不同的端口上,并记录在 NAT 表中。这样就能区分某个请求来自哪个设备的哪个端口。

NAT 特点

  1. 网络被划分为私网和公网两部分,NAT 网关设置私网到公网的路由出口。
  2. 网络访问只能由私网侧发起,公网无法主动访问私网主机(虽然设计如此,但可以通过打洞等技术实现访问)。
  3. NAT 网关在两个访问方向上完成两次地址转换,出口方向替换源地址,入口方向替换目的地址。
  4. NAT 网关的存在对通信双方保持透明。
  5. NAT 网关为了实现双向翻译,需要维持一张关联表,将会话信息保存其中。

NAT 的副作用

  1. NAT 表的淘汰:当 NAT 表中对应的记录在一段时间内没有通讯时,网络运营商会将其淘汰。此时若外网仍通过原来记录的外网 IP 地址和内网设备进行通讯,则会导致通讯失败。
  2. NAT 墙:当外界对内网的请求到达 NAT 设备时,若不符合 NAT 设备和 NAT 表的要求,该请求会被丢弃。因此,若想实现 IP 地址不固定的客户端间通讯,则需要额外的打洞操作(例如通过心跳包刷新 NAT 表的重置时间)。
  3. 端对端通信模型的破坏:NAT 实现了将多个内部主机发出的连接复用到一个 IP 上,这使得无法基于 IP 对主机进行准确追踪。服务器不能简单地将同一 IP 与主机挂钩,这增加了统计信息和防止 DDOS 攻击的复杂性。有时,若一个 NAT 设备拥有多个 IP 地址,一组关联的会话可能会被分配到不同的公网 IP 中。总之,NAT 隐蔽了通讯的另一端。

NAT 类型

  1. Full Cone NAT(完全雏形 NAT):使用该类型的设备较少。一旦内部主机端口在 NAT 网关完成端口映射,后续外网的任一主机都可以通过这一映射好的端口进行访问。
  2. Restricted Cone NAT(限制雏形 NAT):与完全雏形 NAT 相比,在完成端口映射后,对 IP 地址有限制。只有内网对外访问过的 IP 地址才可以对该端口进行连接。
  3. Port Restricted Cone NAT(端口限制雏形 NAT):相较于限制雏形 NAT,在端口上也加以限制。只有内网向该 IP 与端口发送过信息,才能对其进行访问。
  4. Symmetric NAT(对称 NAT):即便是同一个内网主机,在对不同的外网 IP + 端口进行访问时,在 NAT 表上会映射成不同的端口号。

注意:事实上,这些术语的引入是很多混淆的起源。现实中的很多 NAT 设备是将这些转换方式混合在一起工作的,并非单纯使用一种方式。所以这些术语更适合描述一种工作方式,而非一个设备。例如,很多 NAT 设备对内部发出的连接使用对称型 NAT 方式,同时支持静态的端口映射,后者可被看作是全锥型 NAT 方式。在某些情况下,NAT 设备的一个公网地址和端口可以同时映射到内部几个服务器上,以实现负载分担。比如,一个对外提供 WEB 服务的站点可能有成百上千个服务器在提供 HTTP 服务,但对外仅表现为一个或少数几个 IP 地址。

内网穿透

应用层网管(ALG)

普通 NAT 实现了对 UDP 或 TCP 报文头中的 IP 地址及端口的转换功能,但对于应用层数据载荷中的字段则无法处理。在许多应用层协议中,如多媒体协议(H.323、SIP 等)、FTP、SQLNET 等,TCP/UDP 载荷中带有地址或者端口信息,这些内容不能被 NAT 进行有效的转换,可能会导致问题的出现。而 NAT ALG(Application Level Gateway,应用层网关)技术能够对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的 IP 地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。

例如,FTP 应用由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要 ALG 来完成载荷字段信息的转换,以保证后续数据连接的正确建立。

图片.png

图中显示私网侧的主机要访问公网的 FTP 服务器。NAT 设备上配置了私网地址 192.168.1.2 到公网地址 8.8.8.11 的映射,实现地址的 NAT 转换,以支持私网主机对公网的访问。在该组网中,若没有 ALG 对报文载荷的处理,私网主机发送的 PORT 报文到达服务器端后,服务器无法根据私网地址进行寻址,也就无法建立正确的数据连接。整个通信过程包括以下四个阶段:

(1) 私网主机和公网 FTP 服务器之间通过 TCP 三次握手成功建立控制连接。

(2) 控制连接建立后,私网主机向 FTP 服务器发送 PORT 报文,报文中携带私网主机指定的数据连接的目的地址和端口,用于通知服务器使用该地址和端口与自己进行数据连接。

(3) PORT 报文在经过支持 ALG 特性的 NAT 设备时,报文载荷中的私网地址和端口会被转换成对应的公网地址和端口。即设备将收到的 PORT 报文载荷中的私网地址 192.168.1.2 转换成公网地址 8.8.8.11,端口 1084 转换成 12487。

(4) 公网的 FTP 服务器收到 PORT 报文后,解析其内容,并向私网主机发起数据连接,该数据连接的目的地址为 8.8.8.11,目的端口为 12487(注意:一般情况下,该报文源端口为 20,但由于 FTP 协议没有严格规定,有的服务器发出的数据连接源端口为大于 1024 的随机端口,如本例采用的是 wftpd 服务器,采用的源端口为 3004)。由于该目的地址是一个公网地址,因此后续的数据连接就能够成功建立,从而实现私网主机对公网服务器的访问。

总而言之,在 ALG 中配置支持的协议,可以实现逆向访问。

中间件技术

这也是一种通过开发通用方法解决 NAT 穿越问题的尝试。与应用层网管(ALG)不同的是,NAT 网关是这一解决方案的参与者。而且客户端会参与网关公网映射信息的维护。此时,NAT 网关只需理解客户端的请求并按照要求去分配转换表,不需要自己去分析客户端的应用层数据。

其中 UPnP(Universal Plug and Play,通用即插即用)就是这样一种方法。UPnP 是一个通用的网络终端与网关的通信协议,具备信息发布和管理控制的能力。其中,网关映射请求可以为客户动态添加映射表项。此时,NAT 不再需要理解应用层携带的信息,只转换 IP 地址和端口信息。而客户端通过控制消息或信令发到公网侧的信息中,直接携带公网映射的 IP 地址和端口,接收端可以按照此信息建立数据连接。

NAT 网关在收到数据或连接请求时,按照 UPnP 建立的表项只转换地址和端口信息,不关心内容,再将数据转发到内网。这种方案需要网关、内部主机和应用程序都支持 UPnP 技术,且组网允许内部主机和 NAT 网关之间可以直接交换 UPnP 信令才能实施。

中继代理技术

准确来说,它不是 NAT 穿越技术,而是 NAT 旁路技术。简单来讲,就是在 NAT 网关所在的位置旁边放置一个应用服务器,这个服务器在内部网络和外部公网分别有自己的网络连接。

当客户端特定的应用产生网络请求时,将定向发送到应用代理服务器。应用代理服务器根据代理协议解析客户端的请求,再从服务器的公网侧发起一个新的请求,把客户端请求的内容中继到外部网络上,返回的响应则反方向中继。

这项技术和 ALG 有很大的相似性,它要求为每个应用类型部署中继代理业务,中间服务器要理解这些请求。

特定协议的自穿越技术

在所有方法中,最复杂也最可靠的就是自己解决自己的问题。例如 IKE(Internet Key Exchange,互联网密钥交换)和 IPsec(Internet Protocol Security,互联网协议安全)技术,在设计时就考虑了如何穿越 NAT 的问题。因为这个协议是一个自加密的协议并且具有报文防修改的鉴别能力,其他通用方法对此无能为力。

由于实际应用的 NAT 网关基本都是 NAPT(Network Address Port Translation,网络地址端口转换)方式,所有通过传输层协议承载的报文可以顺利通过 NAT。IKE 和 IPsec 采用的方案就是用 UDP 在报文外面再加一层封装,而内部的报文就不再受到影响。IKE 中还专门增加了 NAT 网关是否存在的检查能力以及绕开 NAT 网关检测 IKE 协议的方法。

探针技术 STUN 和 TURN

所谓探针技术,是通过在所有参与通信的实体上安装探测插件,以检测网络中是否存在 NAT 网关,并对不同 NAT 模型实施不同穿越方法的一种技术。

STUN(Session Traversal Utilities for NAT,NAT 会话穿越应用程序)服务器被部署在公网上,用于接收来自通信实体的探测请求。服务器会记录收到请求的报文地址和端口,并填写到回送的响应报文中。客户端根据接收到的响应消息中记录的地址和端口与本地选择的地址和端口进行比较,就能识别出是否存在 NAT 网关。

如果存在 NAT 网关,客户端会使用之前的地址和端口向服务器的另外一个 IP 发起请求,重复前面的探测。然后再比较两次响应返回的结果,判断出 NAT 工作的模式。由前述的一对多转换模型得知,除对称型 NAT 以外的模型,NAT 网关对内部主机地址端口的映射都是相对固定的,所以比较容易实现 NAT 穿越。而对称型 NAT 为每个连接提供一个映射,使得转换后的公网地址和端口对不可预测。

此时 TURN(Traversal Using Relays around NAT,使用中继穿越 NAT)可以与 STUN 绑定提供穿越 NAT 的服务,即在公网服务器上提供一个 “地址端口对”,所有此 “地址端口对” 接收到的数据会经由探测建立的连接转发到内网主机上。TURN 分配的这个映射 “地址端口对” 会通过 STUN 响应发给内部主机,后者将此信息放入建立连接的信令中通知通信的对端。

这种探针技术是一种通用方法,不用在 NAT 设备上为每种应用协议开发功能,相对于 ALG 方式有一定普遍性。但是 TURN 中继服务会成为通信瓶颈,而且在客户端中增加探针功能要求每个应用都要增加代码才能支持。

发表日期:November 16th 2017, 3:55:27 pm
更新日期:December 13th 2017, 8:58:37 pm


从零开始了解内网穿透

Ivan 2024/05/22 11:32

内网穿透的话题总有一个前置条件,即公网 IP。多数讨论穿透的情况都是在没有公网 IP 的前提下。本文将简要概述为何需要内网穿透、内网穿透的工作原理以及如何选择合适的穿透方案。

一、公网 IP 的重要性

大部分人接触到内网穿透,可能与近些年家中 NAS(Network Attached Storage,网络附属存储)设备的普及相关。当然,也有一些人有远程操作电脑的需求。但无论哪种需求,至少需要一个公网 IP。这个 IP 可以是自家宽带所分配的公网 IP,也可以是一台拥有公网 IP 的服务器的 IP 地址。

现在最常见的场景是,通过一个设备去访问另一个内网设备。这就如同两个人要在茫茫人海中建立连接,至少两人要同时前往一个约定的地点才可能相见。这个地点可以是你家、我家,也可以是一个公共的、大家都知道的地方。公网 IP 就如同这个约定的地点,因为它是互联网上的门牌号,有了它,才有机会找到彼此。

这种 IP 有固定不变的,比如服务器的 IP;也有像家庭宽带中每次重新拨号都会变化的动态 IP。对于这种来回变化的 IP,还需要一个域名,将域名始终指向变化后的 IP。就像无论你换哪个手机号,我都能通过那个微信 ID 找到你。

在这里插入图片描述

无论 IP 怎么变,我们都可以通过域名访问

二、为什么会有内外网之分

由于近些年可联网的设备日益增多,且主要暴露在公网上的基本都是提供服务的公司、服务器等,可用的公网 IP 数量(主要是 IPv4)越来越少。运营商想出了一个办法,把那些用不上公网 IP 的普通家庭宽带用户划分到一个大的内网中,然后多家用户共用一个外网 IP,暂时解决了 IP 不够用的问题。

在这里插入图片描述

这些被拿走公网 IP 的用户就像从独栋别墅搬进了高层社区,而公网 IP 挂在了小区门口,被众业主共用。运营商称此举为“保护用户隐私”。在家庭电脑直接通过连接猫设备拨号上网而不通过路由器的年代,这的确在一定程度上守护了个人的系统安全。但收回公网 IP 的操作其实发生在路由器普及之后。

当然,直到现在,仍有大量的用户用不到公网 IP,且这部分用户占大多数。因此并没有产生什么实质的影响。但是对于需要使用公网的用户,比如一些家庭服务器爱好者,要将一些服务放在公网上供私人使用,就会用到内网穿透。

需要注意的是,无论有无公网 IP,均会用到内网穿透的技术。有公网的需要穿透自家路由器,进入某个具体的内网设备。但因为自己拥有路由器的控制权,所以多数人遇到的问题是需要穿透公共的大型内网,也就是之前提到的“小区大门”,普通用户是没有小区大门完整控制权的。

三、具体哪些场景需要内网穿透

举几个常见的例子:

  • 在外希望随时随地能够远程访问家中电脑或者访问 NAS 中文件之类;
  • 自己在家里有一台服务器,部署了一些比如笔记应用、密码管理应用之类;
  • 搭建了一些经典游戏私服,希望跟朋友一起线上游玩之类。

当然内网穿透的需求远不止这些,尤其对那些善于探索的人来说。但总体上来说,共同点通常是都会有一个 24 小时待机的硬件设备在工作,而我们希望的就是随时随地能够访问到这台设备。

四、内网穿透的工作原理

前边提到,内网穿透必然用到公网 IP。因此,要么被访问设备有公网 IP,要么两台都没有。两台都没有的情况下,就会用到拥有公网的中转服务器,同时与两台内网设备建立链接,作为一个“传话筒”,交换双方的流量。

第一种情况,要访问的对象是有公网的,可以很方便在互联网上定位到它,然后它作为入口,通过 VPN(Virtual Private Network,虚拟专用网络)或者是端口转发到具体内网服务的方式,让与内部的某台设备建立连接。

在这里插入图片描述

有公网 IP

第二种情况是没有公网 IP 的场景。此时,由于两台设备都位于内网,无法直接在互联网上相互定位。借助拥有公网 IP 的中转服务器,它分别与两台内网设备建立连接,在二者之间转发数据,从而实现内网设备间的间接通信。

例如,一些商业版的 NAS 设备,其内置系统就采用了这种借助中转服务器的内网穿透方案。用户无需自行部署复杂的内网穿透设置,就能直接访问 NAS 中的文件 。不过,网络流量传输存在木桶效应,其速度取决于传输路径中速度最慢的节点。所以,通过中转服务器进行内网穿透时,服务器的带宽会对传输速度产生重要影响。理想状态下,没有中转服务器的穿透方式效率更高,但实现难度也更大 。

五、如何选择穿透方案

在一些相对发展水平较低的中小城市,IPv4 地址资源相对没有那么紧张 。用户可以尝试拨打宽带运营商客服电话,询问自家宽带是否分配了公网 IP 。若没有,可向运营商申请开通公网 IP 。一旦成功获取公网 IP,网络上众多免费的内网穿透解决方案便能轻松实施,且通常能取得较好的效果 。

若无法解决公网 IP 问题,普通用户大致可采用以下两种方式 :

  • 租赁外网服务器作为中转:选择配置相对轻量的服务器,其中带宽是决定传输速度的关键因素。至于软件部署方案,可选用开源软件。这种方式适合具备一定技术能力、乐于探索折腾的用户,其自由度较高,能通过不同软件实现多种穿透方式 。
  • 使用现成的收费或免费穿透软件:本质上也是租用服务器,不过租用的是第三方已部署好服务的应用套件。一台服务器可为多个用户提供服务,成本较低,对用户技术要求不高,一般适用于小流量传输场景,如远程操控电脑、进行基本的小文件传输等 。

此外,还有其他较为小众的穿透方案,因原理基本都是围绕寻找一个双方都能访问到的“中间节点”来实现连接,在此无法一一详述 。

六、最后

本文未深入探讨内网穿透的具体技术方案,也未针对某些特定商业应用展开分析,主要是对内网穿透相关的前置性知识进行解释说明。部分观点基于个人知识储备判断,如有错误之处,欢迎指正 。

本文责编:@广陵止息


via:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值