查看: 5629|回复: 19

研究贴,搞技术的都进来,关于解决NAT高端口

[复制链接]
发表于 2007-10-26 23:42:34 | 显示全部楼层 |阅读模式
最近不太爽,发贴带脏字,就当没看见吧,技术内容是不会tmd打折扣的,你们放心!

今天tm的突然想到,isp如何检测客户机用路由了?
根据一些情况,很多客户机用了路由,就是浏览网页也会被封。而单机bt,再浏览网页啥的,都没问题,基本就排除了连接数。
剩下的一些在客户端能改的,比如什么浏览器发送的Agent字段啦,透明代理啦,etc,我就不说了,自己想办法。

我觉得可能的无非两种:A、检测客户机的高端口;B、检测客户IP包的IP标识字段。
至于B,我们认为很好解决,IP包中的标识字段不是决定性的关键字段,只要充填任意十六进制数即可,因此出网的时候,路由完全可以给改成连续递增的。啥?路由固件不能升级?大不了咱们土鳖点,用2000做个路由和远程访问,然后写个ndis驱动挂上,改出网的数据包总可以了吧???!!!

何为高端口?电驴不是有一个高ID么?哈,就不可以有高端口了?
其实我说的高端口就是现在简单NAT的一种固有缺点——路由器转发你的数据包到外网,它发送数据包的源端口可不是你计算机发给路由的数据包的源端口了。路由器维护了一个“基于传输层”的路由表,这里面有ip、端口等诸多因素,来确定一个Socket对之间的数据包转发。为了减少路由器的负载,现在大多数厂商用的是简单的NAT技术,就是只关心【源、目标ip】和【源、目标端口】,而不关心传输层其他的内容。

普及一个知识!!!何为Socket对?说白了,就是源IP、目的IP、源端口、目的端口四个因素,这就构成了一个唯一的Socket对。

但是简单的NAT为何要使用高外部端口转发你的数据呢?
我们看图来理解一下,图中有1和2两台计算机,都在内网(lan),a和b是两台服务器,在外网(wan)。
如果1和2访问外网,只要目的ip、源端口和目的端口这三者之一有不同,那么简单的NAT就不会出错。
但是,设想极端的情况,如果1和2都用相同的源端口1025访问A的80,那么简单的NAT在接收到数据准备回复的时候,就会出错。简单的NAT会收到两个来自A服务器80,到本地1025端口的数据包,它不知道哪个应该返回给1,哪个给2。
这就是简单NAT的局限性!所以简单NAT要开放高端口(比如20000以上的端口),来为每一个Socket对建立一个外部端口,这样简单NAT的转发就不会出错。

因此,很显然,isp可以根据开放高端口这一特性,判定客户使用了路由器。(虽然很流氓的理由,但是没办法。)

那么如何使路由器不开放高端口?办法有的。。。思路一个,提供给大家。
IP地址是网络层的内容,端口是传输层的内容。在内网和公网之间的通信,经过NAT后,如果不改变外部端口,在某些情况下,我们就没法通过Socket对来确定一个唯一的进程间通信了。

Tips:进程间通信,是指通过一个Socket对,来确定两台计算机之间的两个进程之间的唯一通信,因为端口是计算机上的进程打开的。

其实NAT本身就是个工作在网络层与传输层的东西,(转发数据包是网络层,获取port之类的就到了传输层了,分层原则是不干涉其他层的内容,我这么说有道理吧?)
我们可以获取更多的传输层的信息来判定。就tcp而言,如果有上一个包的seq和ack,判断下一个包很容易。
路由器分配NAT表的话,我认为可以这样:检测到一个新的tcp包发送,建立一个NAT转发规则,记录了发送出去的包的相关信息,诸如socket对的所有信息,seq,ack等,然后检测入站的包,一旦在seq、ack上有符合这条规则的了,就按规则转发给内网的响应机器,然后删除此规则,而无需判断下一个发出去的包是什么。(因为NAT发包本身不存在类似问题)

都是很简单的道理,也许我说的有误,还请大家斧正,半夜了,脑袋容易进浆糊。。。呵呵

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×

评分

1

查看全部评分

回复

使用道具 举报

发表于 2007-10-27 15:23:41 | 显示全部楼层
ISP通过检测高端口来鉴别客户使用NAT的可能性不大,一方面是2000/xp/2003开机时间长了,也会用到高端口;另一方面,现在的vista/2008一开始就用高端口,ISP用这个来鉴别岂不是自找麻烦?因此,目前还是以IPID等ip指纹为主来鉴别。

评分

1

查看全部评分

回复

使用道具 举报

发表于 2007-10-27 17:49:17 | 显示全部楼层
虽然我们这类的isp没有封共享上网 但是楼主的帖子写的很生动具体 分析的也很透彻 是个好的NAT介绍
不过这个新的方法 为一个包在这一增一删上花费就大了点 主机多的话不知道吃不吃的消
回复

使用道具 举报

发表于 2007-10-27 19:15:44 | 显示全部楼层
"这就是简单NAT的局限性!所以简单NAT要开放高端口(比如20000以上的端口),来为每一个Socket对建立一个外部端口,这样简单NAT的转发就不会出错。"
这并不存在因果关系,用低端口一样可以为每一个socks使用一个外部端口,之所以使用象45000以后的高端口完全因为端口定义的问题。
回复

使用道具 举报

发表于 2007-10-29 09:51:01 | 显示全部楼层
“但是,设想极端的情况,如果1和2都用相同的源端口1025访问A的80,那么简单的NAT在接收到数据准备回复的时候,就会出错。简单的NAT会收到两个来自A服务器80,到本地1025端口的数据包,它不知道哪个应该返回给1,哪个给2。”

您前面已经说了,转换是通过4元组(源,目的地址,源,目的端口)实现的,即使同时发生了您上面说说的情况,NAT设备依然可以依靠不同的IP地址进行识别啊?

而且我认为,您的这种说法,貌似应用性不强哈~~~
回复

使用道具 举报

 楼主| 发表于 2007-10-29 11:15:00 | 显示全部楼层
原帖由 lnan 于 29/10/2007 09:51 发表
您前面已经说了,转换是通过4元组(源,目的地址,源,目的端口)实现的,即使同时发生了您上面说说的情况,NAT设备依然可以依靠不同的IP地址进行识别啊?

绝对不可能,呵呵。至少以一个Socket对判断绝对不可能。

to:fnto,根据猜测isp应该是以IPID来判断的,但是至少我是没办法证实。
何谓“自找麻烦”,isp封路由本身就是/自找麻烦/,至于用什么手段,造成什么影响,isp的公关部门不是吃白饭的,我又不是没见识过,哈。您“端口定义”的理论我赞同,不过10000一下的端口还是有一些基础服务,所以要开得高点避免麻烦。

to: hhhlllttt
NAT的转发表,都是需要维护的,简单的NAT也是如此。如果不维护,一个链接一个端口,60000个端口我相信很快就会耗尽的。
维护的手段不同吧,这只是一个最初的想法,后期的技术还需要完善。

感谢朋友们与我分享你们的思路,在这儿能看到一些真实的意见。

ps:保留文章及其阐述技术之所有权,授权用途仅限于科学研究,不得用于商业、专利申请等,保留行使法律手段的权利。
回复

使用道具 举报

发表于 2007-11-1 13:53:17 | 显示全部楼层
“但是,设想极端的情况,如果1和2都用相同的源端口1025访问A的80,那么简单的NAT在接收到数据准备回复的时候,就会出错。简单的NAT会收到两个来自A服务器80,到本地1025端口的数据包,它不知道哪个应该返回给1,哪个给2。”

1和2同时用1025访问A的80,路由器给A的返回端口应该不会都是1025。

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2007-11-1 14:30:14 | 显示全部楼层
原帖由 chinarabbit 于 1/11/2007 13:53 发表
1和2同时用1025访问A的80,路由器给A的返回端口应该不会都是1025。

看来很多xd没有理解我说话的意思,联系上下文看看。。。
我的意思是,在路由不改变端口转发到情况下。。。
回复

使用道具 举报

发表于 2007-11-1 15:13:32 | 显示全部楼层
原帖由 robur 于 2007-11-1 14:30 发表

看来很多xd没有理解我说话的意思,联系上下文看看。。。
我的意思是,在路由不改变端口转发到情况下。。。


如果路由不改变端口转发的话,又何来建立一个外部端口的说法呢?要是说都不改变端口转发,是否有高端口那就取决于客户机,和路由没什么关系了。真有不改端口的路由吗?
回复

使用道具 举报

发表于 2007-11-1 16:57:02 | 显示全部楼层
原帖由 robur 于 2007-11-1 14:30 发表

看来很多xd没有理解我说话的意思,联系上下文看看。。。
我的意思是,在路由不改变端口转发到情况下。。。

从理论上讲,NAT在转发数据包时,肯定会对将源端口改为自己表中的一个相应端口,即我认为,出现robur所说的极端情况时,NAT设备也能够正常处理。所以,对于fnto所谈到的,简单NAT开放高端口(比如20000以上的端口),来为每一个Socket对建立一个外部端口,这样简单NAT的转发就不会出错,并不存在因果关系的观点,我比较赞同。

另外,据我所知,目前ISP对于共享的检测,有几种常见的方法。
1.一部分可以通过SNMP协议检测ADSL,有人做过这样的实验,在打开SNMP的情况下,通过SNMP管理软件连接上去,可以成功发现有多台机器在共享上网。但这个方法存在局限性,有些ADSL不支持SNMP协议,或者用户手工关闭了SNMP。
2.检测一个网络的并发连接,超过了设定的阈值,就认为存在共享(我曾经在一台机器上遇过到这样的情况,后来打电话去骂了一通ISP后解决),但这种方法在robur所在的ISP处行不通,可能各地ISP的方法存在一定差异。
3.检测数据包的IPID,这是我个人认为可能性最大的一种途径。由于NAT在转发时,不会对IP报头的数据包进行任何修改,而不同机器发出的数据包,其IPID可能相差较大,ISP的设备上可能存在一个阈值,即在多少的情况下,则认为存在共享上网。
设想,如果我们在NAT转发时,能将IPID进行统一规则的设定,问题不就可以解决了吗?(由于不懂研发,故胡乱说一通)。

有些人还说道,可以根据SESSION来判断,但我不太明白这个如何判断,期待中。
回复

使用道具 举报

 楼主| 发表于 2007-11-1 20:52:58 | 显示全部楼层
现在的路由器使用的就是简单NAT,通过在外部开设不同的端口,来转发内网的数据,这是为了避免同一时间、同一目标IP、同一目标Port、同一源端口的数据报出现而造成错误。
所以在我前文中说的极端情况出现的时候,必然能避免。

但是我前文说的是,如果NAT不采用这种方法转发的话,会如何如何如何。。。望读者周知。
我只是在阐述一个能让NAT不改变外部源端口的转发技术,无他。准备就这个搞个项目。

另外IPID是一个极其严重但是却很弱智的问题,不知道路由厂商为何不考虑一下国情,做这个处理根本不需要几行代码。
回复

使用道具 举报

 楼主| 发表于 2007-11-1 20:55:21 | 显示全部楼层
另外说下,不管楼上若干xd对本技术的意见如何,有任何技术上的质疑
我都很感谢能分享你们的观点!

做技术就是要精益求精,就是要不怕别人挑毛病,你说得更好,我就按你的做,呵呵

这很能说明CSNA是一个适合讨论技术问题的地方,能专心探讨技术问题才是我们需要的。
在别的地方仍出不成熟的技术帖总是要引来一大堆的挖苦讥讽,实在无奈。

[ 本帖最后由 robur 于 2007-11-1 20:58 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2007-11-1 21:30:42 | 显示全部楼层
原帖由 chinarabbit 于 1/11/2007 15:13 发表


如果路由不改变端口转发的话,又何来建立一个外部端口的说法呢?要是说都不改变端口转发,是否有高端口那就取决于客户机,和路由没什么关系了。真有不改端口的路由吗?

请看#11的回复,谢谢
不改端口的路由,那个是传统的IP路由,不带NAT的,哈哈哈
回复

使用道具 举报

发表于 2007-11-2 14:09:26 | 显示全部楼层
原帖由 robur 于 2007-11-1 20:52 发表
另外IPID是一个极其严重但是却很弱智的问题,不知道路由厂商为何不考虑一下国情,做这个处理根本不需要几行代码。

可能问题不仅仅在于技术,还在于其它N多因素,很多时候,技术不能决定一切。
回复

使用道具 举报

发表于 2007-11-3 20:33:34 | 显示全部楼层
好贴,分析的很透彻。
回复

使用道具 举报

发表于 2007-11-4 11:07:32 | 显示全部楼层
楼主的意思可能有部分兄弟误解了,他只不过打了一个比方:如果用同一个外部端口处理内网内不同机子访问外网同一ip同一端口时会存在什么问题.
另外,除了使用ipid外,ISP还使用了如cookies、winsize、mss等进行识别,弱智点的ISP还会用并发连接数和ttl等进行判断。

[ 本帖最后由 fnto 于 2007-11-4 11:16 编辑 ]
回复

使用道具 举报

发表于 2007-11-4 11:14:31 | 显示全部楼层
不改端口的路由,那个是传统的IP路由,不带NAT的,哈哈哈

哪也是NAT,叫ip nat,但你的公网ip要足够多 ,记得在win server都可以实现,我们平常只有一个公网ip时用的是pnat(port nat),当然里面的ip也nat了。
回复

使用道具 举报

 楼主| 发表于 2007-11-4 19:56:40 | 显示全部楼层
原帖由 fnto 于 4/11/2007 11:14 发表

哪也是NAT,叫ip nat,但你的公网ip要足够多 ,记得在win server都可以实现,我们平常只有一个公网ip时用的是pnat(port nat),当然里面的ip也nat了。

正解,谢谢补充。
回复

使用道具 举报

发表于 2008-10-30 22:10:21 | 显示全部楼层
楼主分析的非常透彻
回复

使用道具 举报

发表于 2008-11-6 17:18:48 | 显示全部楼层
看懂一点点,继续学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表