最近发现网上有很多人在抱怨ISP采用NAT检测技术判断用户使用使用多台计算机共享上网,并加以限制。ISP使用的典型软件如网络尖兵等。当然,这件事情的商业上面的是是非非我也不想讨论(至少我还是用的教育网)。作为技术问题讨论一下。

首先,很多人提出的破解方案很搞笑:认为ISP是通过判断MAC地址检测的,于是要将自己家的多台机器的MAC地址设为同样的。这种做法根本就没弄明白数据链路层和网络层关系,而且肯定导致自己家的局域网不好使。

还有一些人的判断应该有些道理,ISP可能通过SNMP协议读取ADSL猫的信息,于是想屏蔽161端口。可是很多ADSL猫都是ISP附送的,根本没有配置能力。其实,上面那种方式能一定程度好使,也是因为给ADSL猫一个错误的输入而已。

另外一种方案是,在ADSL猫后面接入一个网关,使得它认为后面是一台机器。如果是应用层网关,这个方式应该是好使的;如果是网络层的,如NAT或者Router,结合下面提到的检测方式,可能还有问题。

查了一些资料分析可知,检测NAT的方法有如下几种:

  • 1、判断设备的SNMP信息。破解方法是禁止设备的161端口。这个比较简单
  • 2、IP包经过一个网络设备后,TTL会减1,而典型OS的初始TTL都是固定的,NAT的直接连接设备可以判断之。破解方法就是修改OS的TTL初始值。这点说起来容易,作起来也不简单。
  • 3、检测OS的IP指纹栈,判断设备后面有几种操作系统,从而判断出是否是共享上网。这种方法实现不容易,但其破解对策也很困难。
  • 4、很多OS中,IP包的ID产生方式只是一个简单的计数器(这也是黑客的一个关注点)。通过分析统计IP包的ID,可以判断操作系统和机器。这种方法有一定局限性,破解也更加困难。

总而言之,NAT是IP地址不足的一个反面解决方案,检测NAT是其反面,破解NAT的检测又翻过来。技术的发展也很有意思。

其实,NAT本身是为了解决IPv4地址不足问题的。如果升级的IPv6,每台机器都有外部IP,NAT技术也没市场了,作为ISP应该欢迎这件事情,因为判断用户是否使用多台机器变的非常简单,只需统计IP地址就可以了(偷偷地说,不要告诉ISP)。当然,我想,那时也会研究出新的对策。