叠个 BUFF ,本文章不涉及和讨论任何政治内容!

本文不提供详细的搭建教程,仅对各协议进行分析!本人非专业人士,部分内容来自互联网,文章已不作更新,部分技术存在较大代差,仅供参考

前言

为什么需要科学上网?

千言万语汇成一句话,那就国内中文互联网的信息密度实在是太 TM 低了。

以我所在的计算机领域来说,科学上网几乎是每一个想要进修的程序员的必备技能。科学上网的用途包括但不限于:

  • 精确的在外网搜爬自己需要的资料,加速下载服务器位于国外的软件和项目
  • 上油管等学习外网博主的经验教程,使用Facebook,Twitter等社交工具吃国际瓜
  • 享受正版该有的体验,追剧,Netflix,Hulu,HBO,iPlayer 等,也包括亚马逊
  • 享受国外免费高质量的教育和公共资源,尽量保持自己和国际节奏同步
  • 偶尔也看看欸嘿

常年用Baidu + youku 和常年用Google + youtube 的人,所接受到的信息,所获得的眼界,是完全不在一个量级上的。

在微信,QQ这些微博这些平台你只能人生吞气,

至于国内的中文互联网信息密度到底有多低,我这随便举个简单的例子:

在百度和谷歌上同样搜索一个问题百度上搜出来的结果前五个有三个是CSDN的内容,我简直***了,来让我们打开推荐的第一个看一下

1613116590287

不难想象我当时的心情到底有多难受。除开这个,剩下的那些CSDN的内容也大都是灌水,复制粘贴,一搜几十个答案打开都是一模一样的。

国外办事收钱,国内收钱办事。某些平台和企业依靠着信息垄断一边享受着开源的红利,一边吸光开源的血,把人当耗材的后果就是环境的彻底崩塌

对科学上网的看法

还是那句话,有墙不一定是坏事,没墙不一定是好事。

烂的是国内的中文互联网,大家也不要把怨气全撒在墙上,墙只是一个工具,是一项政策,各位可以讨厌它,但还希望可以给它基本的尊重,我们翻出去,找到自己需要的东西,收好就可以了。

说句好听的,在大环境带墙的情况下,能出来的各位都是《特权阶级》,不要一边吃饭一边摔碗。

这个世界上没有密不透风的墙,也没有永恒不倒的梯子,墙和梯子的关系是微妙的,梯子更像是一个准入门槛,而不是漏洞,很多时候不过是睁一只眼闭一只眼罢了。

1613118056119

主流协议介绍

本文会按照一定的时间发展顺序介绍主流的阔学上网协议。VPN与代理服务器有着本质的区别,两者工作的层次并不在一个层次,因此我选择分开介绍。

VPN

首先应该明白的一点就是,VPN技术本身并不是专门用于过墙访问外网的。该技术成熟已久,至今仍有着活跃的优化,仍有不少的大公司企业选择它作为加密通讯协议,在商业上有着广泛的应用,因此目前想彻底封杀几乎还是不可能的。对于那些非技术向的,不想折腾麻烦,仅仅是偶尔是有梯子需求的人来说,成熟的VPN软件确实有很不错的体验,毕竟掏钱就行。

至于缺点嘛,十分明显,不稳定,而且贵。每年高压期,开会的那段时间几乎必死,而且现在活着的VPN供应商基本消逝殆尽了,仅剩下的几个VPN大供应商,比如 ExpressVPN 等等,他们现在还能用不是因为技术高,而是他们手里的IP多到可以和墙正面硬刚。(非广告)

能看到我这篇文章的朋友,应该大部分都不是VPN的目标客户。在你们眼里,VPN可能已经是一项不推荐也不会使用的梯子技术,但是根据我的调查,VPN的用户数量仍占据着相当大的比例,他们是互联网中「沉默的大多数」,对梯子的要求也就是几天一个星期出去查查资料,或者试图去寻找某些学习资料。VPN的易用性使得这仍旧是大部分对网络接触不深,没有搭建技术的人群过墙的首选。

那VPN就真的一无是处吗?还真不是。大家看看下面这张图。TCP/IP五层协议和OSI的七层协议对应关系如下:

img

在每一层实现的协议也各不同,即每一层的服务也不同.下图列出了每层主要的协议。

img

VPN相对于Socks5代理的方式在原理上还是有一定优势的,VPN的工作模式无限接近于底层,能实现真正意义上的全局代理,其中一些socks5不转发的流量也是全部转发,包括ARP,DHCP,ICMP等。这意味着相当于是在你的电脑上虚拟了一张网卡,在第三方眼中,你的IP就是VPN的IP,现在大多数的游戏加速器因此也都是通过VPN的技术来实现的。

IPsec

IPsec协议可以说是历史悠久,可以说自1990年代末以来,大多数主流(和其他)操作系统中都包括IPsec支持,其中包括台式机和服务器操作系统以及路由器和其他网络安全设备。

IPSec有两种工作模式:

隧道(tunnel)模式:用户的整个IP数据包被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中。通常,隧道模式应用在两个安全网关之间的通讯。

传输(transport)模式:只是传输层数据被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被放置在原IP包头后面。通常,传输模式应用在两台主机之间的通讯,或一台主机和一个安全网关之间的通讯。

IPSEC

由于IPsec协议实在是过于古老,此处全当做个引子,如果大家不是网络行业工作者,其实没有必要了解太深。

OpenVPN

大名鼎鼎的OpenVPN,此项目最初于2001年发布,由James Yonan编写。与其他基于IPSec的隧道协议不同,OpenVPN依靠SSL / TLS进行身份验证和加密,创建安全的点对点连接。SSL加密还是很信得过的,目前被广泛用于保护金融交易,数据传输,电子邮件等。

OpenVPN与当今使用的大多数操作系统兼容。支持TCPUDP并支持高达256位的加密,最重要他是开源的!!这确实使得它有很好的拓展性,但是也由于开源的特性,容易被墙抓住特性。

现在大多数的游戏加速器和一些VPN供应商都是采用OpenVPN的协议搭建的,然而我认为用OpenVPN来过墙就实在是屈才了,我认为他更大的用处是在于底层转发流量和数据强加密的特性。

相对与过墙,我还是在各种各样的灰色产业里面见到OpenVPN更多,比如免流,IPV6绕WIFI验证,过校园网认证等等。

WireGuard

WireGuard 是由 Jason Donenfeld 等人用 C 语言编写的一个开源VPN协议,被视为下一代VPN协议,旨在解决许多困扰 IPSec/IKEv2OpenVPN 或 L2TP 等其他 威屁恩 协议的问题。它与 TincMeshBird 等现代 VPN 有一定相似之处,即加密技术先进、配置简单。从 2020 年 1 月开始,它已经并入了 Linux 内核的 5.6 版本,这意味着大多数 Linux 发行版的用户将拥有一个开箱即用的 WireGuard。

WireGuard作为最新开发的VPN协议,比目前主流的VPN技术有明显优势,被称为下一代VPN。WireGuard有如下特点:

优点:

  • 配置精简,可直接使用默认值
  • 只需最少的密钥管理工作,每个主机只需要 1 个公钥和 1 个私钥。
  • 就像普通的以太网接口一样,以 Linux 内核模块的形式运行,资源占用小。
  • 能够将部分流量或所有流量通过 威屁恩 传送到局域网内的任意主机。
  • 能够在网络故障恢复之后自动重连,戳到了其他 威屁恩 的痛处。
  • 比目前主流的 VPN 协议,连接速度要更快,延迟低。
  • 使用了更先进的加密技术,具有前向加密和抗降级攻击的能力。
  • 支持任何类型的二层网络通信,例如 ARPDHCPICMP,而不仅仅是 TCP/HTTP
  • 可以运行在主机中为容器之间提供通信,也可以运行在容器中为主机之间提供通信。

不足:

  • 处于研发初期,各种功能及支持有待完善。
  • 由于使用UDP协议,BBR、锐速等TCP网络加速工具,对WireGuard无效。
  • 部分运营商可能会对UDP协议进行QOS限速,WireGuard会受到一定影响。
  • 客户端分流功能较弱,对GFWList的支持不足。

说了这么一大堆,其实WireGuard 就是采用UDP转发流量的 VPN 工具。他最大的优点也就是最大的缺点,采用UDP转发流量确实是能够有效的干扰墙的封锁,但是其稳定性实在是不敢恭维。他能用不代表你应该去用,WireGuard 能活到现在很大原因是用的人实在是太少了。。

我不是想表达WireGuard 不好,而是他的作用不应该是用来过墙。

相比起OpenVPN这种动辄十万行代码的大项目,WireGuard 这种只有4000多行代码的代码库,简直就像是一个艺术品。

socks5

想要长期稳定高效的科学上网,socks5类型的代理基本是必须要掌握的。

socks5类型的代理服务器在网络层级上是工作于应用层的会话层,很多流量都无法代理,因从即便是开了所谓的全局,也不能给游戏加速,毕竟游戏的网络传输一般都是跑在传输层的。像Ping和Trace这些ICMP命令自然也是无法通过代理的。(当然也有方法可以用软件强制接管虚拟网卡达到真全局的目的,比如SSTAPtun2socks等等)

Shadowsocks

shadowsocks 可以说是继VPN被墙能准确识别并封锁后,后面的一切代理服务器中转的方式的祖师爷。

shadowsocks开发之初就是为了过墙,实现原理简单粗暴,直捣黄龙,写程序的角度看就是直接奔着解决问题去的。

有不少人都说shadowsocks已经能被墙准确识别,毕竟就连ss的作者也都被请去喝茶了,而作为第一代的代理程序,很多漏洞没有得到较好的修复,导致墙已经能准确的识别出ss的流量特征。

但是目前就我所知道的来说,除开一开始有一定非AEAD加密数据被准确识别的BUG外(已修复),我并没有确切的得到ss已被确切封锁的实质性证据,大多数人跟着锤shadowsocks都是因为自己的服务器太过猖狂然后被封了,实际上墙的封锁机制极其复杂,检测机制包括但不限于IP段,判断流量头,端口,数据量大小,还有人工干预等等,这口锅并不能完全推到ss上。

shadowsocks引出了一个把代理服务器拆分成本地和远程两个的概念,实现了经过墙的流量全部加密,完美的规避了之前VPN仍保留一部分明文通讯的特征缺点。

1613197495682

1613196983045

和VPN最大的不同就是,VPN是先发送一个建立加密通道的明文数据包,套路固定,特征明显,而shadowsocks则是在本地先加密完成后,再发送至代理服务区,过墙期间数据完全加密,特征不明显。

另外,shadowsocks拥有着目前socks5代理类型里的最快的通讯延迟(RTT),因为数据包握手的时间最短。

就目前来说,shadowsocks还是目前体验最好,最简单快速,最极度体现暴力美学的中转代理方式。

ShadowsocksR

SSR是shadowsocks的优化版,但是作者不是同一个。

在ss作者被喝茶之后,github上出现了一个叫breakwa11(破娃)的帐号,声称ss容易被防火墙检测到,所以在混淆和协议方面做了改进,更加不容易被检测到,而且兼容ss,改进后的项目叫shadowsocks-R,简称ssr,然后ss用户和ssr用户自然分成了两个派别,互相撕逼,直到有一段时间,破娃被人肉出来,(一说是破娃的朋友被人肉出来——退而结网注)无奈之下删除了ssr的代码,并且解散了所有相关群组。

我个人认为没有必要纠结是用ss还是ssr。如果你是机场用户,ss无疑是最优选,毕竟体验最好,封了也跟你没关系。

VMess

Vmess 是基于V2Ray内核自研的协议。

先来介绍一下V2Ray这个极具弹性平台吧。和之前的VPN和Shadowsock类型不同的一点就是,V2Ray是一个内核,他不是单独运行的,这是一个框架,对开发者来说更加自由。

自2020年6月以来,V2Ray平台就爆出了一些很不安全的BUG,建议大家尽快更换到Xray内核,或者更换协议!

V2Ray就像叠积木,一笔一划的慢慢逐步把梯子叠出来,对于技术力十分入门的小白来说可能不是太友好,而且V2Ray平台上的套娃严重,V2Ray可以下面这样用:

  • vmess
  • vmess + tls
  • vmess + websocket + tls
  • vmess + websocket + tls + Nginx
  • vmess + websocket + tls + Nginx + cloudfare(CDN)

从上至下,一层层套娃,套的越多越安全,当然速度也就越慢。如果真的从头搭建起来,那就真是令人头都大了,还好有大神开发一键脚本,有兴趣的朋友自行搜索。

VLess

可以理解为 VLessVMess轻量版,VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 V2Ray 客户端和服务器之间的桥梁。

VMess 不同,VLESS 不依赖于系统时间,认证方式同样为 UUID,但不需要 alterId

同样的,和 VMess 一样,即支持 V2Ray,也支持最新的XRay。一样可以套娃

  • vless
  • vless + tls
  • vless + websocket + tls
  • vless + websocket + tls + web
  • vless + websocket + tls + web + cloudfare(CDN)

Trojan

根据官网给出的解释,Trojan的设计理念与传统协议的设计理念相反,Trojan不使用强加密和随机模糊,而是直接模仿互联网最常见的协议HTTPS,以此来达到设计的目的。 V2Ray / Trojan 传输方式哪个好?

当然,这显然是瞎扯淡。HTTPS协议本身就含有加密,而且TLS 1.3更是强加密,现今无法通过简单方式破解。Trojan本身使用了HTTPS的特性,自带了加密属性,只不过这种加密大家都在用而已,因此官网描述是不准确的。

不难发现,若V2Ray使用了WS + TLS方式,其协议与Trojan本身差异并不大。两者建立连接的过程有区别,但是从流量本身,或者说第三者看流量是难以发现区别的。也就是说,对于第三者的监听,这两类协议与普通流量表现均一致,这是两者的共性。

因此,仅从真正使用的流量的传输速度看,Trojan在原理上是一定快于V2Ray的,倒不是Trojan有什么黑科技,而是TrojanV2Ray更简单,我们可以认为Trojan就是一个只有WS+TLS协议的V2Ray的简化版本(不能简单等同)。这也许就是Trojan的设计理念吧,我认为把Trojan介绍成:以简单的方法利用互联网最常见、最安全的形式完成连接的一种协议,这样的介绍或许会更好。

Trojan-go

Trojan-go 可以看作是Trojan的加强版,最重要是支持了websocket多路复用!同时目前也是笔主本人主要使用的科学上网方式,不仅很稳定,而且体验很好。

支持了websocketTrojan-go,可以说基本上就是不会死的存在,毕竟支持了websocket后,就可以套用CDN了,隐藏了真实的IP(梦回V2Ray终极套娃版),而且支持了多路复用,显著提升了网页的打开速度。

Trojan 最大的缺点其实也是优点之一,就是用443端口进行输出,这点不管是Trojan 还是 Trojan-go 都是一样的。

443端口本来是没有什么问题的,但是很多朋友的服务器不仅仅是用来搭建梯子的,可能还会装个宝塔面板,搭个小网站,或者干些别的事,但是如果用的是Trojan服务,把443端口占了,那别的服务就没有办法运行。

这里贴上一位大佬的解决思路:如何实现Trojan 共用 443 端口方案

如果能成功将Trojan和自己的网站或者其他服务绑起来,使Trojan服务器 有一定的日活IP,那么这将是伪装科学上网的终极形态!

NaiveProxy

Naiveproxy从2019年年末初出江湖,到现在也差不多经过10个月的发展了,只是在爆出V2RAY-VMESS的漏洞新闻之后,Naiveproxy才进入了更多人的眼球,并迅速蔓延。

其实作者的开发思路很清晰,因为我们使用科学上网协议的混淆、加密的时代已经过去了,很多例子已经证明,混淆本身就会成为一个被攻击或是被审查对象,自己弄的一些加密协议,终归还是敌不过专门研究加密的一些学者所做出的东西。

所以作者的思路是采用最常用的浏览器的网络堆栈,来躲避墙的审查。因为审查常用的浏览器的网络堆栈代价还是很高很高的,所以这样也就大大降低了我们的节点或是VPS,被阻断或是和被墙的风险。

对于Naiveproxy的使用,我个人推荐使用 Naiveproxy + TLS + Caddy 来自行搭建,也可以使用 ProxuSU 进行搭建。

1613212001609

MTProto

比较少用到,是telegram专用的一款代理软件,有兴趣的朋友可以自行了解。

多消息作为单个加密

结语

一条好的线路比纠结协议和优化重要的多,好的协议和优化只是锦上添花,一条稳定的线路才是最核心的根本!