节点搭建系列

1.网络通信的基本过程,访问网站到底发生了什么事情?详细解析DNS原理

数据传输过程共分为五层(也可划分为四层)

DNS:对应域名所在网址ip,一般网址所对应域名存在电脑的host文件中,当host中找不到时,就要发送到专门的DNS服务器中寻找所对应的域名

**传输过程:**电脑找不到DNS时,便会经过五层来查找数据

应用层:发送请求

传输层:封装端口,对应自己电脑的端口和交换器的端口

网络层:封装原ip和目标ip

数据链路层:封装本机和交换器MAC地址

**交换机:**接受两层数据协议

路由器:接受三层数据协议(具体如下图所示)

最后数据如图所示

image-20221213140905970

公网与内网进行链接用WAN口

image-20221213140029488

路由器的NAT协议

image-20221213140119257

本机的ip地址(192.168…1.10)和端口(404)不能直接在外网进行传输,须由路由器通过NAT协议进行转换(20.20.20.20和505)才能进行传输,最后回来时在转换为原来数据,如下图所示,

image-20221213140220540

在外网进行数据传输时,mac地址会随着路由器的变化而不断变化,最后传至DNS服务器时在进行解码,过程与原过程相反

image-20221213140828158

解码成功后在逆过程回来传递至我们的电脑,电脑得到域名后,在经历相同过程传至百度web服务器,用来获取网页页面内容(前面是获取ip),然后百度服务器传递回来一个数据包,包含页面内容,回到我们的电脑,完毕!

GFW防火墙是怎么阻断我们和谷歌的连接?如何绕过防火墙的拦截?DNS污染是怎么回事?

DNS污染(DNS劫持)

当我们向国外的DNS服务器请求ip地址时,国内的防火墙会篡改数据,比如将获取到的iP动手脚(9.9.9->8.8.8)这样就导致我们无法获取到正确的ip地址,也就无法打开国外的网页

image-20221213142524655

image-20221213142808277

一种解决思路:

直接在电脑的host文件中添加网站所对应的IP地址,这样就不会被DNS劫持

那假如我们已经知道了正确的ip地址后,要向谷歌服务器发送请求获取内容时,又会遇到第二种被阻挡的方式

TCP重置攻击

我们应用层用的是http协议,而传输层又分为TCP(建立连接)和UDP(不建立连接),我们用的是TCP,所以必须向谷歌服务器发送请求

而当发送的数据到gpw(防火墙)时,此时的ip地址在它的黑名单内,它也可以通过NAT篡改我们的内容,从此截断数据,发送不到谷歌服务器,并自己返还错的数据包给我们,因此打不开

image-20221213143359942

还有一种情况:

因为谷歌的ip地址不止一个,当我们发送未在防火墙黑名单内的ip地址时想要进行连接时,防火墙不会进行拦截,我们可以正常与谷歌服务器进行链接,但是当我们建立连接后想要申请访问内容(访问Google)时,又要向谷歌发送请求,此时防火墙看到我们应用层所请求的内容时,发现Google网址在黑名单内,于是又阻断了链接

image-20221213144625196

接下来,就要引入VPNshadowsocks的概念了,既然我们请求的内容可以被防火墙拦截,那我们可以通过VPN和shadowsocks对内容进行加密,从而通过防火墙

vpn

传统的vpn会在访问内容上加上比较明显的内容

image-20221213145340965

防火墙可能暂时会让你通过,但如果长时间大流量进行链接,可能还是会被拦截

shadowsocks(ss)

加密的内容更加隐秘,一般不会被察觉

我们先在外网建立起一台服务器并让他监听端口,向他发送请求,让他代理我们访问谷歌,

image-20221213145719322

同时我们运行ss客户端,此时我们的浏览器会先走代理服务器(假设为1080)

image-20221213145808696

此时ss软件正好在监听1080端口,听到了我们浏览器的请求,

image-20221213145656023

然后将请求内容进行加密

image-20221213145951556

通过五层协议后再通过防火墙,来到我们国外的服务器处,服务器解密后一系列操作访问谷歌后又回到我们ss客户端,ss解密后再发给我们

image-20221213150108304

SS被精准探测端口秒封?节点搭建初体验,创建年轻人的第一台VPS,shadowsocks协议已被精准探测?plugin插件原理,使用v2ray-plugin插件拯救ss协议

VPS

image-20221213152811454众所周知,我们需要一台外网的服务器才能进行传输,那么如何拥有属于我们的vps呢?

可以注册一个vultr并购买账号解决问题(首充最少70元)

常用指令

安装shadowsocks: apt install shadowsocks-libev

查看shadowsocks状态: systemctl status shadowsocks-libev.service

编辑ss配置文件: vim /etc/shadowsocks-libev/config.json

重启shadowsocks: systemctl restart shadowsocks-libev.service

查看shadowsocks运行日志: journalctl -u shadowsocks-libev.service -f

防火墙设置: 查看状态:ufw status

开放端口:ufw allow 8388

拒绝端口:ufw deny 8388

删除规则:ufw delete allow 8388

关闭防火墙:ufw disable

启动防火墙:ufw enable

为防止防火墙的探测,可以使用shadowsocks+plugin插件将ss数据伪装成普通的https流量

目前最好的翻墙协议?史上最详细trojan协议原理解析与实战搭建,流量伪装成https实现绕过防火墙探测进行科学上网。彻底弄明白什么是网站证书、什么是TLS/SSL

http协议(先前已经讲过)

坏处就是运营商可以在我们访问的网站内随意修改数据,现在普遍使用https协议

image-20221213162430878

image-20221213162336907

https协议(新)

http+TLS协议,主要用于加密我们访问的内容

image-20221213162554662

加密算法

对称加密

加密方式和解密方式相同

非对称加密

公钥(可泄密)加密,私钥(很私有,不能泄露)解密;或者私钥解密,公钥加密;

image-20221213163344289

证书

每一个网站都需要向CA机构申请证书,内容基本如下

image-20221213164443032

访问

http协议先请求内容,传递给tls协议,tls协议先向目标网站发送请求来建立链接,网站获取请求并将证书颁发给tls协议,tls将证书插入到头部,对后面的内容进行加密,变成正常的https流,然后再进行传输

image-20221213164759141

image-20221213212910575

此时防火墙就无从得知我们的访问内容

sni

域名地址可以通过sni加密,但还未广泛使用这一方式,且因为无从得知sni所指向的地址,防火墙可能直接会切断sni后的内容一劳永逸(我tm直呼内行)

Trojan

先在外网和本地创建Trojan服务器(用vultr即可),Trojan服务器也要向CA机构申请证书

image-20221213170830473

Trojan会在http发送请求后,在头部添加一个标识,再传到tls

image-20221213171013465

tls建立连接后,Trojan会对其用目标网站的公钥进行加密

image-20221213171140161

trojan配置文件: { “run_type”: “server”, “local_addr”: “0.0.0.0”, “local_port”: 443, “remote_addr”: “192.83.167.78”, “remote_port”: 80, “password”: [ “your_awesome_password” ], “ssl”: { “cert”: “server.crt”, “key”: “server.key” } }

申请证书: 安装acme:curl https://get.acme.sh | sh

安装socat:apt install socat

添加软链接:ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh

注册账号: acme.sh --register-account -m my@example.com

开放80端口:ufw allow 80

申请证书: acme.sh --issue -d 你的域名 --standalone -k ec-256

安装证书: acme.sh --installcert -d 你的域名 --ecc --key-file /root/trojan/server.key --fullchain-file /root/trojan/server.crt

如果默认CA无法颁发,则可以切换下列CA:

切换 Let’s Encrypt:acme.sh --set-default-ca --server letsencrypt

切换 Buypass:acme.sh --set-default-ca --server buypass

切换 ZeroSSL:acme.sh --set-default-ca --server zerossl

自签证书: 生成私钥:openssl ecparam -genkey -name prime256v1 -out ca.key

生成证书:openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj “/CN=bing.com

自签证书

自签证书后想要正常运行方法

1.跳过证书验证

2.添加到信任证书

纵观所有的翻墙协议不管是shadowsocks+plugin还是ssr还是vmess+tls+ws或者是vless+xtls,最终都走向了将流量伪装成正常的https.才能最稳定的进行科学上网

image-20221213175923858

vmess传输协议

先请求数据,选择协议后,生成秘钥和加密方式,并对请求数据进行第一次加密,接着再进行第二次加密,将生成的秘钥和加密方式进行加密,然后再在头部插入时间戳+用户id所对应的哈希值截取的一部分

image-20221213210918427

image-20221213205154103

时间戳

唯一,不随时区改变而改变,vmess协议要使用到

信息要经过哈希算法经过处理(注意:此过程不可逆,既不能推断出原信息)

image-20221213210459196

image-20221213210731703

由于不能推断出原信息,外网服务器解密时,会将当前时间戳±120s,并一一用其所对应的哈希值进行匹配,当匹配成功时检查用户ID,并用ID

对这一串数据用固定的方式进行解密,获得数据,然后再用数据中的加密方式进行解密(为对称解密),从而获取到我们想要得到的内容

原来的md5认证方式已经被淘汰,现在强制使用AEAD加密方式,只需将额外id设置为0即可

这位更是重量级之 vmess+ws+tls+web(主流应用,防检测,主动出击!)

需要用到Nginx来解析ws数据,而Nginx会将将自身所指向的伪装网站内容直接返还到防火墙进行伪装检测

此时ws所起的作用是传递给Nginx时,走正确的道路(/ray),从而能转到相应端口

先请求信息(不良林),再用zero加密方式,然后vmess会将zero加密方式进行加密,再加上解密方式,ws再加上路径,最后tls会将全部进行加密,在套上一个证书头

image-20221213215618257

image-20221213214541277

优化

vmess进行加密后,tls会再次进行加密,显得有些多余

image-20221213215943209

此时引入

vless的出现

image-20221213221331568

需要使用xtls的话就使用Xray,不需要可以使用v2ray或者Xray

传输过程

假设已经与Google进行链接,发送的数据如图所示

image-20221213222223222

后面的内容发送至xls时先进行加密

image-20221213222337228

若使用vless协议,则

image-20221213222408340

再使用xtls协议,不会将全部内容进行加密,而是将前面进行加密(版本可能不同)

image-20221213222516013

前面再加上ip地址,最后进行发送

image-20221213222553829

xray用tcp和xtls协议进行解密,最后获得字符串,此时部分内容仍被加密(绿色部分)

image-20221213222642230

回落

当传输数据不匹配时,就会进行回落

image-20221213223043610

image-20221213222925298

关闭防火墙:ufw disable

xray官方一键安装脚本:bash -c “$(curl -L github.com/XTLS/Xray-install/raw/main/install-release.sh)” @ install -u root

启动v2ray:systemctl start xray.service

重启v2ray:systemctl restart xray.service

v2ray状态:systemctl status xray.service

申请证书:

安装acme:curl https://get.acme.sh|sh

安装socat:apt install socat

添加软链接:ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh

切换CA机构:acme.sh --set-default-ca --server letsencrypt

申请证书: acme.sh --issue -d 你的域名 --standalone -k ec-256

安装证书: acme.sh --installcert -d 你的域名 --ecc --key-file /usr/local/etc/xray/server.key --fullchain-file /usr/local/etc/xray/server.crt

xray配置文件: { “log”: { “loglevel”: “warning” }, “inbounds”: [ { “port”: 443, “protocol”: “vless”, “settings”: { “clients”: [ { “id”: “72bac1c4-02de-49b4-e498-fa8767638c23”, “flow”: “xtls-rprx-direct” } ], “decryption”: “none”, “fallbacks”: [ { “dest”: 8388 } ] }, “streamSettings”: { “network”: “tcp”, “security”: “xtls”, “xtlsSettings”: { “alpn”: [ “http/1.1” ], “certificates”: [ { “certificateFile”: “/usr/local/etc/xray/server.crt”, “keyFile”: “/usr/local/etc/xray/server.key” } ] } } }, { “port”: 8388, “listen”: “127.0.0.1”, “protocol”: “trojan”, “settings”: { “clients”: [ { “password”: “111” } ], “fallbacks”: [ { “dest”: “180.76.138.44:80” } ] }, “streamSettings”: { “network”: “tcp”, “security”: “none” } } ], “outbounds”: [ { “protocol”: “freedom” } ] }

你的节点速度为什么这么慢?如何搭建高速翻墙节点?影响节点速度的因素有哪些?为什么需要中转线路?互联网是怎么把我们都连接在一起的?

假如我们连接的是电信网,淘宝也是电信网络,我们可以很轻易的访问到淘宝;那我们如何连接到联通的bilibili呢?

此时,电信和联通会在中间拉一条线:BGP,也叫边界网关协议

image-20221214205141105

到后来,连接的网络越来越多,最后淘宝干脆创建了自己的网络,并出售服务器来赚钱,也就是阿里云

image-20221214205626828

那么,国外网站呢?

我们可以通过一台强大的**交换机(lxp)**来解决,使速度更快,此时所有光缆连接到交换机即可

image-20221214210257976

又后来,防火墙出现了,对流量进行拦截

image-20221214210336562

但还是过于拥挤,此时电信推出了专门服务于大客户的精品网(CN2),普通用户无法使用

image-20221214210737593

去程和回程

顾名思义,访问国外服务器的线路和回来的线路,一般回程的速度影响比较大,因为可能会下载文件之类的,在购买vps产品时注意此项!

如今,联通也推出了属于自己的精品网络,简称A网,来对标CN2,价格比CN2便宜

image-20221214211308966

移动因为成立较晚,所以没有自己的精品网络,但有国际网络CMI,也可以链接外网

image-20221214211434701

总而言之,目前体验最好的是电信的CN2

image-20221214211551521

中转节点

只对数据进行中转处理,使访问速度更快,与直连相对立

image-20221214211912166

端口转发(NAT)和隧道转发

一台中转机一个月就要上千块,于是一些小机场主就让每个用户每个月平摊二三十块钱,并给用户提供端口,进行中转,也叫端口转发和隧道转发(转发的过程中进行不同程度的加密)

我们在获取三网回程CMI后,可以在https://tools.ipip.net/traceroute.php 网站进行去程测试,从而查看去程

image-20221214212921071

而回程用户则无法查看,除非提供专门的接口

如何不花钱提升你的节点速度?使用CF的免费CDN服务提升节点速度,bbr拥塞控制优化链路速度,CDN的原理、CF优选IP的原理,vless+ws+tls+web+cdn节点组合搭建

cdn:类似于中转服务器,不走常规线路,缓解流量压力,当请求数据不符合自身时,会向上一级cdn进行查找,但由于国内套cdn需要实名认证备案,国外不需要,因此挂国外cdn和不挂cdn速度一样,可能会有稍微提升(都走一条线),除非挂国内的

image-20221214225456314

Cloudflare可提供国外免费cdn服务,但由于用的人太多,已被国内防火墙劣化

cdn原理图

利用cdn可以防止服务器被墙,因为我们是向cdn发送数据,再由服务器发,而cdn没有被墙

如果cdn被墙了,那我们可以更换一个cdn来解决问题

image-20221214230318353

优选CDN

当需要更换cdn时,找到速度最快的那一个

bbr拥塞控制优化

当线路造成拥挤时,就会采用拥塞控制算法,默认为bbr

image-20221214234414477

下图左侧为歇斯底里算法,虽然速度快,但目前并不推荐,因为很可能会丢包

image-20221214234316962