网络地址转换规则配置的优化方法 技术领域:
本发明涉及一种网络地址转换规则配置的优化方法。
背景技术:
NAT(Network Address Translator,网络地址转换)用于允许专用网络上的多台PC机(使用专用地址范围,例如10.0.x.x、192.168.x.x、172.x.x.x)共享单个、可全局路由的IPv4(地址转换协议的第4版本)地址,即NAT可以在多重的internet子网中使用相同的IPv4地址,保证了数量有限的IPv4地址被尽可能多地用户使用,同时NAT也支持外部源地址的转换,其接受到外部回来的数据包,再根据NAT表把地址翻译成内部的局部IP,并将数据包转发过去;NAT也支持内部服务器的负载均衡等其他的相关应用。
在内部主机连接到外部网络时,当第一个数据报文到达路由器时,路由器根据数据报文的源地址(内部局部IP)匹配自己的NAT表,因为是NAT是静态配置的,故可以查询出该源地址的转换规则,然后路由器将数据报文的源地址更换成IPv4地址,再转发出去;NAT通过在地址转换时首先生成一条针对用户报文的链接,例如TCP的用户链接,所以用户链接和NAT表中的规则之间存在固定的关系。
对于比较多用户的情况,相应的链接表项可能也比较大,当我们更换规则或者规则变动时,如果查找相应的用了此规则的用户链接,通常方法是遍历所有的用户链接,具体是根据规则的源地址转换或者目的地址转换匹配用户链接中初始源地址或者目的地址,如果用户链接表项中有几万条链接我们需要遍历几万次,对于每次遍历到的用户链接还要匹配两次ip地址,同样地,如果我们要查找用户链接匹配的规则,则需要根据用户链接中的original的源去匹配所有的源地址转换规则,根据用户链接original中的目的去匹配所有的目的地址转换规则;可见,链接和规则之间的互相查找是相当频繁的,但规则和用户链接之间的联系不够紧密,对之相应的调度不是很方便,特别是涉及到NAT规则变动需要查找相应的用户时,查找速度比较慢,在配置静态规则优先时,一般需要查询有无与之冲突的动态规则,这同样需要遍历查找,具体来讲现有的NAT规则和用户链接的缺点如下:
1、NAT规则和用户链接之间的联系不紧密,当NAT中的某几个规则变动或在配置静态规则优先时,需要进行一番遍历才能查找用户链接的活动,比较费时;
2、程序设计不太合理,冗余、可读性差。
发明内容:
针对NAT中规则和用户链接之间所存在的问题和不足,本发明的目的是提供一种网络地址转换规则配置的优化方法。
本发明是这样实现的:一种网络地址转换规则配置的优化方法,路由器接收到数据报文后,根据所述数据报文的源地址、目的地址和协议号匹配NAT中的规则,匹配成功后,将该连接存储,并将与该连接匹配的规则下挂到该连接,同时,将该连接下挂到所述规则。
进一步地,所述连接和规则中包含有指针结构,该结构为链头结构的头指针指向第一个链表节点,尾指针指向链尾的节点,第一个节点的prev指针指向NULL,链尾节点的next指针指向NULL。
进一步地,所述下挂就是指将所述节点的data指针指向存放所挂内容的首地址。
进一步地,所述连接为记录地址前后转换信息的文件。
进一步地,所述连接中还记录有端口信息。
本发明通过设置链表结构,将NAT的规则和用户链接相互上挂,这样就可以实现规则和用户链接的互查,在规则变化或配置静态规则优先时,通过规则既可将所有用到该规则的用户链接查找到,通过用户链接也可以查找到其所用到的规则,并且,本发明使应用到的程序更加清晰,明朗易懂更有利于编程者的处理,由于其采用链式模式,使其配置灵活性更好。
附图说明:
下面结合附图,对本发明作出详细描述。
图1为本发明互查链结构示意图;
图2为本发明用户链接下挂规则的结构示意图;
图3为本发明规则下挂用户链接的结构示意图。
具体实施方式:
本发明是这样实现的:路由器接收到数据报文后,根据所述数据报文的源地址和目的地址匹配NAT中的规则,匹配成功后,将该用户链接存储,并将与该用户链接匹配的规则下挂到该用户链接,同时,将该链接文件下挂到所述规则。用户链接和规则的存储方式均为链表模式,该模式为,链头结构的头指针指向第一个链表节点,尾指针指向链尾的节点,第一个节点的prev指针指向NULL,链尾节点的next指针指向NULL,而节点的data指针指向存放所挂内容的首地址,链表的具体结构如图1所示。
数据报文头的信息中,如果源地址为192.168.0.4,源端口为2961,目的地址为10.5.3.1,目的端口为2048,路由器根据上述信息内容匹配相应的NAT规则,经匹配后找到如下两条规则:
rule1:目的地址转换为202.106.185.226;
rule2:源地址转换为66.77.9.40。
路由器根据上述规则将目的地址转换为IPv4地址202.106.185.226,即内部全局地址;将源地址192.168.0.4转换为IPv4地址66.77.9.40,即内部全局地址,将目的地址10.5.3.1转换为202.106.185.226,即完成了一次通信,同时,路由器记录该链接,如图2所示,最上面的方框内容就是该文件,同时,在用户链接文件pstrule的指针结构中,用节点的data指针指向二规则的存放的首地址,同时,如图3所示,在各规则pstct的指针结构中,用节点的data指针指向用户链接的存放的首地址。
如图3所示,如果规则1或2需要删除时,通过pstct的指针结构,可方便地查找到应用了此规则的所有链接,可将应用了此规则的户另行处理之。
在添加指定了具体转换地址的规则静态规则时,为方便地查找到是否已经有与之冲突的动态规则被应用,这里,动态规则即指用户访问控制列表和地址池指定一段地址段的规则,即根据新配置的静态规则地址转换信息遍历用户链接表项,具体方法是根据静态规则里面要转换的ip地址匹配用户链接的original和reply中的ip地址;如果有这么一条动态规则:
rule3:将目的地址符合acl(access control list,访问控制列表)转换为地址池pool中某个地址;这里,acl指定网段为:10.5.3.0/24,pool地址指定为:202.106.185.226-202.106.185.230。
而欲设置静态规则中,要转换目的地址10.5.3.1,就用该目的地址匹配所有的用户链接,结果,匹配到了应用rule3的用户连接,并在该用户连接的下挂规则中rule3,所配置的静态规则就是和此动态规则冲突的,可以限制配置的静态规则,如设置为图2或3中的规则,或者进行其它操作,这大大方便了对路由器中NAT表的设置和修改。
本发明还可以在规则修改时能够做到即时刷新旧的链接表项。具体是用户访问控制列表动态规则修改时,如rule3,如果有相关的用户链接用了此规则,则清除掉此规则下挂的链接,让这些用户链接重新连接查找匹配新规则。而且对于那些当初由于用户规则还没配置而生成的没有经过规则转换的用户链接,可以在新的其可能需要匹配的规则生效后马上将这些用户链接清除,从而使其重新链接应用上新规则。例如rule1在用户新配置上时,这时查找到已经有了original里目的地址含有10.5.3.1的用户链接生成,但查看此用户链接里的规则链中未有10.5.3.1用过的地址转换规则,可将该用户链接清除,使其重新链接时匹配到rule1,将10.5.3.1转换为202.106.185.226。
由于互查链的应用,使应用程序变得清晰,本发明可以支持动态规则配置不存在的访问控制列表acl和地址池pool,使访问控制列表和地址池的增删与规则保持一定的相对独立性。例如动态规则rule3,它的acl和pool可以是事先不存在的,可以先分别指定名字,如可分别叫acl1,pool1,而当acl1和pool1随后都配置上而且指定了具体的网段时,此时rule3才算生效;同样地,即使规则rule3中acl1和pool1指定了具体的网段,只要不被用户使用也可以将acl1和pool1删除,而rule3上只挂两个不存在实际内容的acl名字acl1和pool名字pool1。
当一个规则配置了不存在的acl和pool时,而acl随后被用户配置上,这时需查看pool是否也有配置,如果有,则查看其是否被已经建立链接的用户需要,具体查看方法如下:
例如rule3,如果用户链接original里的目的地址含有10.5.3.1,符合acl里指定网段10.5.3.0/24的地址,那么此用户链接可能需要重新链接匹配rule3,再查看用户链接下挂的规则链是否已经有了相应的规则使此目的地址10.5.3.1转化,如果用户链接实际已经用了rule1进行了转化,那么此时就不需清除该用户链接进行重连了;如果没有规则被应用,则清除该条用户链接让其重新连接从而匹配rule3进行地址转换,将10.5.3.1转化为地址池里地址;同样地,对于pool配置上时也是如此。对于acl的更新和地址池的删除等,都可以通过查找相关的规则下的用户链接来及时的进行处理。
本发明还可以方便的增加用户命令行接口,使用户可以直接看到哪些规则被哪些用户链接所应用,哪些用户链接都应用了哪些规则,而且,这也非常利于程序的调试和维护。本发明的好处就是使用户配置时能够简洁有效的处理,应用程序也更加清晰,明朗易懂,处理起来方便,配置灵活性更好。