上个月国庆假期的某一天(记得没错的话是十月六号),GFW 开始发飙,封杀一众代理,留下一片狼藉。 当然我也没能幸免,成为此次事件的受难者之一,而即便切换到备用服务器,没等几天又遭遇同样的封杀。
万般无奈地度过了几天“没网”的日子; 与此同时,我也在思考如何能突破 GFW 的封锁。
通过观察分析加上大胆地猜测,可以确定这次 GFW 的封锁是通过大流量的识别, 即便是经过 HTTPS 协议进行了伪装的流量,只要是流量在一定时间内超过一定阈值,都会被其认定为非法流量,进而封锁端口。 虽然 HTTPS 伪装已经被识别,但是服务器仍然可以 ping 通,且能使用 ssh 登录,那么能否利用 SSH 伪装呢?
于是在国内的中转服务器上建立了 ssh 连接,且同时通过 -D 参数在服务器本地开启 socks 代理, 然后将流量全部导入到这个 socks 代理,由此实现 SSH 伪装过墙。
经过一段时间的观察,效果非常稳定。 于是果断使用 autossh 来 wrap 普通的 ssh 命令,以使其保持长久的连接:
$ autossh -M 0 -D <PORT> -fNT <HOST>
吾以为,之所以使用这么一个“老招”也能对付 GFW, 一是因为 GFW 目前越来越“人性化” —— 只封端口不封 IP; 二是因为 HTTPS 伪装的使用已经烂大街,导致成为 GFW 重点关注对象; 三是因为 SSH 对服务器的重要程度和必要性来说显然要高过 HTTPS,封锁 SSH 与直接封锁 IP 无异,显然 GFW 不愿意这么做,正如第一点所说的,GFW 可是越来越“人性化”了呢; 最后,但也可能是最重要的一点,是我在切换成 SSH 伪装后,也变得比较收敛,不再敢大把大把地霍霍流量了。
Thanks for reading :)