科学上网的主流协议大对比!这里面有你在使用的吗?
叠个 BUFF ,本文章不涉及和讨论任何政治内容!
本文不提供详细的搭建教程,仅对各协议进行分析!本人非专业人士,部分内容来自互联网,文章已不作更新,部分技术存在较大代差,仅供参考
前言
为什么需要科学上网?
千言万语汇成一句话,那就国内中文互联网的信息密度实在是太 TM 低了。
以我所在的计算机领域来说,科学上网几乎是每一个想要进修的程序员的必备技能。科学上网的用途包括但不限于:
- 精确的在外网搜爬自己需要的资料,加速下载服务器位于国外的软件和项目
- 上油管等学习外网博主的经验教程,使用Facebook,Twitter等社交工具吃国际瓜
- 享受正版该有的体验,追剧,Netflix,Hulu,HBO,iPlayer 等,也包括亚马逊
- 享受国外免费高质量的教育和公共资源,尽量保持自己和国际节奏同步
偶尔也看看欸嘿
常年用Baidu + youku 和常年用Google + youtube 的人,所接受到的信息,所获得的眼界,是完全不在一个量级上的。
在微信,QQ这些微博这些平台你只能人生吞气,
至于国内的中文互联网信息密度到底有多低,我这随便举个简单的例子:
百度上搜出来的结果前五个有三个是CSDN的内容,我简直***了,来让我们打开推荐的第一个看一下
不难想象我当时的心情到底有多难受。除开这个,剩下的那些CSDN的内容也大都是灌水,复制粘贴,一搜几十个答案打开都是一模一样的。
国外办事收钱,国内收钱办事。某些平台和企业依靠着信息垄断一边享受着开源的红利,一边吸光开源的血,把人当耗材的后果就是环境的彻底崩塌
对科学上网的看法
还是那句话,有墙不一定是坏事,没墙不一定是好事。
烂的是国内的中文互联网,大家也不要把怨气全撒在墙上,墙只是一个工具,是一项政策,各位可以讨厌它,但还希望可以给它基本的尊重,我们翻出去,找到自己需要的东西,收好就可以了。
说句好听的,在大环境带墙的情况下,能出来的各位都是《特权阶级》,不要一边吃饭一边摔碗。
这个世界上没有密不透风的墙,也没有永恒不倒的梯子,墙和梯子的关系是微妙的,梯子更像是一个准入门槛,而不是漏洞,很多时候不过是睁一只眼闭一只眼罢了。
主流协议介绍
本文会按照一定的时间发展顺序介绍主流的阔学上网协议。VPN与代理服务器有着本质的区别,两者工作的层次并不在一个层次,因此我选择分开介绍。
VPN
首先应该明白的一点就是,VPN技术本身并不是专门用于过墙访问外网的。该技术成熟已久,至今仍有着活跃的优化,仍有不少的大公司企业选择它作为加密通讯协议,在商业上有着广泛的应用,因此目前想彻底封杀几乎还是不可能的。对于那些非技术向的,不想折腾麻烦,仅仅是偶尔是有梯子需求的人来说,成熟的VPN软件确实有很不错的体验,毕竟掏钱就行。
至于缺点嘛,十分明显,不稳定,而且贵。每年高压期,开会的那段时间几乎必死,而且现在活着的VPN供应商基本消逝殆尽了,仅剩下的几个VPN大供应商,比如 ExpressVPN 等等,他们现在还能用不是因为技术高,而是他们手里的IP多到可以和墙正面硬刚。(非广告)
能看到我这篇文章的朋友,应该大部分都不是VPN的目标客户。在你们眼里,VPN可能已经是一项不推荐也不会使用的梯子技术,但是根据我的调查,VPN的用户数量仍占据着相当大的比例,他们是互联网中「沉默的大多数」,对梯子的要求也就是几天一个星期出去查查资料,或者试图去寻找某些学习资料。VPN的易用性使得这仍旧是大部分对网络接触不深,没有搭建技术的人群过墙的首选。
那VPN就真的一无是处吗?还真不是。大家看看下面这张图。TCP/IP五层协议和OSI的七层协议对应关系如下:
在每一层实现的协议也各不同,即每一层的服务也不同.下图列出了每层主要的协议。
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协议实在是过于古老,此处全当做个引子,如果大家不是网络行业工作者,其实没有必要了解太深。
OpenVPN
大名鼎鼎的OpenVPN
,此项目最初于2001年发布,由James Yonan编写。与其他基于IPSec
的隧道协议不同,OpenVPN
依靠SSL / TLS
进行身份验证和加密,创建安全的点对点连接。SSL加密还是很信得过的,目前被广泛用于保护金融交易,数据传输,电子邮件等。
OpenVPN
与当今使用的大多数操作系统兼容。支持TCP
或UDP
并支持高达256位的加密,最重要他是开源的!!这确实使得它有很好的拓展性,但是也由于开源的特性,容易被墙抓住特性。
现在大多数的游戏加速器和一些VPN供应商都是采用OpenVPN
的协议搭建的,然而我认为用OpenVPN
来过墙就实在是屈才了,我认为他更大的用处是在于底层转发流量和数据强加密的特性。
相对与过墙,我还是在各种各样的灰色产业里面见到OpenVPN更多,比如免流,IPV6绕WIFI验证,过校园网认证等等。
WireGuard
WireGuard
是由 Jason Donenfeld
等人用 C
语言编写的一个开源VPN协议,被视为下一代VPN协议,旨在解决许多困扰 IPSec/IKEv2
、OpenVPN 或
L2TP 等其他 威屁恩 协议的问题。它与 Tinc
和 MeshBird
等现代 VPN 有一定相似之处,即加密技术先进、配置简单。从 2020 年 1 月开始,它已经并入了 Linux 内核的 5.6
版本,这意味着大多数 Linux 发行版的用户将拥有一个开箱即用的 WireGuard。
WireGuard
作为最新开发的VPN协议,比目前主流的VPN技术有明显优势,被称为下一代VPN。WireGuard
有如下特点:
优点:
- 配置精简,可直接使用默认值
- 只需最少的密钥管理工作,每个主机只需要 1 个公钥和 1 个私钥。
- 就像普通的以太网接口一样,以 Linux 内核模块的形式运行,资源占用小。
- 能够将部分流量或所有流量通过 威屁恩 传送到局域网内的任意主机。
- 能够在网络故障恢复之后自动重连,戳到了其他 威屁恩 的痛处。
- 比目前主流的 VPN 协议,连接速度要更快,延迟低。
- 使用了更先进的加密技术,具有前向加密和抗降级攻击的能力。
- 支持任何类型的二层网络通信,例如
ARP
、DHCP
和ICMP
,而不仅仅是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命令自然也是无法通过代理的。(当然也有方法可以用软件强制接管虚拟网卡达到真全局的目的,比如SSTAP
,tun2socks
等等)
Shadowsocks
shadowsocks
可以说是继VPN被墙能准确识别并封锁后,后面的一切代理服务器中转的方式的祖师爷。
shadowsocks
开发之初就是为了过墙,实现原理简单粗暴,直捣黄龙,写程序的角度看就是直接奔着解决问题去的。
有不少人都说shadowsocks
已经能被墙准确识别,毕竟就连ss
的作者也都被请去喝茶了,而作为第一代的代理程序,很多漏洞没有得到较好的修复,导致墙已经能准确的识别出ss
的流量特征。
但是目前就我所知道的来说,除开一开始有一定非AEAD加密数据被准确识别的BUG外(已修复),我并没有确切的得到ss
已被确切封锁的实质性证据,大多数人跟着锤shadowsocks
都是因为自己的服务器太过猖狂然后被封了,实际上墙的封锁机制极其复杂,检测机制包括但不限于IP段,判断流量头,端口,数据量大小,还有人工干预等等,这口锅并不能完全推到ss
上。
shadowsocks
引出了一个把代理服务器拆分成本地和远程两个的概念,实现了经过墙的流量全部加密,完美的规避了之前VPN仍保留一部分明文通讯的特征缺点。
和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
可以理解为 VLess
是VMess
轻量版,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
,以此来达到设计的目的。
当然,这显然是瞎扯淡。HTTPS
协议本身就含有加密,而且TLS 1.3
更是强加密,现今无法通过简单方式破解。Trojan
本身使用了HTTPS
的特性,自带了加密属性,只不过这种加密大家都在用而已,因此官网描述是不准确的。
不难发现,若V2Ray
使用了WS + TLS
方式,其协议与Trojan
本身差异并不大。两者建立连接的过程有区别,但是从流量本身,或者说第三者看流量是难以发现区别的。也就是说,对于第三者的监听,这两类协议与普通流量表现均一致,这是两者的共性。
因此,仅从真正使用的流量的传输速度看,Trojan
在原理上是一定快于V2Ray
的,倒不是Trojan
有什么黑科技,而是Trojan
比V2Ray
更简单,我们可以认为Trojan
就是一个只有WS+TLS
协议的V2Ray
的简化版本(不能简单等同)。这也许就是Trojan
的设计理念吧,我认为把Trojan
介绍成:以简单的方法利用互联网最常见、最安全的形式完成连接的一种协议,这样的介绍或许会更好。
Trojan-go
Trojan-go
可以看作是Trojan
的加强版,最重要是支持了websocket
和多路复用
!同时目前也是笔主本人主要使用的科学上网方式,不仅很稳定,而且体验很好。
支持了websocket
的Trojan-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 进行搭建。
MTProto
比较少用到,是telegram专用的一款代理软件,有兴趣的朋友可以自行了解。
结语
一条好的线路比纠结协议和优化重要的多,好的协议和优化只是锦上添花,一条稳定的线路才是最核心的根本!