前言
本系列教程需要有一定的网络基础知识,具体需要基础到什么程度,看完第一节教程如果基本了解在讲什么就差不多了,如果完全看不懂的话可能不适合自建节点,VPN和机场才是你的选择。 内容为Youtube视频,本文只是作为视频的资料补充和导航
教程是由浅入深循序渐进,下节教程需要有上节教程的知识储备作为基础,如果你是新手,不建议跳着看,否则可能有点蒙圈
个人水平有限,有些地方可能也没讲明白,若有疑问可在下方评论区留言,也可能存在错误,欢迎大家批评指正。
本教程使用的是vultr商家的VPS并且使用Ubuntu22.04 LTS x64
操作系统,只推荐学习阶段使用,正式搭建节点推荐CN2 GIA线路
新用户充值10美元赠送100美金(14天有效):https://vps.bulianglin.com/
VPS注册视频教程:https://www.youtube.com/watch?v=3ivwonJuqyI&t=140s
本系列教程仅供非中国大陆地区的用户进行技术交流与学习探讨,请遵守所在地区的法律法规。
第一节:网络通信的基本过程
视频教程:点击进入观看
本节是纯理论,没有实操,主要让大家了解我们是如何与服务器进行通信的,清楚了这些对于之后认识各个翻墙协议的原理和特点有很大的帮助,涉及以下内容:
- IP的作用
- 端口的作用
- MAC地址的作用
- 交换机的作用
- 路由器的作用
- 域名的作用
- DNS的作用
- NAT的作用
第二节:GFW拦截的原理与绕过
视频教程:点击进入观看
本节是纯理论,没有实操,主要让大家了解GFW是通过哪些方式阻断我们与被禁止的服务器进行通信的,以及通过什么手段可以绕过GFW的阻断,清楚了这些对于之后认识各个翻墙协议的原理和特点有很大的帮助,涉及以下内容:
- DNS污染
- SNI阻断
- TCP重置
- 传统VPN的问题
- 专为翻墙而生的shadowsocks
第三节:创建VPS与SS节点搭建
视频教程:点击进入观看
本节终于开始要进行实操了,首先给大家介绍了什么是VPS以及如何购买,并且通过SSH工具连接VPS进行远程管理,由于Linux是主流的服务器操作系统,所以本教程也是基于Linux来进行搭建,对于没有接触过Linux的朋友可能有点难度,但是这是必须要迈过去的坎
其实Linux并不难,只是没有图形化界面让你感觉比较难,学习的时候你就把Linux当作是一台没有图形化界面的windows操作系统,把原来鼠标的操作变成了一条条命令,用这种思维去理解可能比较好接受
连接VPS之后就开始搭建shadowsocks
节点,在尝试连接的时候从日志中发现了GFW的主动探测
,导致节点端口被秒封,可以认为SS协议存在被精准探测的情况,针对这种情况,引入了v2ray-plugin
插件,将SS协议的数据封装成http协议的数据实现伪装,顺利绕过了GFW的主动探测。
教程用到的工具:
SSH连接工具(FinalShell):http://www.hostbuf.com/t/988.html
SS客户端(shadowsocks-windows): https://github.com/shadowsocks/shadowsocks-windows
shadowsocks插件(v2ray-plugin):https://github.com/shadowsocks/v2ray-plugin
方便测速但不支持ss插件(v2rayN):https://github.com/2dust/v2rayN
shadowsocks相关命令:
安装shadowsocks
apt install shadowsocks-libev
查看shadowsocks状态
1
| systemctl status shadowsocks-libev.service
|
编辑ss配置文件
vim /etc/shadowsocks-libev/config.json
重启shadowsocks
1
| systemctl restart shadowsocks-libev.service
|
查看shadowsocks运行日志:
journalctl -u shadowsocks-libev.service -f
Ubuntu防火墙设置:
1 2 3 4 5 6 7 8 9 10 11 12
| # 查看状态 ufw status # 开放端口 ufw allow 8388 # 拒绝端口 ufw deny 8388 # 删除规则 ufw delete allow 8388 # 关闭防火墙 ufw disable # 启动防火墙 ufw enable
|
视频时间线:
00:00 前言
00:40 什么是VPS?
02:20 购买并创建VPS
09:05 搭建shadowsocks
16:55 被主动探测端口秒封
20:37 plugin插件原理
23:28 搭建v2ray-plugin
33:40 总结
第四节:trojan原理与搭建
视频教程:点击进入观看
上一节我们搭建了属于自己的shadowscosk节点,同时也验证SS节点存在被精准探测的情况,并且通过shadowsocks+plugin
插件的方式将SS数据伪装成普通的http流量,成功的绕过了防火墙针对重点IP段的探测,不过上节演示的只是简单的伪装成http流量,又因为http是明文的数据,所以还是存在被防火墙探测的风险,想要将http流量进行加密又需要引入TLS
,让他成为https流量,所以这次就来搭建trojan
协议的节点,他是一种天生就是将数据伪装成https流量来达到科学上网目的的协议
本节可以说是整个系列最重要的一节,给大家科普了什么是http(s)/tls(ssl)/网站证书/公钥/私钥/非对称加密
,将会贯穿后面所有内容,因为任何基于TLS的节点都离不开本节讲的内容,而目前最稳定的科学上网方式依然是将流量伪装成https,是逃不开的,建议仔细观看
SSH连接工具(FinalShell):http://www.hostbuf.com/t/988.html
trojan-go:https://github.com/p4gefau1t/trojan-go
trojan-go官方文档:https://p4gefau1t.github.io/trojan-go/
trojan配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "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" } }
|
申请证书:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #安装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
|
自签证书:
1 2 3 4
| #生成私钥: 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
| nohup ./trojan-go > trojan.log 2>&1 &
|
视频时间线:
00:00 前言
01:20 http存在的问题
03:20 https的通信过程
12:20 trojan的通信过程
17:45 创建VPS
19:15 搭建trojan
23:00 申请网站证书
30:00 连接trojan节点
31:55 使用自签证书
36:50 后台运行trojan
37:50 总结
第五节:vmess原理与搭建
视频教程:点击进入观看
vmess是一个比trojan出现更早、使用更广泛的协议
作为使用者,我们的重点是如何使用vmess
,但是不讲vmess协议的通信流程又无法对这个协议的一些特性有深刻的认识,比如vmess节点为什么在电脑系统时间不对的时候无法链接?又比如为什么加密方式可以使用自动选择,按照之前讲ss节点说的,对称加密算法必须让两边都存在相同的密钥和加密方式才能正常解密。再比如额外ID(alterID
)到底是个啥?还有承载vmess数据的传输协议与伪装的区别,本节的话就来带大家了解上述问题,并由浅入深实操搭建一个基于nginx
实现web伪装的vmess节点。
你可能听到一些人说做WEB伪装是自欺欺人,GFW根本就不会进行探测
,我不明白说这句话的人是不是开发GFW的,能够如此肯定不会进行探测。GFW是黑盒状态,没有人能完全了解他的工作机制,既然伪装成了https,我们要做的是尽可能表现得和正常的网站行为是一样的,而不是去猜测GFW会不会来探测你的伪装。
SSH连接工具(FinalShell):http://www.hostbuf.com/t/988.html
v2ray官方安装脚本:https://github.com/v2fly/fhs-install-v2ray
申请证书:
1 2 3 4 5 6 7 8 9 10 11 12
| #安装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/v2ray/server.key --fullchain-file /usr/local/etc/v2ray/server.crt
|
vmess+tcp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| { "inbounds": [ { "port": 8388, "protocol": "vmess", "settings": { "clients": [ { "id": "af41686b-cb85-494a-a554-eeaa1514bca7", "alterId": 0 } ] } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }
|
vmess+tcp(ws)+tls:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| { "inbounds": [ { "port": 8388, "protocol": "vmess", "settings": { "clients": [ { "id": "af41686b-cb85-494a-a554-eeaa1514bca7", "alterId": 0 } ] }, "streamSettings": { "network": "tcp", "security": "tls", "tlsSettings": { "certificates": [ { "certificateFile": "/usr/local/etc/v2ray/server.crt", "keyFile": "/usr/local/etc/v2ray/server.key" } ] } } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }
|
vmess+ws+tls+web:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| { "inbounds": [ { "port": 8388, "listen":"127.0.0.1", "protocol": "vmess", "settings": { "clients": [ { "id": "af41686b-cb85-494a-a554-eeaa1514bca7", "alterId": 0 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/ray" } } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }
|
nginx设置:
1 2 3 4
| #安装nginx: apt install nginx #重新加载nginx配置: systemctl reload nginx.service
|
nginx配置(替换http{}里的内容):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| server { listen 443 ssl; listen [::]:443 ssl;
server_name v.buliang0.tk; ssl_certificate /usr/local/etc/v2ray/server.crt; ssl_certificate_key /usr/local/etc/v2ray/server.key; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; location / { proxy_pass https://www.bing.com; proxy_ssl_server_name on; proxy_redirect off; sub_filter_once off; sub_filter "www.bing.com" $server_name; proxy_set_header Host "www.bing.com"; proxy_set_header Referer $http_referer; proxy_set_header X-Real-IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Accept-Encoding ""; proxy_set_header Accept-Language "zh-CN"; } location /ray { proxy_redirect off; proxy_pass http://127.0.0.1:10000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
server { listen 80; server_name v.buliang0.tk; rewrite ^(.*)$ https://${server_name}$1 permanent; }
|
视频时间线:
00:00 vmess和v2ray的关系
01:54 vmess通信过程
11:25 vmess被精准探测
13:42 搭建vmess+tcp
17:15 vmess+tcp(ws)+tls原理
21:07 传输协议承载和伪装的区别
24:53 搭建vmess+tcp(ws)+tls
28:15 vmess+ws+tls+web原理
33:25 搭建vmess+ws+tls+web
36:35 总结:vmess还有优势吗?
第六节:vless原理与搭建
视频教程:点击进入观看
上节我们详细介绍了vmess协议的通信流程以及搭建vmess+ws+tls+web
的节点,达到了最大的伪装效果
但是上节我说过,vmess他没有类似trojan可以自带伪装,所以要给vmess协议做伪装的话还得单独搭建一个web服务器(nginx)来接收不是vmess流量的数据并对其进行分流实现伪装,而且vmess对于现在都套tls的情况下还是会对协议头部数据进行加密,并且还得和系统时间对应,显得有些冗余
针对这种情况,vless
协议应运而生,他的出现就是为了解决vmess上述问题,不会进行额外加密也无需校对时间,可以看成是轻量化的vmess,这节我们就来讲讲vless协议,并使用xray
内核来搭建vless节点。
1 2 3 4 5 6 7 8 9 10 11
| #关闭防火墙: ufw disable
#xray官方一键安装脚本: bash -c "$(curl -L github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install -u root #启动Xray: systemctl start xray.service #重启Xray: systemctl restart xray.service #Xray状态: systemctl status xray.service
|
申请证书:
1 2 3 4 5 6 7 8 9 10 11 12
| #安装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配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| { "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" } ] }
|
视频时间线:
00:00 vmess的问题和vless的出现
01:18 吃瓜:V2Ray和Xray为什么分家?
04:40 vless+xtls+回落通信过程
14:48 XTLS存在被主动探测的特征
19:15 vless+xtls+回落实战搭建
26:37 总结和下集预告
第七节:你的节点怎么这么慢
视频教程:点击进入观看
前面的教程都是教大家怎么搭建节点,使用的是vultr商家的vps,搭建出来的节点速度很拉胯,作为电信用户的我高峰期基本上无法正常使用的,为什么速度会这么拉胯?是搭建的方式不对吗?
但是联通用户同样使用vultr的vps却有着不错的速度,这又是什么情况?
相信搭建节点的朋友都有这样的疑问,自己一顿猛如虎的操作,结果测速只有0.1m/s
,影响翻墙速度的因素到底有哪些?
怎么才提升vps的翻墙速度,以及路由为什么会绕路?
针对以上这些问题,这节给大家讲讲线路的相关知识。端口转发/隧道中转/BGP/自治系统/单线机房/多线机房
路由跟踪:https://tools.ipip.net/traceroute.php
视频时间线:
00:00 为什么你的节点这么慢?
00:48 互联网是怎么互联的?
05:00 什么是单线、双线机房和BGP机房?
06:40 全球互联与长城防火墙
09:40 代理服务器登场
11:36 节点速度慢的真正原因
13:16 要速度快就得换精品线路
18:08 直连线路总结
18:55 需要中转线路的原因
20:55 中转机和端口转发、隧道中转
24:26 三网回程CMI路由跟踪
第八节:节点免费提速方案
视频教程:点击进入观看
这是节点搭建系列的最后一节,给大家讲讲不花钱的免费提升节点速度的方案,主要给大家介绍套用cloudflare提供的免费CDN
以及BBR
拥塞控制算法,并且通过配合x-ui
面板实现vless+ws+tls+web+cdn
的节点搭建
x-ui面板:https://github.com/vaxilu/x-ui
CF优选IP:https://github.com/XIU2/CloudflareSpeedTest
CF官网:https://cloudflare.com
CF-CDN-IP段:https://www.cloudflare.com/zh-cn/ips/
1 2 3 4 5 6
| # 安装nginx: apt install nginx # 配置nginx: vim /etc/nginx/nginx.conf # 重新加载nginx配置: systemctl reload nginx.service
|
nginx配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
events { worker_connections 768; }
http {
server { listen 80 default_server; listen [::]:80 default_server;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; location / { proxy_pass https://www.bing.com; proxy_ssl_server_name on; proxy_redirect off; sub_filter_once off; sub_filter "www.bing.com" $server_name; proxy_set_header Host "www.bing.com"; proxy_set_header Referer $http_referer; proxy_set_header X-Real-IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Accept-Encoding ""; proxy_set_header Accept-Language "zh-CN"; }
location /ray { proxy_redirect off; proxy_pass http://127.0.0.1:8388; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location /xui { proxy_redirect off; proxy_pass http://127.0.0.1:9999; proxy_http_version 1.1; proxy_set_header Host $host; } } }
|
拥塞控制:
1 2 3 4 5 6 7 8 9
| #查询当前使用的 TCP 拥塞控制算法 sysctl net.ipv4.tcp_congestion_control #查询当前Linux版本 uname -r
#启用BBR TCP拥塞控制算法 echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p
|
视频时间线:
00:00 前言
01:07 使用x-ui搭建vless+ws
04:18 CDN的原理
07:14 CDN竟然是减速器?
08:35 套用cloudflare免费CDN
11:50 利用CDN翻墙的原理
14:50 手动更换CDN服务器
18:21 CDN优选IP原理与使用
21:34 套用CDN之后TLS、回源相关知识
26:00 搭建vless+ws+tls+web+cdn
31:40 TCP拥塞控制的原理
37:43 启用BBR拥塞控制算法
39:43 hysteria提速垃圾线路原理
41:55 完结撒花、感谢大家