发明内容
本发明提供了一种网络地址转换环境中报文转发的方法及设备,在NAT多出口网络中实现外网设备访问内网设备时,正确发送内网设备的响应报文。
一种网络地址转换环境中报文转发的方法,应用于包括多个网络地址转换NAT设备、以及内网设备和外网设备的系统中,当外网设备访问内网设备时,NAT设备在外网入口对访问报文进行NAT转换,将转换后的报文向内网设备发送,内网设备响应外网设备访问发送的响应报文在通过NAT设备向外网设备发送的时候,该方法包括:
当接收到内网设备发送的响应报文为时,所述NAT设备在地址转换表中查找与所述响应报文匹配的会话,如果匹配成功,根据查找到的会话转发所述响应报文,如果匹配失败,向其他NAT设备转发所述响应报文;
当接收到其他NAT设备发送的响应报文为时,所述NAT设备在地址转换表中查找与所述响应报文匹配的会话,根据查找到的会话转发所述响应报文;如果没有查找到与所述响应报文匹配的会话,则丢弃所述响应报文。
所述向其他NAT设备转发所述响应报文包括:
将所述响应报文发送至预先配置的隧道接口,通过该隧道接口对所述响应报文进行隧道封装,通过预先配置的与其他NAT设备之间的隧道转发所述响应报文。
还包括:
当通过隧道接口接收到报文时,所述NAT设备判定接收到的报文为由其他NAT设备发送的响应报文;
当通过隧道接口之外的接口接收到报文时,所述NAT设备根据报文源IP地址信息判定是否为内网设备发送的报文,在接收的报文是内网设备发送的报文时,根据报文是否ACK置位判断报文是否为响应报文。
当其他NAT设备有两个以上时,所述隧道为基于组播的隧道,所有NAT设备属于同一组播组。
当接收到其他NAT设备发送的响应报文为时,根据查找到的会话转发所述响应报文之后,还包括:
所述NAT设备向与所述内网设备对应的路由设备发送高优先级的路由,通过所述路由设备将所述内网设备发送的去往对应外网设备的报文引流至本地内网接口。
所述向其他NAT设备转发所述响应报文包括:
通过预先配置的物理直连通路向其他NAT设备转发所述响应报文。
还包括:
当通过预先配置的物理直连通路对应的接口接收到报文时,所述NAT设备判定接收到的报文为由其他NAT设备发送的响应报文;
当通过预先配置的物理直连通路对应的接口之外的接口接收到报文时,所述NAT设备根据报文源IP地址信息判定是否为内网设备发送的报文,在接收的报文是内网设备发送的报文时,根据报文是否ACK置位判断报文是否为响应报文。
一种网络地址转换设备,应用于包括多个网络地址转换设备、以及内网设备和外网设备的系统中,当外网设备访问内网设备时,网络地址转换NAT设备在外网入口对访问报文进行网络地址转换,将转换后的报文向内网设备发送,内网设备收到外网设备的访问报文后通过网络地址设备向外网设备发送响应报文,包括:
接收单元,用于接收内网设备或者其他NAT设备发送的响应报文;
查找单元,与所述接收单元连接,用于在地址转换表中查找与所述响应报文匹配的会话;
第一处理单元,与所述查找单元连接,用于当所述查找单元查找到与所述响应报文匹配的会话时,根据查找到的会话转发所述响应报文;
第二处理单元,与所述查找单元连接,用于当所述查找单元没有查找到与所述响应报文匹配的会话、且所述响应报文由内网设备发送,则向其他NAT设备转发所述响应报文;当所述查找单元没有查找到与所述响应报文匹配的会话、且所述响应报文由其他NAT设备发送,则丢弃所述响应报文。
所述第二处理单元具体用于:
将所述响应报文发送至预先配置的隧道接口,通过该隧道接口对所述响应报文进行隧道封装,通过预先配置的与其他NAT设备之间的隧道转发所述响应报文。
还包括:
判断单元,与所述接收单元连接,用于当所述接收单元通过隧道接口接收到报文时,判定接收到的报文为由其他NAT设备发送的响应报文;当通过隧道接口之外的接口接收到报文时,根据报文源IP地址信息判定是否为内网设备发送的报文,在接收的报文是内网设备发送的报文时,根据报文是否ACK置位判断报文是否为响应报文。
当其他NAT设备有两个以上时,所述隧道为基于组播的隧道,所有NAT设备属于同一组播组。
还包括:
重定向单元,用于当所述第二处理单元转发接收到其他NAT设备发送的响应报文之后,向与所述内网设备对应的路由设备发送高优先级的路由,通过所述路由设备将所述内网设备发送的去往对应外网设备的报文引流至所述网络地址转换设备的内网接口。
所述第二处理单元具体用于:通过预先配置的物理直连通路向其他NAT设备转发所述响应报文。
还包括:
判断单元,与所述接收单元连接,用于当所述接收单元通过预先配置的物理直连通路对应的接口接收到报文时,判定接收到的报文为由其他NAT设备发送的响应报文;当所述接收单元通过预先配置的物理直连通路对应的接口之外的接口接收到报文时,根据报文源IP地址信息判定是否为内网设备发送的报文,在接收的报文是内网设备发送的报文时,根据报文是否ACK置位判断报文是否为响应报文。
与现有技术相比,本发明至少具有以下优点:
当NAT设备在地址转换表中没有查找到与内网设备发送的响应报文匹配的会话时,将响应报文向其他NAT设备发送,使得该响应报文能够通过NAT设备争取发送至外网设备,从而使得内网设备与外网设备的通信能够正常进行。
具体实施方式
本发明的核心思想是:在NAT多出口网络中,当NAT设备在地址转换表中没有查找到与内网设备发送的响应报文匹配的会话时,将响应报文向其他NAT设备发送,使得该响应报文能够通过NAT设备争取发送至外网设备;当接收到其他NAT设备发送的响应报文为时,NAT设备在地址转换表中查找与所述响应报文匹配的会话,根据查找到的会话转发所述响应报文。其中,NAT设备预先配置与其他NAT设备对应的特定接口,从该特定接口接收到的报文即为其他NAT设备发送的响应报文。
实施例一
本发明实施例一提供一种多出口网络地址转换环境中报文转发的方法,其网络环境结合图2所示,该方法包括图3所示的过程:
步骤301,客户端向服务器发送的IP报文发送至NAT设备A。
步骤302,NAT设备A将IP报文进行网络地址转换后向服务器发送,并在地址转换表中记录与客户端和服务器对应的session。
网络地址转换包括1)基本地址转换和2)NAPT(Network Address PortTranslation,网络地址端口转换)。
1)基本地址转换:
当内部网络向外部网络发送报文时,NAT设备使用出接口的IP地址(外网IP地址)替换报文的源IP地址(内网IP地址),当外部网络向内部网络发送报文时,NAT设备使用内网设备的IP地址替换报文的目的IP地址。这种情况下,NAT设备内存储内网设备的IP地址与出接口IP地址的对应关系。
2)NAPT:
NAPT是基本地址转换的一种变形,允许多个内网IP地址映射到同一个外网IP地址上,也可称之为“多对一地址转换”。与基本地址转换不同的是,NAPT同时映射IP地址和端口号:来自不同内网IP地址的数据报文的源地址可以映射到同一外部地址,但它们的端口号被转换为该地址的不同端口号,因而仍然能够共享同一地址,也就是“私网IP地址+端口号”与“公网IP地址+端口号”之间的转换。例如,三个带有内部地址的数据报文到达NAT设备,其中报文1和报文2来自同一个内网地址(192.168.1.2)但有不同的源端口号(1111、2222),报文1和报文3来自不同的内部地址(192.168.1.2、192.168.1.3)但具有相同的源端口号(1111)。通过NAPT映射,三个数据报的源IP地址都被转换到同一个外部地址(20.1.1.1),但每个数据报都被赋予了不同的源端口号(1001、1002、1003),因而仍保留了报文之间的区别。当各报文的回应报文到达时,NAT设备仍能够根据回应报文的目的IP地址和目的端口号来区别该报文应转发到的内部主机。三个报文的地址转换表如表1所示。
表1
Direction(目的) |
Before NAT |
After NAT |
外网 |
192.168.1.2:1111 |
20.1.1.1:1001 |
外网 |
192.168.1.2:2222 |
20.1.1.1:1002 |
外网 |
192.168.1.3:1111 |
20.1.1.1:1003 |
对于上述1)和2)两种网络地址转换,NAT设备都需要在地址转换表中记录转换前和转换后的session(对于1),session主要包括IP地址,对于2),session主要包括IP地址和端口号),并建立网络地址转换前的session和网络地址转换后的session的映射关系。
服务器接收到IP报文后,向客户端发送响应报文(例如TCP或UDP回应报文),该响应报文可以发送到NAT设备1或NAT设备2。
当响应报文发送至NAT设备1时,包括:
步骤303A,NAT设备1获取报文的入接口,判断报文为服务器发送的响应报文,执行步骤304A。
需要说明,NAT设备1预先与NAT设备2之间建立隧道(当有多个NAT设备时,多个NAT设备之间建立隧道),该隧道用于在NAT设备之间转发响应报文,隧道类型不限,例如为GRE隧道。各NAT设备上存储各隧道对应的隧道接口。优选的,各NAT设备上建立邻居列表(多个NAT设备彼此之间互为邻居),用于指定邻居的数量、隧道通信所使用的IP地址等相关信息,如表2给出的示例。
表2
分组 |
邻居名 |
通信IP |
活跃状态 |
Group1 |
网通出口 |
192.168.1.1 |
正常 |
Group1 |
联通出口 |
192.168.2.1 |
不可达 |
Group2 |
移动出口 |
192.168.100.1 |
正常 |
对于配置了隧道的NAT设备1,需要判断接收到的报文为隧道报文(当本地地址转换表中没有与响应报文对应的session时,需要将响应报文隧道发送至其他NAT设备,在下文介绍NAT设备2对报文的处理时详细介绍报文的隧道发送过程)、内网设备发送的响应报文或者其他报文。
如果是隧道报文,NAT设备1将报文解封装得到响应报文,进而在地址转换表中查找对应的session,如果查找到匹配的session,根据与报文匹配的session转发响应报文,否则丢弃报文。
对于隧道报文之外,NAT设备1根据报文源IP地址信息(源IP地址、或者源IP地址+源端口号)来检查该报文是否为内网设备发送的报文,如果是内网设备发送的报文,进一步判断报文是否为ACK置位报文,若报文ACK没有置1,则该报文按照普通NAT转发流程转发,若报文ACK置1,则需要查找地址转换表,若有匹配session,则按照普通NAT转发流程根据匹配session的表项转发,若没有匹配session,则将报文送交到隧道接口,由隧道接口封装后从隧道中将报文发送给其他NAT网关。
本实例中,NAT设备1判定接收到内网服务器发送的响应报文。
步骤304A,NAT设备1根据地址转换表中存储的与响应报文对应的session,对响应报文进行网络地址转换后向客户端发送。
当响应报文发送至NAT设备2时,如图4所示,包括:
步骤303B,NAT设备2获取报文的入接口,判断报文为服务器发送的响应报文,执行步骤304B。
NAT设备2判断报文是否为服务器发送的响应报文的过程与上述NAT设备1类似,在此不做赘述。
步骤304B,NAT设备2在本地地址转换表没有查找到与响应报文匹配的session,将报文通过隧道向NAT设备1发送。
具体的,NAT设备2将报文发送至隧道接口,将响应报文作为隧道体进行隧道封装。
隧道封装格式示例如图5所示,其中,隧道源IP地址为NAT设备2隧道接口对应IP地址、隧道目的IP为NAT设备1的隧道接口对应IP地址。隧道体为响应报文,其IP地址等报文信息均没有发生改变。
步骤305B,NAT设备1接收到NAT设备2隧道发送的响应报文,解封装隧道报文得到响应报文。
NAT设备1接收到隧道报文后,解封装得到隧道体,即响应报文。
步骤306B,NAT设备1在本地地址转换表查找到与响应报文匹配的session,对响应报文进行网络地址转换后向客户端发送。
需要说明,在存在多个NAT网关的情况下(大于等于3个),由于送交隧道接口的报文会被复制成多份向邻居转发,这项工作会增加NAT设备的负担(例如CPU负担和带宽负担)。优选的,所有NAT设备均加入并监听一个指定组播组,这样NAT设备的隧道接口在接收到报文以后,可以将报文封装进一个目的IP为组播IP的隧道报文,并向网络中转发。由于所有NAT设备均加入并且监听该组播组,所有邻居NAT设备都能够收到该隧道报文,所以发送报文的这个NAT设备不需要向每一个邻居发送一份单独的隧道报文,而只需要发送一份单独的隧道报文就可以了。
另外,考虑到向隧道中转发报文,可能对设备和网络带宽产生额外的开销,在有较大流量往返路径不一致的情况下,设备负担和网络带宽负担都会较重。在某个NAT网关从隧道中收到其他NAT网关转发过来的报文以后,针对报文的目的IP(外网发起访问的客户端的IP)向服务器对应的路由设备发送优先级较高的主机路由,从而通过这些路由设备将服务器发送的去往外网发起访问的客户端的流量直接引流至自己的内网接口上,实现了直接更正流量往返路径,并使其统一的目的,这样可以减轻其他NAT网关向隧道中封装数据报文的开销和网络带宽的开销。
实施例二
本发明实施例二提供一种多出口网络地址转换环境中报文转发的方法,其网络环境如图6所示,该方法的流程与实施例一相似,区别在于:
实施例一中NAT设备之间建立隧道,本实例中NAT设备之间使用直接的物理连接。相应的,本实例中,NAT设备需要存储物理连接对应的接口,在在本地地址转换表没有查找到与响应报文匹配的session时,NAT设备将响应报文发送至特定接口,通过物理连接将响应报文发送至邻居NAT设备。
NAT设备需要判断收到的报文的入接口是物理直连通路(即上述直接的物理连接)对应的接口,如果是,则根据实例一中与隧道报文对应的处理方式进行处理。否则,根据实例一中隧道报文之外的报文的处理方式进行处理。
实施例三
基于与上述方法实施例相同的技术构思,本发明实施例三提供一种网络地址转换设备,应用于包括多个网络地址转换设备、以及内网设备和外网设备的系统中,当外网设备访问内网设备时,网络地址转换设备在外网入口对访问报文进行网络地址转换,将转换后的报文向内网设备发送,内网设备收到外网设备的访问报文后通过网络地址设备向外网设备发送响应报文,如图7所示,包括:
接收单元11,用于接收内网设备或者其他NAT设备发送的响应报文;
查找单元12,与所述接收单元11连接,用于在地址转换表中查找与所述响应报文匹配的会话;
第一处理单元13,与所述查找单元12连接,用于当所述查找单元查找到与所述响应报文匹配的会话时,根据查找到的会话转发所述响应报文;
第二处理单元14,与所述查找单元12连接,用于当所述查找单元没有查找到与所述响应报文匹配的会话、且所述响应报文由内网设备发送,则向其他NAT设备转发所述响应报文;当所述查找单元12没有查找到与所述响应报文匹配的会话、且所述响应报文由其他NAT设备发送,则丢弃所述响应报文。
所述第二处理单元14具体用于:
将所述响应报文发送至预先配置的隧道接口,通过该隧道接口对所述响应报文进行隧道封装,通过预先配置的与其他NAT设备之间的隧道转发所述响应报文。
该设备还包括:
判断单元15,与所述接收单元11连接,用于当所述接收单元通过隧道接口接收到报文时,判定接收到的报文为由其他NAT设备发送的响应报文;当通过隧道接口之外的接口接收到报文时,根据报文源IP地址信息判定是否为内网设备发送的报文,在接收的报文是内网设备发送的报文时,根据报文是否ACK置位判断报文是否为响应报文。
当其他NAT设备有两个以上时,所述隧道为基于组播的隧道,所有NAT设备属于同一组播组。
该设备还包括:
重定向单元16,用于当所述第二处理单元14转发接收到其他NAT设备发送的响应报文之后,向与所述内网设备对应的路由设备发送高优先级的路由,通过所述路由设备将所述内网设备发送的去往对应外网设备的报文引流至所述网络地址转换设备的内网接口。
所述第二处理单元14具体用于:通过预先配置的物理直连通路向其他NAT设备转发所述响应报文。
判断单元15,与所述接收单元11连接,还可以用于当所述接收单元通过预先配置的物理直连通路对应的接口接收到报文时,判定接收到的报文为由其他NAT设备发送的响应报文;当所述接收单元通过预先配置的物理直连通路对应的接口之外的接口接收到报文时,根据报文源IP地址信息判定是否为内网设备发送的报文,在接收的报文是内网设备发送的报文时,根据报文是否ACK置位判断报文是否为响应报文。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。