视频链接
没有GFW时访问国外网站的步骤
DNS域名解析
首先先查询本地DNS缓存,然后是本地DNS配置文件,也就是hosts文件。
查询不到会向设置的DNS服务器发送访问包。
封装和解封装
封装
应用层产生一个有特殊目的的数据包
传输层有TCP和UDP协议,同时,会给数据包封装上源端口号和目的端口号。
网络层封装上源IP地址,目的IP地址。
数据链路层封装上源MAC地址,目的MAC地址
物理层通过网卡将数据包传输到其它设备。
解封装
多少层的设备就能够解封装到第几层,比如交换机,是一个两层设备,那么就可以读到mac地址头,路由是一个三层设备,(加了NAT功能的路由器有读到端口的功能,因为要建立NAT映射表),就可以读到IP地址层。
GFW如何阻断我们和谷歌的连接
要想如何突破GFW的封锁,首先就是要知道GFW的工作原理,实际上,就是要学会如何做一个GFW。这个和世间所有的道理是相似的,你想行正义之事,那么首先的就是知道如何去做坏事;你想找到一个女朋友,那么首先就该想到的是,如何可以永远找不到一个女朋友。想知道怎么成功,首先就是要去知道怎么失败。这就是我认为的逆向思维。
DNS污染
不让你查到正确的域名IP。
DNS污染的话,就使用修改host的方式避免进行DNS查询请求
TCP重置攻击
GFW冒充目标服务器,向我们发送一个拒绝连接的回应。这是因为http的话数据包是可以直接看到内容,可以看到你在寻求与目标服务器做一个连接,而这个目标服务器就在GFW的黑名单之上,所以就会进行一个冒充操作。而你根本不知道这是防火墙伪造给你的一个数据包。
而SS的存在就是对数据包进行一个加密,来混淆进出GFW的流量,和在国外的一个VPS进行连接但如今GFW已经可以进行一个主动探测(重放攻击,用我的数据包再发送一次,叫做探测包,AEAD加密可以拦截这个攻击,因为可以认证了对方的身份,也就是有防重放攻击。),也就是可以知道linux到底有没有在运行ss服务。
购买VPS服务器
就像在淘宝上购物一样。比较大型的VPS商家有
Google cloud,amazon web services,Microsoft Azure ,甲骨文,
阿里云,腾讯云,刚开始学习不用使用那么贵的,使用vultr,线路比较烂,不适合用来当作主力,但是无限的IP提供。
使用plugin
由于运行的服务能被探测,可以使用plugin功能对数据流量进行伪装,伪装成http,websocket流量,寄希望于防火墙认为这个数据包是http时数据包时,不会往服务器发送探测包。
SSR节点就是类似加了插件的ss节点。
SSR有混淆参数和协议参数(用于用户认证),已经逐渐被淘汰了。
使用shadowshock才有插件的功能,然后在v2ray上面开一个socks代理
搭建ss是很简单的捏,如果是全部加密的无规则字节流,经过GFW时会被怀疑,就会被GFW发送探测包,但是如果你加入一个http头,让GFW能看懂,但是不知道你发这个是上什么网页(?是这样吗,我先这样理解),搭建裸奔的ss节点是不再推荐了,下节课讲用插件伪装成https。
TLS让ss流量变成https流量
trojan天生就是用来将数据伪装成https流量来达到科学上网的目的。
TLS原理
必须先有证书。非对称加密算法
服务器向CA机构申请认证域名和对应的公钥(私钥自己留着),然后我这边要使用https时,首先要先和服务器建立一个tls连接,服务器同意tls连接和发送证书给我。
然后双方根据公钥和私钥协商出一个对称加密的密钥对http数据内容进行加密。
sni:网址
Trojan原理
模仿https的流量。
为什么trojan服务器要进行不属于trojan流量的跳转返回呢?因为防止防火墙的主动探测(发一个https的连接请求,但是trojan服务器能够识别不是来自该来的地方,所以会将一个无害的网址返回给服务器以欺骗服务器),将一个无害的网站数据返回。
部署
首先买一个VPS服务是不用说都要的了.
然后是在服务器上安装trojan-go服务:
linux编译,然后添加config文件,然后申请证书
使用ACME工具申请证书
软链接的意思跟windows下快捷方式差不多
注册好,然后开放80端口,独立模式下acme会在80端口创建一个本地服务器。这个web服务器是由acme脚本自动完成的。
在服务器上可以看到有token的出现,CA过来访问完之后,就会把服务器关掉。
CA机构太忙了,使用命令切换其它的CA颁发机构。默认zerossl。
acme会给服务器发送一个token,若服务器
安装好证书即可,以下安装成功。
客户端
记得开服务器的防火墙
然后用真连接测试
伪装
服务器直接访问的话,会出现下面这个页面:
没有域名的话:服务器地址改成IP地址
自己做CA,自己给自己签,这种证书叫做自签证书。
给bing.com签一个证书,sni那里就要写bing.com
跳过证书验证,或者是添加到电脑的受信任颁发机构里面去.
让trojan可以后台运行
内容重定向到log那里,打印一些日志文件
纵观所有翻墙协议,最终都走向将流量伪装成正常的https才能最稳定的进行科学上网。最推荐的就是trojan。缺点是效率较低,需要两层TLS。有一个革命性的概念和技术。
Vmess协议
加密方式为何可以搞自动选择?
原因无他,乃是因为客户端将加密数据内容段的算法和密钥写在了报文头上。并据此对内容进行一个加密。
接着,Vmess会使用用户ID,用一种和服务器商量好的方式加密数据头,也就是所使用的算法和解密密钥。
为何和系统时间有关?
然后还会在头部加入一个认证信息
认证信息跟系统时间有关。
时间戳跟时区无关,从某一个时间一直加1,我们和美国取得的时间戳是一样的。
原因乃是因为vmess协议加密会使用到时间戳进行一个签名,范围在当前时间的上下30浮动。
服务器端也会根据当前可能的所有时间戳和用户ID用MD5来计算得到一串数字和客户端发来的一串数字做对比,若是相同,则能够确认身份。才会接受这些数据包,也就是说数据包是合法的。
确定是合法的,才会去掉认证头部,然后用用户ID用固定方式解密的到加密方式和密钥对数据包进行解密。
用户ID两端设置一样才能加解密。
额外ID应对短时间发送大量请求,会出现数据包重复,被GFW探测到。用户ID的可选越多,就会越难探测到。
存在漏洞,被重放攻击,实际上已经被淘汰。
引入AEAD加密方式。
现在已经是强制开启AEAD
ss要确定加密协议,为什么这个不用?
搭建
使用一键脚本安装
修改配置文件
引入TLS保证传输安全:Vmess+TLS
证书申请和握手协商流程
加密方式选择ZERO乃是因为TLS会加密,这里就不使用vmess的加密方式了。
none会进行消息认证,zero啥也不会做
Vmess协议头任何时候都会用AEAD进行加密
TLS会对整个Vmess报文进行加密
将Vmess变成Vmess+TCP+TLS是V2Ray的功能
Vmess+ws+tls也是v2ray的功能。
承载和伪装的区别
应用层的协议要不就是TCP要不就是UDP来承载,比如说Vmess、TLS、HTTP到TCP。
当传输安全改成TLS之后,也就是需要伪装的时候,承载关系就会发生变化,TLS会承载VMESS数据包(实际上也就是将VMESS数据包放在TLS的内容部分),这是用TLS将VMESS伪装起来,再用TCP承载TLS的数据包
HTTP变成HTTPS
http->TLS->TCP->IP
配置成Vmess+ws+tls
WS是基于TCP的。为什么要加ws呢
VMESS->WS->TLS->TCP
伪装
给vmess包加上一些头,伪装成http,但是不是用http来承载。
搭建web网站来伪装
目标:WS+TLS+VMESS
为什么要使用WS?
WS可以套一个路径在头部,可以配合nginx,到达伪装效果,没有这个路径的流量直接重定向到一个正常的网站,而有这个路径的流量定向到服务器段的VMESS代理。
重定向,也是一些镜像站的搭建方式,只有访问那个指定的目录,才会重定向错误,所以只要保证目录不被人知道的话,就能够保证伪装的成功。
Vmess的地位:稳定,很多服务商针对这个做了很多定制,生态支持最好,自己搭建的话,可以使用更高效的选择,追求极致的性能体验。
下节课教Vless。
通过web服务器来接受不是vmess的流量,并对其进行分流进行伪装。
Vless
XTLS
使用X-Ray
Vless+xtls+回落(意思就是转发)
两层回落
回落的功能就是复用同一个端口,搭建不同的节点,实现流量的转发。
为什么XTLS容易被精准识别?
XTLS不重复加密数据内容,数据内容部分可能是使用TLS1.2进行加密,而XTLS是使用TLS1.3对头部数据进行加密,这种不重复加密提高了效率,但是也会造成TLS1.3的数据包中含有TLS1.2的特征,让防火墙容易识别。
考虑到服务器端的处理:
我们访问的网站有可能是使用TLS1.2(大部分)进行加密的,也就是发回来的数据包中,有可能有TLS1.2的流量特征。
配置
你的节点为什么这么慢?
直连
自治系统全互联
BGP边界网关协议
阿里云也是一步一步发展起来的。
自己建了一个自治系统。
海底光缆是最重要的物理基础
IXP:互联网交换中心:性能贼强的交换机
连到交换机实现互联
出口节点带宽是有限的。
回程走不走CN2很重要,也就是联通的优质网络,服务于有钱人的网络。
中转
测试
如何不花钱提高节点速度
vless+ws+tls+web+cdn节点组合搭建
X-UI图形界面,配置配置文件。
内容分布网络(CDN)
缓存内容,内容分发,网络加速。
CDN为什么是一个减速器?
国内要用CDN域名一定要备案,实名制。只能去套国外链路,跟直接代理没什么区别。
我们现在套的CDN都是免费的,CF家的CDN的IP段已经被CFW重点关照。
套CF的CDN可以改变路由情况,左上那个是CF的CDN的话
拓扑图
CDN扮演一个中转的角色,但是只有http数据才会接受,这就是为什么要使用ws方式包装一下数据包。也可以用来破下墙,隐藏被墙的服务器。这就是用来预防被墙。这也叫做反向代理(不太明白)。
切换CDN服务器
引出优选IP:选出最好的CDN的IP地址
BBR拥塞控制算法
比基于丢包的算法带宽高
由谷歌研发的。
额外的工作
为了能够使用一款能够批量下载youtube视频的工具,不但支持了乌克兰,还被迫安装了.net的一个环境。
成功安装,不得不说,国内这些盗取github上面开源的码然后制作app牟利的行为令人不齿,不就是赚的一个墙的信息差和钱吗,果然,那句话哪里有法律,哪里就意味着有钱赚。。。
成功下载中
或许未来可以做一期视频,关于如何利用github寻找你需要的工具。
因为github实在是一个宝库,有很多简单的功能实现之后,你就不用去寻找那些臃肿的APP来下载了。