节点搭建系列
节点搭建系列
1.网络通信的基本过程,访问网站到底发生了什么事情?详细解析DNS原理
数据传输过程共分为五层(也可划分为四层)
DNS:对应域名所在网址ip,一般网址所对应域名存在电脑的host文件中,当host中找不到时,就要发送到专门的DNS服务器中寻找所对应的域名
**传输过程:**电脑找不到DNS时,便会经过五层来查找数据
应用层:发送请求
传输层:封装端口,对应自己电脑的端口和交换器的端口
网络层:封装原ip和目标ip
数据链路层:封装本机和交换器MAC地址
**交换机:**接受两层数据协议
路由器:接受三层数据协议(具体如下图所示)
最后数据如图所示
公网与内网进行链接用WAN口
路由器的NAT协议
本机的ip地址(192.168…1.10)和端口(404)不能直接在外网进行传输,须由路由器通过NAT协议进行转换(20.20.20.20和505)才能进行传输,最后回来时在转换为原来数据,如下图所示,
在外网进行数据传输时,mac地址会随着路由器的变化而不断变化,最后传至DNS服务器时在进行解码,过程与原过程相反
解码成功后在逆过程回来传递至我们的电脑,电脑得到域名后,在经历相同过程传至百度web服务器,用来获取网页页面内容(前面是获取ip),然后百度服务器传递回来一个数据包,包含页面内容,回到我们的电脑,完毕!
GFW防火墙是怎么阻断我们和谷歌的连接?如何绕过防火墙的拦截?DNS污染是怎么回事?
DNS污染(DNS劫持)
当我们向国外的DNS服务器请求ip地址时,国内的防火墙会篡改数据,比如将获取到的iP动手脚(9.9.9->8.8.8)这样就导致我们无法获取到正确的ip地址,也就无法打开国外的网页
一种解决思路:
直接在电脑的host文件中添加网站所对应的IP地址,这样就不会被DNS劫持
那假如我们已经知道了正确的ip地址后,要向谷歌服务器发送请求获取内容时,又会遇到第二种被阻挡的方式
TCP重置攻击
我们应用层用的是http协议,而传输层又分为TCP(建立连接)和UDP(不建立连接),我们用的是TCP,所以必须向谷歌服务器发送请求
而当发送的数据到gpw(防火墙)时,此时的ip地址在它的黑名单内,它也可以通过NAT篡改我们的内容,从此截断数据,发送不到谷歌服务器,并自己返还错的数据包给我们,因此打不开
还有一种情况:
因为谷歌的ip地址不止一个,当我们发送未在防火墙黑名单内的ip地址时想要进行连接时,防火墙不会进行拦截,我们可以正常与谷歌服务器进行链接,但是当我们建立连接后想要申请访问内容(访问Google)时,又要向谷歌发送请求,此时防火墙看到我们应用层所请求的内容时,发现Google网址在黑名单内,于是又阻断了链接
接下来,就要引入VPN和shadowsocks的概念了,既然我们请求的内容可以被防火墙拦截,那我们可以通过VPN和shadowsocks对内容进行加密,从而通过防火墙
vpn
传统的vpn会在访问内容上加上比较明显的内容
防火墙可能暂时会让你通过,但如果长时间大流量进行链接,可能还是会被拦截
shadowsocks(ss)
加密的内容更加隐秘,一般不会被察觉
我们先在外网建立起一台服务器并让他监听端口,向他发送请求,让他代理我们访问谷歌,
同时我们运行ss客户端,此时我们的浏览器会先走代理服务器(假设为1080)
此时ss软件正好在监听1080端口,听到了我们浏览器的请求,
然后将请求内容进行加密
通过五层协议后再通过防火墙,来到我们国外的服务器处,服务器解密后一系列操作访问谷歌后又回到我们ss客户端,ss解密后再发给我们
SS被精准探测端口秒封?节点搭建初体验,创建年轻人的第一台VPS,shadowsocks协议已被精准探测?plugin插件原理,使用v2ray-plugin插件拯救ss协议
VPS
众所周知,我们需要一台外网的服务器才能进行传输,那么如何拥有属于我们的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协议
https协议(新)
http+TLS协议,主要用于加密我们访问的内容
加密算法
对称加密
加密方式和解密方式相同
非对称加密
公钥(可泄密)加密,私钥(很私有,不能泄露)解密;或者私钥解密,公钥加密;
证书
每一个网站都需要向CA机构申请证书,内容基本如下
访问
http协议先请求内容,传递给tls协议,tls协议先向目标网站发送请求来建立链接,网站获取请求并将证书颁发给tls协议,tls将证书插入到头部,对后面的内容进行加密,变成正常的https流,然后再进行传输
此时防火墙就无从得知我们的访问内容
sni
域名地址可以通过sni加密,但还未广泛使用这一方式,且因为无从得知sni所指向的地址,防火墙可能直接会切断sni后的内容一劳永逸(我tm直呼内行)
Trojan
先在外网和本地创建Trojan服务器(用vultr即可),Trojan服务器也要向CA机构申请证书
Trojan会在http发送请求后,在头部添加一个标识,再传到tls
tls建立连接后,Trojan会对其用目标网站的公钥进行加密
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.才能最稳定的进行科学上网
vmess传输协议
先请求数据,选择协议后,生成秘钥和加密方式,并对请求数据进行第一次加密,接着再进行第二次加密,将生成的秘钥和加密方式进行加密,然后再在头部插入时间戳+用户id所对应的哈希值截取的一部分
时间戳
唯一,不随时区改变而改变,vmess协议要使用到
信息要经过哈希算法经过处理(注意:此过程不可逆,既不能推断出原信息)
由于不能推断出原信息,外网服务器解密时,会将当前时间戳±120s,并一一用其所对应的哈希值进行匹配,当匹配成功时检查用户ID,并用ID
对这一串数据用固定的方式进行解密,获得数据,然后再用数据中的加密方式进行解密(为对称解密),从而获取到我们想要得到的内容
原来的md5认证方式已经被淘汰,现在强制使用AEAD加密方式,只需将额外id设置为0即可
这位更是重量级之 vmess+ws+tls+web(主流应用,防检测,主动出击!)
需要用到Nginx来解析ws数据,而Nginx会将将自身所指向的伪装网站内容直接返还到防火墙,进行伪装检测
此时ws所起的作用是传递给Nginx时,走正确的道路(/ray),从而能转到相应端口
先请求信息(不良林),再用zero加密方式,然后vmess会将zero加密方式进行加密,再加上解密方式,ws再加上路径,最后tls会将全部进行加密,在套上一个证书头
优化
vmess进行加密后,tls会再次进行加密,显得有些多余
此时引入
vless的出现
需要使用xtls的话就使用Xray,不需要可以使用v2ray或者Xray
传输过程
假设已经与Google进行链接,发送的数据如图所示
后面的内容发送至xls时先进行加密
若使用vless协议,则
再使用xtls协议,不会将全部内容进行加密,而是将前面进行加密(版本可能不同)
前面再加上ip地址,最后进行发送
xray用tcp和xtls协议进行解密,最后获得字符串,此时部分内容仍被加密(绿色部分)
回落
当传输数据不匹配时,就会进行回落
关闭防火墙: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,也叫边界网关协议
到后来,连接的网络越来越多,最后淘宝干脆创建了自己的网络,并出售服务器来赚钱,也就是阿里云
那么,国外网站呢?
我们可以通过一台强大的**交换机(lxp)**来解决,使速度更快,此时所有光缆连接到交换机即可
又后来,防火墙出现了,对流量进行拦截
但还是过于拥挤,此时电信推出了专门服务于大客户的精品网(CN2),普通用户无法使用
去程和回程
顾名思义,访问国外服务器的线路和回来的线路,一般回程的速度影响比较大,因为可能会下载文件之类的,在购买vps产品时注意此项!
如今,联通也推出了属于自己的精品网络,简称A网,来对标CN2,价格比CN2便宜
移动因为成立较晚,所以没有自己的精品网络,但有国际网络CMI,也可以链接外网
总而言之,目前体验最好的是电信的CN2
中转节点
只对数据进行中转处理,使访问速度更快,与直连相对立
端口转发(NAT)和隧道转发
一台中转机一个月就要上千块,于是一些小机场主就让每个用户每个月平摊二三十块钱,并给用户提供端口,进行中转,也叫端口转发和隧道转发(转发的过程中进行不同程度的加密)
我们在获取三网回程CMI后,可以在https://tools.ipip.net/traceroute.php 网站进行去程测试,从而查看去程
而回程用户则无法查看,除非提供专门的接口
如何不花钱提升你的节点速度?使用CF的免费CDN服务提升节点速度,bbr拥塞控制优化链路速度,CDN的原理、CF优选IP的原理,vless+ws+tls+web+cdn节点组合搭建
cdn:类似于中转服务器,不走常规线路,缓解流量压力,当请求数据不符合自身时,会向上一级cdn进行查找,但由于国内套cdn需要实名认证备案,国外不需要,因此挂国外cdn和不挂cdn速度一样,可能会有稍微提升(都走一条线),除非挂国内的
Cloudflare可提供国外免费cdn服务,但由于用的人太多,已被国内防火墙劣化
cdn原理图
利用cdn可以防止服务器被墙,因为我们是向cdn发送数据,再由服务器发,而cdn没有被墙
如果cdn被墙了,那我们可以更换一个cdn来解决问题
优选CDN
当需要更换cdn时,找到速度最快的那一个
bbr拥塞控制优化
当线路造成拥挤时,就会采用拥塞控制算法,默认为bbr
下图左侧为歇斯底里算法,虽然速度快,但目前并不推荐,因为很可能会丢包