基于NAT-PT转换网关的DNS-ALG研究与实现 nat alg

随着互联网应用的发展及互联网应用要求的不断提高,IPv4的诸多不足逐渐暴露出来,为此IETF制定了下一代互联网互联协议IPv6同IPv4相比较,IPv6把地址长度由原来的32bit扩展成128bit,有效地解决了地址资源不足的问题,同时采用全新的地址管理方案,高效包头,更好的服务质量(QoS).对流媒体的支持以及更完善的安全机制等多项技术,将极大地满足用户对网络的新要求,IPv6代替IPv4已经成为必然.

然而目前IPv4还有着广泛的应用,为了充分利用现有的网络资源,将在相当长的时间内出现Iv4与IPv6网络并存的局面.目前提出的过渡方案基本上分为三类:双协议栈技术,隧道技术,NAT-PT(NetworkAddress Translation-Protocol Translation)技术.

1.协议栈技术是使IPv6节点与IPv4节点兼容的最直接方式,应用对象是主机,路由器等通信节点.支持双协议栈的IPv6节点与IPv6节点互通时使用IPv6协议栈,与IPv4节点互通时使用IPv4协议栈.IPv6节点访问IPv4节点时,先向双栈服务器申请一个临时IPv4地址,同时从双栈服务器得到网关路由器的TEP(TunnelEndPoint)IPv6地址.IPv6节点在此基础上形成一个4over6的IP包,4over6包经过IPv6网传到网关路由器,网关路由器将其IPv6头去掉,将IPv4包通过IPv4网络送往IPv4节点.网关路由器要记住IPv6源地址与IPv4临时地址的对应关系,以便反方向将IPv4节点发来的IP包转发到IPv6节点.这种方式对IPv4和IPv6提供了完全的兼容,但由于需要双路由基础设施,增加了网络的复杂度,依然无法解决IP地址耗尽的问题.

双协议栈技术互通性好,但是要求网络节点同时兼有IPv4地址和IPv6地址,所以并没有从根本上解决地址短缺问题.

2.隧道技术主要是解决IPv6"孤岛"通信问题,要求隧道两端的主机必须配置双协议栈.(隧道技术不能实现IPv4主机与IPv6主机的直接通信)

3.NAT-PT是一种协议转换技术,通过结合SIIT协议翻译功能,NAT的动态地址翻译能力,它能在IPv4/IPv6地址转换的同时进行协议转换.但是没有ALG的支持,NAT-PT网关只能提供从IPv6到IPv4的单向连接,而基于NAT-PT的IPv4/IPv6协议转换网关结合应用层网关(ALG)不但可以实现IPv6和IPv4间的双向连接,同时还支持多个应用层服务的转换.本文重点研究了专门用于IPv4和IPv6之间域名解析的应用层网关DNS-ALG.

NAT-PT网关的结构

由于协议对地址格式的定义不同,直接通过地址访问难以实现,只有通过域名才能实现访问,所以网关路由器还需要DNS-ALG的支持,才能在IPv4端访问IPv6端的过程中发挥作用

过渡技术中的NAT,是把IPv4地址翻译成IPv6地址,或者把IPv6地址翻译成为IPv4地址.地址翻译的实现过程:在NAT-PT中,预留了一部分GlobalIPv4地址,这些地址是留给需要与IPv4网络通信的IPv6主机使用的.实际应用情况中,预留的V4地址数目通常都小于V6主机的数目,一旦预留的GlobalIPv4地址耗尽,则多出来的V6主机就无法实现与V4主机的通信,故通常采用为V6节点动态分配V4地址的方式来及时释放地址资源,从而使得每一个V6主机都有机会与V4主机实现通信.

NAT-PT翻译网关是NAT技术,协议翻译技术以及应用层网关ALG的有机结合,这三种技术协同工作,使得IPv4与IPv6网络能相互通信.NAT-PT网关位于IPv4网络与IPv6网络的交界处,同时接收来自IPv4和IPv6两种网络的数据包,根据需要在IPv4地址与IPv6地址之间进行映射,依照协议的不同对分组做语义上的转换.

根据互联网层次结构,NAT-PT网关的层次结构如下图1所示,可分为四层:物理链路层,网络层,传输层,应用层.各层之间的转换应该是透明和低耦合的.实际上,各层之间是密切相关的,因此实际的功能模块和层次结构图不完全一致.

物理链路层

物理链路层是第一层,主要是通过两个物理网络接口分别连接到IPv4网络和IPv6网络.

网络层转换

网络层是第二层,这里是NAT-PT转换网关服务器的所在,它通过IPv4(IPv6)协议栈获得分组,交由NAT进行地址映射,再由PT进行协议转换,构建新的IP分组头,最后通过IPv6(IPv4)协议栈转发.

1.网络地址转换(NAT)

NAT负责IPv4和IPv6地址的映射转换,完成地址映射关系的建立和对地址映射关系的维护.NAT分为传统NAT双向NAT.传统的NAT技术允许一个专用网络内的主机透明地访问外部网络的主机,传统NAT通信是单向的.即从专用网发起的通信.传统NAT根据映射方式的不同分为基本NAT和NAPT(网络地址端口翻译).与基本NAT不同的是,NAPT还允许端口映射,通过转换TCU,UDP协议的端口号来提供并发性,提供了多个有NAT-PT前缀的IPv6地址和一个源IPv4地址间的多对一动态映射;双向NAT,即会话可以由IPv6主机发起,也可以由IPv4主机发起,因而被称为是双向的.实现双向NAT的关键在于对DNS-ALG的引入.借助DNS-ALG,要以实现处于不同网络中的主机直接通过域名来互相访问.

2.协议转换(PT)

在NAT-PT机制中,协议转换部分是基于SIIT协议,在SIIT中定义了IPv4/IPv6报头转换和ICMPv4/ICMPv6转换的方法.IPv4/IPv6报头转换算法就是在两种IP协议之间建立报头字段的映射关系,需要指出的是,IPv4/IPv6报头转换算法,应当对分片数据进行特别的处理.因为在IPv6中,对数据的分片只能由源节点完成,在数据传输开始前进行MTU发现,对于必须进行分片的报文,在IPv6报头后增加分片扩展头,将分片信息记录在扩展头中;而在IPv4中,对数据的分片可以由源节点或中间路由器完成,在数据传输开始前不必进行MTU发现;ICMPv4和ICMPv6之间的转换是建立在IP协议转换的基础上的,包括ICMP报头的转换和ICMP错误信息的转换.ICMPv4和ICMPv6的报头具有相似的结构,所以相互之间的转换是比较直接的.校验和需要重新计算,因为ICMPv6的校验和中包括了IP地址的计算,而ICMPv4的校验和只由ICMP报头本身来计算,所以在进行ICMPv4/ICMPv6转换时,需要重新计算检验和.

传输层转换

在IPv6和IPv4中,TCP/UDP格式的不同主要区别在伪报头.在传输层及上层协议中,TCP和UDP校验和的计算引入了伪报头(pseudo-header)的概念,伪头部包含了源地址和目的地址的信息,这是为了保证数据包正确到达目的地.例如如果一个IPv6数据包包含一个路由扩展报头,则伪头部内的目的地址是真正的的最终目的地址.而IPv4和IPv6的地址长度有所不同,因而需要重新计算校验和,由于源IP包中已经有了校验和,可以采用如下简单的公式:

新校验和=原校验和+新IP地址的校验和-原IP地址的校验和.

应用层转换

应用层网关(ALG:Application LayerGateway)针对各种应用层协议提供的一种代理机制,它可以对负载中的IP地址等信息进行转换,解决了NAT-PT不转换数据包的负载部分.因此NAT-PT结合ALG可以实现IPv6和IPv4的双向连接,同时还支持多个应用层服务的转换.要实现这些应用的跨网络通信,必须以域名地址转换为基础,所以其它的ALG(如:TCP-ALG,SIP-ALG)也必须建立在DNS_ALG实现的基础上.

DNS-ALG工作机制与实现

DNS-ALG是专门用于IPv4和IPv6之间域名解析的应用层网关,集成了DNS-ALG的NAT-PT网关可以实现IPv4与IPv6的双向连接,它不但为IPv6主机提供对IPv4主机的域名解析,也为IPv4主机提供对IPv6主机的域名解析.

DNS-ALG的工作机制

如图2所示的组网配置图,以IPv4主机访问一个IPv6网络为例,详细介绍DNS-ALG的转换流程.
域名为v4hdu.edu.cn的IPv4主机A希望与域名为v6hdu.edu.cn的IPv6主机B建立连接,但不知道IPv6主机B的IPv4地址,所以向它的首选DNS服务器IPv4DNS发出一个DNS Request(A记录),询问v6hdu.edu.cn的IPv4地址;

IPv4DNS检查自己的记录,但事实上v6hdu.edu.cn的资源记录应该为AAAA(是一个指向IPv6地址的记录.)所以查找失败,故将此DNSRequest转交出去;

DNS-ALG拦截到这个DNSRequest,发现这是一个从IPv4网络发来的请求,于是将资源记录type值从A修改为AAAA然后转发到IPv6DNS;

IPv6 DNS收到这个DNSRequest,查找自己的记录,经过解析得到v6hdu.edu.cn的IPv6地址为3ffe:2008:3::3把此地址填入到生成一个DNSReply数据报文中,类型仍然为AAAA,并回复给DNS-ALG;

DNS-ALG检测到这个报文是来自IPv6网络的,于是和NAT通信,NAT从地址池中为该IPv6地址分配一个空闲的IPv4地址(如192.168.162.10)与该v6hdu.edu.cn的IPv6地址建立映射关系.并将DNSReply中的IPv6地址替换为新分配的IPv4地址.

DNS-ALG将AAAA记录改为A记录,然后把DNS Reply送回给IPv4DNS,最后再传给IPv4主机A;

IPv4主机A得到IPv6主机B的IP地址,发送一个源地址为192.168.164.3目的地址为192.168.162.10的IPv4报文.

报文被路由到NAT-PT,NAT查找映射关系表后,把目的地址替换为IPv6地址3ffe:2008:3::3,源地址加上前缀prefix:3ffe:2008:1::/96.源地址成为3ffe:2008:1::192.168.164.3之后再对报文进行PT的工作.

完成NAT和PT的过程后,翻译网关将报文发出,最后数据包发达到域名为v6hde.edu.cn目的主机.

对上面DNS-ALG工作模式的分析,可以用图4的流程图来分别表示对于IPv6主机和IPv4主机发起的通信过程中翻译网关系统的工作流程.


对于由IPv4主机发起的通信,由于在域名请求的过程中就需要进行地址映射工作,所以相对复杂一些.而对于由IPv6主机发起的通信,系统实现相对简单一些,其差别主要有以下两点:

1.IPv6主机主动发起的连接,在处理DNS请求报文时,不需要NAT作地址分配的工作,在DNS-ALG得到IPv4主机的IP地址以后,只需要为其加上前缀即可.在IPv6主机和IPv4主机第一次正式开始通信时才进行地址映射;而IPv4主机主动发起的连接,在处理DNS请求报文时就要进行地址映射.

2.IPv6路由器是不支持分段的,在IPv6中报文的分段是在通信两端完成的,所以由IPv4主机发送的报文分组大于IPv6路径的MTU时,就需要在转换网关进行分段.

DNS-ALG的实现

本文提出的网络实现方案由一个IPv4网络和一个IPv6网络组成,网络拓扑结构如图2所示,封装DNS-ALG的NAT-PT翻译网关将纯IPv4网络和纯IPv6网络连接起来,该翻译网关系统软件有以下几个部分构成:地址转换模块,协议翻译模块,DNS-ALG应用层网关以及系统管理配置,系统软件体系构架如图3的所示.

由图3可知,在内核模块中同时加载了IPv4和IPv6协议栈模块,同时也将NAT-PT编辑为模块加载于内核之中,其中NAT模块完成地址映射关系的建立和对地址映射关系的维护,PT模块则进行对IP报头的翻译,以及对TCP,UDP以及ICMP报文的翻译;底层为两块网络接口卡,分别连接IPv4网络和IPv6网络.

该翻译网关运行在Linux环境下,加载了IPv4和IPv6双协议栈;在IPv4网络中,我们配置了一台PC机,安装IPv4协议栈,一台DNSserver为IPv4主机提供域名服务,以及一台运行Linux系统的路由器;在IPv6网络中我们同样配置了一台PC机,安装IPv6协议栈,一台DNSserver为IPv6主机提供域名服务,以及一台运行Linux系统的路由器.

DNS-ALG位于应用层,在功能上实现应用层上透明的域名访问,屏幕了底层网络的差异性.DNS-ALG通过netlink套接字实现与内核模块间的通信,与NAT模块交换数据.应用层同时维护域名/地址映射关系的列表,实现系统管理的作用.

具体设备的配置如下:

翻译网关配置:

Eth 0:192.168.163.3 Eth 1:3ffe:2008:2::1

IPv地址池:192.168.162.10 to 192.168.162.50

IPv6地址前缀:3ffe:2008:1::/96

IPv4主机配置:
IPv4地址:196.168.164.3 域名:v4hdu.edu.cn

默认路由:196.168.164.1 首选DNS server:196.168.164.2

IPv6主机配置:
IPv6地址:3ffe:2008:3::3 域名:v6hdu.edu.cn

默认路由:3ffe:2008:3::1 首选DNS server:3ffe:2008:3::2

路由器配置:

IPv4路由器:Eth 0:192.168.164.1 Eth 1:192.168.163.2

IPv6路由器:Eth 0:3ffe:2008:2::2 Eth 1:3ffe:2008:3::1

DNS服务器:
IPv4 DNS server:196.168.164.2

IPv6 DNS server:3ffe:2008:3::2

转:http://www.doc88.com/p-974391403834.html

DNS ALG在RFC 2694中的描述(1)

RFC2694-DNSextensionstoNetworkAddressTranslators(DNS_ALG)

前略

2.RequirementforDNSextensions

在典型的应用中,有两种类型的authoritativenameservers。

Internalauthoritativenameservers:内部授权名称服务器定义了组织内的全部或大多数公司资源。仅有小部分的主机允许被外部访问。其他主机和他们的名字在私有网络中是唯一的。对外部可见的主机和授权名称服务器(将主机的名称解析为网络地址)通常设置在防火墙前面的DMZ区域。将DMZ区域中的主机和名称服务器分别叫做DMZhosts和DMZnameservers。

下面分为几个scenario来讨论DNSALG的需求:

2.1DMZhostsassignedstaticexternaladdressesonNATNAT为DMZhosts分配静态外网地址

2.1.1PrivatenetworkswithnoDMZnameservers没有DMZnameserver的私网

如果私网连接到单一的serviceprovider(服务供应商,运营商),在运营商的授权名称服务器上会列出DMZhosts的外网地址。(记录在forward和in-add.arpa反向查询zones里)。

如果私网连接到多个serviceprovider,在每个运营商的授权名称服务器上会列出DMZhosts的外网地址。这对于in-add.arpa反向查询zones有特殊的意义,因为私网会被运营商分配不同的地址前缀。

这两种情况下,外网产生的DNSlookups消息都不会到达私网。基于私有域的大量NATpursue这个option,使得在运营商的名称服务器上会列出他们DMZhosts的外网地址。(没理解明白这句话,把这段原文附上:Inbothcases,externallygeneratedDNSlookupswillnotreachtheprivatenetwork.AlargenumberofNATbasedprivatedomainspursuethisoptiontohavetheirDMZhostslistedbytheirexternaladdressesonserviceprovider'snameservers.)

PS:个人理解这个scenario是说,私网里没有nameserver,由运营商提供nameserver。私网域里的NAT映射(私网IP与外网IP映射)需要与运营商nameserver的映射(名称与外网IP映射)相一致。

2.1.2PrivatenetworkswithDMZnameserver有DMZnameserver的私网

如果私网连接到单一的运营商,DMZnameserver应像下面的叙述做配置,来避免DNSpayload被拦截。

在DMZnameserver,hosts必须解析为他们的静态外网地址。这种方案下,DMZnameserver独自用于响应来自外网主机的查询。

在internalnameserver,对于有关外网host的DNS查询必须bypass掉DMZnameserver。

该方案要求管理员仔细地规划,来保证DMZnameservers不被privatehosts直接或间接地访问。使用DNSALG可以避免管理员受到这种折磨。

PS:个人理解这个方案就是让DMZnameserver单独负责响应来自外网的DNS查询,而私网的DNS查询全部由internalnameserver响应。所以DMZnameserver上是DMZhosts的外网地址,internalnameserver上是DMZhosts的私网地址。

2.2DMZhostsassignedexternaladdressesdynamicallyonNATNAT为DMZhosts动态分配外网地址

DMZhosts的外网地址由NAT动态分配,所以他们的对外地址是暂时性的(由NAT决定),而DMZhosts在私网的地址是固定的。在这种方案下,要求组织必须有DMZnameserver来允许通过DMZhosts的名称来访问他们。

DMZnameserver为DMZhosts配置到私网地址的解析。NAT设备上的DNSALG拦截发向或来自DMZnameserver(s)的DNS包,并对payload执行转换,使得DMZhostsname有正确的地址映射(私网或外网地址)

3InteractionsbetweenNATandDNS_ALGNAT与DNSALG的交互

作用领域的地址可能有重叠,但是作用领域的hosts名称必须是端到端唯一的,使得他们能够被所有hosts访问。

3.1AddressBindingconsiderarions地址绑定注意事项

我们将在NATs中对“TemporaryAddressBinding”(临时地址绑定)和“CommittedAddressesBinding”(固定地址绑定)加以区别。这个区别是有必要的,因为DNSALG将允许外网用户创建NAT状态,所以可能有潜在的DoS网络攻击。临时地址绑定用于下面的阶段:当前没有任何NATsessions使用绑定,地址绑定是预留的。固定地址绑定用于下面的阶段:当前存在至少一个NATsession,该session在外部和私有地址之间进行地址绑定。DNS_ALG使用这两类绑定来实现DNSpayload的修改。NAT仅使用固定地址绑定来按照NATsessions修改IP层和传输层的头部数据。

对于静态映射地址,上面说的区别没有什么意义。对动态映射地址,临时地址绑定一般优先于固定地址绑定。临时绑定出现在有到DMZnameserver的namelookup的时候。名称查询很可能是一个在查询发起者和查询主机之间实际会话的前兆。仅当NAT看到查询发起者和查询主机间会话的第一个报文时,临时绑定变为固定的。

一个可配置的参数,“Bind-holdouttime”可以用于在动态地址分配中定义临时绑定变为固定绑定前的最大存活周期。当DNS_ALG每次作用于这条临时绑定时,Bind-holdouttime周期会被刷新。两分钟的缺省Bind-holdouttime可能满足大多数的DNS_ALG设备。注意,一条固定地址绑定可能不是由临时绑定演变的。最后,当NAT准备释放一条固定地址绑定时,绑定会变成一条临时绑定并进入额外的Bind-holdout周期的阶段。只有当Bind-holdouttime到期后,临时绑定才释放掉。在变为固定绑定以及地址绑定释放之前都需要Bind-holdouttime周期,来确保终端主机在名称查询之后有足够的时间建立数据连接。

举例:

一个前缀为10.0.0.0/8的私网映射到198.76.29.0/24。当外网主机查询host7(其真实IP为10.0.0.7)时,私网内的DMZnameserver回复host7的A类RR:host7A10.0.0.7

DNS_ALG会拦截这个响应报文,如果10.0.0.7还没有分配外网地址,ALG会要求NAT建立一条到外网地址的临时地址绑定,并启动Bind-holdouttimer来对绑定计时。比如分配的地址是198.76.29.1,DNS_ALG会用这个临时地址绑定来修改DNS响应报文中的RR来替代10.0.0.7,变为新的RR:host7A198.76.29.1

当查询发起者收到DNS响应时,只会看到这个外网地址。在很短的时间里,发起者会向host7建立一条数据会话。当NAT注意到发往198.76.29.1的新会话时,会终止Bind-holdout计时器,并将198.76.29.1和10.0.0.7之间的临时绑定转变为一个固定绑定。

为了尽量避免DoS攻击(恶意用户连续发送大量的DNS查询,而不建立真正的连接),NAT必须监视那些没有变为固定绑定的临时地址绑定。设置一个临时绑定条目的上限,达到上限后不再建立临时绑定。此外还有一些可探索的解决方案,比如对这类恶意攻击进行计数并防御。

下面的小节,我们考虑bi-directionalNAT的情况,说明DNS_ALG中临时绑定的作用。尽管这个概念也适用于其他的NATs特性。
3.2 Incoming queries 入方向查询

In order to initiate incoming sessions, an external host obtainsthe V4 address of the DMZ-host it is trying to connect to by makinga DNS request. This request constitutes prelude to the start of apotential new session.

The external host resolver makes a name lookup for the DMZ hostthrough its DNS server. When the DNS server does not have a recordof IPv4 address attached to this name, the lookup query isredirected at some point to the Primary/Backup DNS server (i.e., inDMZ) of the private stub domain.

Enroute to DMZ name server, DNS_ALG would intercept the datagramand modify the query as follows.

a) For Host name to Host address query requests: Make no changeto the DNS payload.

对于主机名称到主机地址的查询报文:不对DNS payload做任何修改

b) For Host address to Host name queries: Replace the externalV4 address octets (in reverse order) preceding the string"IN-ADDR.ARPA" with the corresponding private V4 address, if suchan address binding exists already. However, if a binding does notexist, the DNS_ALG would simply respond (as a name server would)with a response code (RCODE) of 5 (REFUSED to respond due to policyreasons) and set ANCOUNT, NSCOUNT and ARCOUT to 0 in the headersection of the response.

对于主机地址到主机名称的查询:如果有该主机地址的地址绑定条目,则对字符串“IN-ADDR.ARPA”之前的八位外网V4地址进行替换,替换为对应的私网V4地址。然而,如果不存在绑定,DNS_ALG会简单地作出应答(像一台nameserver一样),这个DNS应答的responsecode(RCODE)是5(表示规则禁止响应)并且response的头字段的ANCOUNT,NSCOUNT和ARCOUNT都是0。

在反方向上,由于DNS response从私网内的DNSserver发送,DNS_ALG要再一次拦截报文并按下面的方式进行修改。

a) For a host name to host address query requests, replace theprivate address sent by DMZ name server with a public addressinternally assigned by the NAT router. If a public address is notpreviously assigned to the host's private address, NAT would assignone at this time.

对于主机名称到主机地址的查询,用NAT router为内部分配的公网地址替换DMZ nameserver发出的私网地址。如果预先没有为私网主机分配过公网地址,那么这时NAT将会分配一个。


b) For host address to host name queries, replace the privateaddress octets preceding the string "IN-ADDR.ARPA" inresponse
基于NAT-PT转换网关的DNS-ALG研究与实现 nat alg
RRs with their external address assignments. There is a chance herethat by the time the DMZ name server replies, the bind-holdouttimer in NAT for the address in question has expired. In such acase, DNS_ALG would simply drop the reply. The sender will have toresend the query (as would happen when a router enroute drops theresponse).

对于主机地址到主机名称的查询,用分配给主机的公网地址替换responseRRs里字符串"IN-ADDR.ARPA"前面的八位私网地址。这里可能出现偶然的情况,DMZ nameserver回复的时候,刚好NAT对这个地址的bind-holdout计时器超时了。这时DNS_ALG会丢弃回复报文。请求者需要重新发送查询(就像是响应报文在中途被路由器丢弃了一样)。

对于静态地址分配,原始RR中的TTL值会被保留下来,不做修改。对于动态地址分配,DNS_ALG会修改把DNSRRs中的TTL值改为0,意味着该RRs仅供本次交互进程使用,将不会被缓存下来。考虑到与设备(brokenimplementations)的兼容性,在实际应用中将TTL设置为1可能会更好。

无疑将TTL设为0将会比静态地址时创建更多的流量,因为name-to-addressmapping不会被缓存下来(每次连接前需要进行DNS查询)。特别地,这些网络应用程序将会被要求通过主机名称来识别对端节点,而不是通过IP地址。因为name-to-addressmapping不能被之前运行的应用共享,所以应用程序必须使用DNS来解析主机名称。

另外,NAT需要建立一个bind-holdouttimer机制,用于follow分配的地址。如果在Bind-holdout时间周期内没有建立到私网主机的会话,NAT将终结这个临时绑定。

3.3 Outgoing Queries 出方向查询

For Basic and bi-directional NATs, there is no need todistinguish between temporary and committed bindings for outgoingqueries. This is because, DNS_ALG does not modify the DNS packetsdirected to or from external name servers (used during outboundsessions), unlike the inbound DNS sessions.
Say, a private host needs to communicate with an external host. TheDNS query goes to the internal name server (if there exists one)and from there to the appropriate authoritative/cache name serveroutside the private domain. The reply follows the same route butneither the query nor the response are subject to DNS_ALGtranslations.

对于basic NAT和双向NAT,没必要对出方向查询区分临时和固定绑定。因为DNS_ALG不修改发向或来自外网nameservers的DNS报文。也就是说私网主机访问外网时,DNS查询先发到内部name server上,然后再从那发向适当地外网nameserver。中间的查询和响应报文都不需NAT做转换。

This however will not be the case with address isolated twiceNAT private and external domains. In such a case, NAT wouldintercept all DNS packets and make address modifications to payloadas discussed in the previous section. Temporary Private to externaladdress bindings are created when responses are sent by private DNSservers and temporary external to private address bindings arecreated when responses are sent by external DNS servers.

Twice NAT情况下的DNS_ALG

4 DNS payload modifications by DNS_ALG

Typically, UDP is employed as the transport mechanism for DNSqueries and responses and TCP for Zone refresh activities.

DNS_ALG不对DNS header做人任何修改。DNS_ALG将仅解析QCLASS是IN(IP类型)的DNSpayloads

4.1 Question section

4.1.1 PTR type Queries

DNS_ALG must identify all names, whose FQDNs (i.e., FullyQualified Domain Names) fall within IN-ADDR.ARPA domain and replacethe address octets (in reverse order) preceding the string"IN-ADDR.ARPA" with the corresponding assigned address octets inreverse order, only if the address binding is active on the NATrouter. If the address preceding the string "IN-ADDR.ARPA" fallswithin the NAT address map, but does not have at least a temporaryaddress binding, DNS_ALG would simply simply respond back (as a DNSname server would) with a response code (RCODE) of 5 (REFUSED torespond due to policy reasons) and set ANCOUNT, NSCOUNT and ARCOUTto 0 in the header section of the response.

DNS_ALG必须识别FQDNs在IN-ADDRARPA域的所有名称,并且用所分配的地址按反序,替换字符串“IN-ADDR.ARPA”前面的八位地址,仅在NATrouter上地址绑定是active的情况下。如果“IN-ADDR.ARPA”前面的地址在NAT地址映射中,但不存在至少一条临时地址绑定,那么DNS_ALG仅仅(像DNSname server一样)返回一个code为5的响应报文(Refused to respond due to policyreasons),并将响应报文头部的ANCOUNT,NSCOUNT和ARCOUNT设置为0。


Note that the above form of host address to host name type querieswill likely yield different results at different times, dependingupon address bind status in NAT at a given time.

注意,上述主机地址到主机名称查询的形式很可能在不同时间出现不同结果,取决于当前NAT地址绑定的状态。


For example, a resolver that wanted to find out the hostnamecorresponding to address 198.76.29.1 (externally) would pursue aquery of the form:

QTYPE = PTR, QCLASS = IN, QNAME = 1.29.76.198.IN-ADDR.ARPA.

DNS_ALG would intervene and if the address 198.76.29.1 isinternally mapped to a private address of 10.0.0.1, modify thequery as below and forward to DMZ name server within privatenetwork.

QTYPE = PTR, QCLASS = IN, QNAME = 1.0.0.10.IN-ADDR.ARPA

Presumably, the DMZ name server is the authoritative name serverfor 10.IN-ADDR.ARPA zone and will respond with an RR of thefollowing form in answer section. DNS_ALG translations of theresponse RRs will be considered in a following section.

1.0.0.10.IN-ADDR.ARPA PTR host1.fooboo_org.provider_domain

An example of Inverse translation is e-mail programs usinginverse translation to trace e-mail originating hosts for spamprevention. Verify if the address from which the e-mail was sentdoes indeed belong to the same domain name the sender claims insender ID.

反向转换的一个例子是E-mail程序使用反向转换来追踪邮件发起主机,用以过滤垃圾邮件。验证发出邮件的地址是否确实属于发送者ID中列出的地址域。

Query modifications of this nature will likely change the lengthof DNS payload. As a result, the corresponding IP and TCP/UDPheader checksums must be updated. In case of TCP based queries, thesequence number deltas must be tracked by NAT so that the delta canbe applied to subsequent sequence numbers in datagrams in the samedirection and acknowledgement numbers in datagrams in the oppositedirection. In case of UDP based queries, message sizes arerestricted to 512 bytes (not counting the IP or UDP headers).Longer messages must be truncated and the TC bit should be set inthe header.

这类情况的查询修改很可能改变DNSpayload的长度。因而必须对IP头和TCP/UDP头中的校验和进行更新。如果是基于TCP的查询,还要在NAT中对序列号进行跟踪,以便delta能够被应用到后续同方向报文的序列号中,以及反方向报文的ACK序号中。如果是基于UDP的查询,消息长度限于512字节以内(不包含IP和UDP头)。超出此长度的消息必须被截断,并对头部的TC标识置位。

Lastly, any compressed domain names using pointers to representcommon domain denominations must be updated to reflect new pointerswith the right offset, if the original domain name had to betranslated by NAT.

4.1.2 A, MX, NS, and SOA type Queries

对这几类查询,DNS_ALG不做任何修改。

4.1.3 AXFR type Queries

AXFR is a special zone transfer type query. Zone transfers fromprivate address realm must be avoided for address assignments thatare not static. Typically, TCP is used for AXFR requests.

AXFR是一种特殊的zone transfer type query。来自私网地址域的zonetransfers必须避免非静态的地址分配。通常AXFR请求是基于TCP的。

当一个zone发生改动时,这些改动必须分发到所有name servers。

########## 暂略 ##########

4.1.4 Dynamic Updates to the DNS

一台授权名称服务区可以动态更新,from the nodes within the zone withoutintervention from NAT and DNS-ALG,只要他避免传播跨地址域的DNS zone。我们建议保持DNSzone在他负责的相同领域中。通过这样做,DNS updatetraffic将不会跨越地址领域,因此也不需受DNS_ALG的处理。

进一步地说,如果动态更新需要跨地址域,那么update消息必须总是采用DNSSEC加密的,这样的update消息当然也不在DNS-ALG的处理范围之内。

4.2 Resource records in all other sections

5 Illustration of DNS_ALG in conjunction with Bi-directionalNAT

6 Illustration of DNS_ALG in conjunction with Twice-NAT

7 DNS-ALG limitations and Future work

8 Security Considerarions

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/101309.html

更多阅读

联通家庭网关怎么设置 中国联通家庭网关终端

联通家庭网关怎么设置——简介网关的设置是电脑操作的最基本技能,下面讲一下默认网关的设置方法。联通家庭网关怎么设置——方法/步骤联通家庭网关怎么设置 1、打开“控制面板”,将“查看方式”设置为“小图标”,然后找到并点击“Inte

默认网关怎么设置 怎么设置无线路由器

默认网关怎么设置——简介默认网关的设置是电脑操作的最基本技能,下面讲一下默认网关的设置方法。默认网关怎么设置——方法/步骤默认网关怎么设置 1、打开“控制面板”,将“查看方式”设置为“小图标”,然后找到并点击“Internet选项

网桥、路由器、网关的区别? 网桥和路由器的区别

网桥工作在数据链路层,将两个LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。路由器是互联网络中必不可少的网络设备之一,路由器是一种连接多个网络或网段的网络设备,它能

用简单CMD命令防御ARP攻击和DNS欺骗 arp攻击 网关欺骗

点 开始——运行—输入CMD确定。好了,我们现在来看下我们的arp列表。输入arp -a看到我的列表,里边就一条纪录,就是我的网关的IP地址和MAC地址在被攻击的时候,攻击主机会发送一个ARP包,里边有真实的IP地址和伪造的MAC地址。如果伪造的是网

转载 android-获取系统的网关ip win7系统nat网关设置

原文地址:android-获取系统的网关ip作者:84许在android程序里获取系统的网关ip,使用android.net.DhcpInfo,这个类里面就存储着网关ip的数据,下面是获取网关的方法public static String getGateWay() {if (Netgear_WifiManager.wifiManage

声明:《基于NAT-PT转换网关的DNS-ALG研究与实现 nat alg》为网友树上的向日葵分享!如侵犯到您的合法权益请联系我们删除