为什么需要科学上网?
千言万语汇成一句话,那就国内中文互联网的信息密度实在是太低了。
以计算机领域来说,科学上网几乎是每一个想要进修的程序员的必备技能。科学上网的用途包括但不限于:
精确的在外网搜爬自己需要的资料,加速下载服务器位于国外的软件和项目
上油管等学习外网博主的经验教程,使用 Facebook,Twitter 等社交工具吃国际瓜
享受正版该有的体验,追剧,Netflix,Hulu,HBO,iPlayer 等,也包括亚马逊
享受国外免费高质量的教育和公共资源,尽量保持自己和国际节奏同步
偶尔也看看
常年用 Baidu + youku 和常年用 Google + youtube 的人,所接受到的信息,所获得的眼界,是完全不在一个量级上的。
在微信,QQ 这些微博这些平台你只能忍气吞气,
至于国内的中文互联网信息密度到底有多低,在这随便举个简单的例子:
百度上搜出来的结果前五个有三个是 CSDN 的内容,来让我们打开推荐的第一个看一下
除开这个,剩下的那些 CSDN 的内容也大都是灌水,复制粘贴,一搜几十个答案打开都是一模一样的。
某些平台和企业依靠着信息垄断一边享受着开源的红利,一边吸光开源的血,把人当耗材的后果就是环境的彻底崩塌
对翻墙的看法
还是那句话,有墙不一定是坏事,没墙不一定是好事。
这个世界上没有密不透风的墙,也没有永恒不倒的梯子,墙和梯子的关系是微妙的,梯子更像是一个准入门槛,而不是漏洞,很多时候不过是睁一只眼闭一只眼罢了。
主流协议介绍
本文会按照一定的时间发展顺序介绍主流的阔学上网协议。VPN 与代理服务器有着本质的区别,两者工作的层次并不在一个层次,因此我选择分开介绍。
VPN
首先应该明白的一点就是,VPN 技术本身并不是专门用于过墙访问外网的。该技术成熟已久,至今仍有着活跃的优化,仍有不少的大公司企业选择它作为加密通讯协议,在商业上有着广泛的应用,因此目前想彻底封杀几乎还是不可能的。对于那些非技术向的,不想折腾麻烦,仅仅是偶尔是有梯子需求的人来说,成熟的 VPN 软件确实有很不错的体验,毕竟掏钱就行。
至于缺点嘛,十分明显,不稳定,而且贵。每年高压期,开会的那段时间几乎必死,而且现在活着的 VPN 供应商基本消逝殆尽了,仅剩下的几个 VPN 大供应商,比如 BatVPN 等等,他们有这些方面专业技术,而是他们手里的 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 等其他 VPN 协议的问题。它与 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 年年末初出江湖,只是在爆出 V2RAY-VMESS 的漏洞新闻之后,Naiveproxy 才进入了更多人的眼球,并迅速蔓延。
其实作者的开发思路很清晰,因为我们使用科学上网协议的混淆、加密的时代已经过去了,很多例子已经证明,混淆本身就会成为一个被攻击或是被审查对象,自己弄的一些加密协议,终归还是敌不过专门研究加密的一些学者所做出的东西。
所以作者的思路是采用最常用的浏览器的网络堆栈,来躲避墙的审查。因为审查常用的浏览器的网络堆栈代价还是很高很高的,所以这样也就大大降低了我们的节点或是 VPS,被阻断或是和被墙的风险。
对于 Naiveproxy 的使用,我个人推荐使用 Naiveproxy + TLS + Caddy 来自行搭建,也可以使用 ProxuSU 进行搭建。
MTProto
比较少用到,是 telegram 专用的一款代理软件,有兴趣的朋友可以自行了解。
结语
一条好的线路比纠结协议和优化重要的多,好的协议和优化只是锦上添花,一条稳定的线路才是最核心的根本!
0 条评论