全部博文(230)
分类: 网络与安全
2013-02-20 13:08:47
春节后,有不少朋友问我,春节回家后发现 ISP 对上网共享进行了限制,问有没有什么好的办法解决?
这个话题说起来很大,这永远是一对对立的矛与盾的关系。
要想知道如何突破封锁,对于喜欢鱼的人来说讲起来很简单,但鱼未必好吃、未必适合自己的胃口;对于喜欢渔的人来说,倒不妨多谈一些技术细节。
这里只谈一些我自己的观点,未必正确和全面,也希望大家能够给予指点。
在 IP 报文头中,有一个字段是 TTL,它的特点是每跨一跳路由就自动减 1,减到 0 就被丢弃,目的是避免由于链路回环造成的数据无限回绕。
另外一点,不同的操作系统的默认 TTL 值是不同的。
例如:
Windows 是 128;
Linux 早期(RH73)是 255,现在是 64;
早期 Cisco 交换机一般都是 255(现在不知道,没机会接触了);
早期 FreeBSD 是 64(现在不知道,没机会接触了);
早期 Solaris 是 255(现在不知道,没机会接触了);
OK,知道了这些特性,那么如果 ISP 在接入层设置一个 TTL 监测器,同一条链路(或账号)过来的数据包的 TTL 出现了不同的差异,则基本可以断定共享了。
在 IP 报文头中还有一个字段是 ID,它的特点是 IP 协议栈每发出一个数据,ID 号会递增(2bytes 值,因此到 65535 后会回滚)。
可以想象一下,如果内部有共享,那么 ISP 看到的 ID 一定不是连续的,而是随机离散。
原理很简单,就是判断连接数是否很多。
这不足以断定是否是共享,但至少可以向分析 SPAM 邮件那样给个分值,最后根据得分判断是否有问题。
有的 ISP 在初装的时候,安装人员要登记上网电脑的 MAC 地址(MAC 地址全球唯一,前 3bytes 代表厂商编码,后 3bytes 代表厂商内部编号)。
如果家里有个小路由,小路由的 MAC 一定和当初登记的不同,ISP 可以以此来判断。
每个机器的 TCP 协议栈都有各自的特点,比如 initwnd,比如 MSS,比如 timestamp 等。
虽然经过小路由,做了 NAT(网络地址转换),IP 头会被改写,但 TCP 头属于 NAT 环节的 payload,不会被涉及,仍保留了各系统协议栈的特性。
这些如果再细说就比较难了,建议去看《TCP/IP 详解》卷一。
有些常用的应用层实际上在传输数据的时候是携带内网地址信息的,ISP 可以通过深度挖掘,来分析是否有共享的情况。
目前我知道的大概有这么多,这其中有几个,ISP 应该还没真正利用起来,当然也有我描述不全的。
知道了限制的方法,就有逐一破解之道。
破解思路:让 ISP 看不到 TTL 的变化。
实现方法:用 Linux 做网关,然后利用 iptables 强行修改每一个出去的 IP 报文头部的 TTL 值,使其对外看起来是统一的,或者搭建 socks5 代理。
所需技能:iptables 的使用、了解 IP 首部、会使用 tcpdump 或 wireshark 抓包验证、搭建及使用 socks5 服务器。
破解思路:让 ISP 看不到 ID 随机变化。
实现方法:使用 CU 上 ssffzz1 版主曾经写过的 ipid 模块,或直接使用 iptables 提供的 u32 模块(后者比较 Geek),或者搭建 socks5 代理。
所需技能:iptables 的使用、了解 IP 首部、会使用 tcpdump 或 wireshark 抓包验证、了解如何编译内核、了解如何给 iptables 打补丁、搭建及使用 socks5 服务器。
破解思路:让 ISP 看不到有那么多连接数。
实现方法:这个判断基本已经被废弃了,因为不准。另外这个也确实不好突破,但通过 VPN 的方式是可以的,前提是外网要有。因此这里不提供破解之法。
所需技能:无(没必要,也不好做处理)。
破解思路:让 ISP 接入层看到的 MAC 地址与之前的一致。
实现方法:利用小路由的 MAC 地址克隆的功能。若是其他系统做网关,则修改自身 MAC 地址即可。改成和之前登记的一致。
所需技能:小路由及其他操作系统的 MAC 地址修改。
破解思路:让 ISP 看不到 TCP 协议栈的差异。
实现方法:利用代理的方式实现上网共享,所有请求都统一由代理服务器完成,ISP 看到的只有代理服务器。
所需技能:搭建及使用 socks5 服务器。(http 也可以,例如 squid、nginx)
破解思路:让 ISP 看不到报文内部细节。
实现方法:别无他法,走 VPN 吧。
所需技能:在 GW 上设置 VPN Client 连接外部 VPN Server(需要有资源才行)。
由于个人能力有限,可能分析得不一定正确,也不一定全面,请大家给予指点。
顺祝各位玩得开心!@白金-PT
《TCP/IP 详解》卷一、RFC 793、RFC 1323
http://blog.chinaunix.net/uid-12798245-id-114886.html
http://blog.s135.com/book/squid/
http://blog.chinaunix.net/uid-461391-id-2399924.html
http://blog.chinaunix.net/uid-12798245-id-114821.html