搭建vpn

https://github.com/XTLS/Xray-core

https://github.com/XTLS/Xray-core

工具推荐

image-20250506200528614

真·VPN

这种虚拟网卡模式和真正的VPN已经非常接近了,但是也只能说非常接近 还不是真正的VPN,因为我们用的ss vmess trojan等主流的翻墙协议,都无法封装网络层的数据包,最直观的感受就是ping命令这个网络层的工具

image-20250426023625666

真正的vpn比如wireguard却可以做到的

但是真vpn很多时候不会在意伪装,所以不如下面的

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相关命令:

shell
# 安装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

Ubuntu防火墙设置:

shell
# 查看状态
ufw status
# 开放端口
ufw allow 8388
# 拒绝端口
ufw deny 8388
# 删除规则
ufw delete allow 8388
# 关闭防火墙
ufw disable
# 启动防火墙
ufw enable

视频时间线:

上一节我们搭建了属于自己的shadowscosk节点,同时也验证SS节点存在被精准探测的情况,并且通过shadowsocks+plugin插件的方式将SS数据伪装成普通的http流量,成功的绕过了防火墙针对重点IP段的探测,不过上节演示的只是简单的伪装成http流量,又因为http是明文的数据,所以还是存在被防火墙探测的风险,想要将http流量进行加密又需要引入TLS,让他成为https流量,所以这次就来搭建trojan协议的节点,他是一种天生就是将数据伪装成https流量来达到科学上网目的的协议

搭建演示

ubuntu中使用shadowsocks比较简单,因为它内置在源里面

# 安装shadowsocks
apt install shadowsocks-libev

image-20250314132623562

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

image-20250314132957028

默认端口是8388

配置信息位置

image-20250314133056328

image-20250314133220986

修改完端口之后重启一下

shell
systemctl restart shadowsocks-libev.service

运行中

image-20250314133335968

现在还不能正常使用的,需要编辑配置文件

json
{
    "server":["::1", "127.0.0.1"],
    "mode":"tcp_and_udp",
    "server_port":8868,
    "local_port":1080,
    "password":"3ySRXSetAG1M",
    "timeout":86400,
    "method":"chacha20-ietf-poly1305"
}

1、ip地址改成0.0.0.0代表接受所有ip8388端口发送数据,默认只允许本机的程序向他发送数据

0.0.0.0意味着监听vps上所有可用的网络接口,比如vps有多个公网ip,你发给任意ip他都会接收,但如果设置成127.0.0.1,意味着只监听本地的环回口,别人通过vps的公网ip就访问不到了

"server":“0.0.0.0”,

2、这里的密码"password":"3ySRXSetAG1M",和加密方式"method":"chacha20-ietf-poly1305"我们就按照她默认的就行了。这个密码和加密方式的话 我们在客户端这边配置的时候,也需要和他这边一模一样

并且我们要认证加密方式为GCM的这种模式,这种加密方式的话 他是带了那个身份认证的,也就是AEAD包括这个shadowsocks服务端默认的这个加密方式,这个poly1305的话他也是带了那个身份验证的

image-20250314134134780

如果现在直接连接是不通的,因为没有开启防火墙

# 查看状态
ufw status
# 开放端口
ufw allow 8388
# 拒绝端口
ufw deny 8388
# 删除规则
ufw delete allow 8388
# 关闭防火墙
ufw disable
# 启动防火墙
ufw enable

开启ss日志之后可以看到有趣的现象

image-20250314134530401

测试真连接就是vps向google发送一条请求

测试之后发现本地的请求发送不到服务器,因为被长城防火墙给墙了

之后会有重放攻击

裸奔的ss协议,已经可以被防火墙精确的探测到了

理论上来说ss协议没法用了, 但是ss协议它引入了plagin 也就是插件的功能,它的主要功能就是对数据流量进行伪装,比如说把我们经过ss加密后的数据流量伪装成普通的http

image-20250314135238841

plugin 插件的话有很多种 我们这里就以v2ray plugin为例,因为这个也是ubuntu里面自带的是

输入命令

apt install shadowsocks-v2ray-plugin

image-20250314135519058

image-20250314135642581

可以使用命令dpkg -L查看安装包里的内容

image-20250314140347117

可以看到他就只释放了一个叫做ss-v2ray-plagin的这么一个可执行文件 它放到了这个bin目录下。所以我们可以直接在这里调用它。但是你现在没有配置的话 你光启动没什么用的。

有了插件之后我们需要修改一下配置文件。具体的参数的话 我们可以看一下这个shadowsocks插件(v2ray-plugin):https://github.com/shadowsocks/v2ray-plugin

官方给了http和https等多种方式

image-20250314140151495

但是我们不能写一样的,因为我们刚刚使用dpkg -L shadowsocks-v2ray-plugin查到的释放的名字叫ss-v2ray-plugin,还有加上--plugin-opts "server"

备注

plugin-opts在配置文件中要改成plugin_opts

{
    "server":"0.0.0.0",
    "mode":"tcp_and_udp",
    "server_port":8868,
    "local_port":1080,
    "password":"3ySRXSetAG1M",
    "timeout":86400,
    "method":"chacha20-ietf-poly1305",
    "plugin":"ss-v2ray-plugin",
    "plugin_opts":""server""
}

很遗憾的是 v2rayN 他不支持那个插件 所以说我们还需要另外使用客户端.但是这里的话我们可以ping一下这个tcp是否可以正常连接

我们现在就要使用一个能够添加插件的这么一个客户端

image-20250314141035885

clash的话 他是支持的 手机端的话也有很多客户端是支持的

下载地址:SS客户端(shadowsocks-windows): https://github.com/shadowsocks/shadowsocks-windows

同时下载插件:shadowsocks插件(v2ray-plugin):https://github.com/shadowsocks/v2ray-plugin

然后将插件解压在客户端文件夹里面

image-20250314141307420

插件的选项就和刚刚的那个一样

image-20250314141358399

他就创建了系统代理1080端口

我们就可以在v2rayN中添加socks服务器向系统代理发

image-20250314141616000

http是明文的数据 所以还是存在被防火墙探测的风险,想要将http流量进行加密的话又需要引入tls,让它成为https流量 所以这一次的话 我们就来搭建trojan协议

trojan

它是一种天生就是将数据伪装成https流量来达到科学上网的目的

本节可以说是整个系列最重要的一节,给大家科普了什么是http(s)/tls(ssl)/网站证书/公钥/私钥/非对称加密,将会贯穿后面所有内容,因为任何基于TLS的节点都离不开本节讲的内容,而目前最稳定的科学上网方式依然是将流量伪装成https,是逃不开的,建议仔细观看

image-20250314142931652

这里说的是tls1.2的情况,会露出域名和ip

1.3的话 他可以对这个sni进行加密 也就是esni 在传输的过程中 这个网址他也可以给你进行加密

image-20250314143024248

目前没有普及,而且据说长城防火墙会直接丢弃esni加密后的这个数据包流量

原理:

image-20250314143125213

trojan的密码的话 它并不是用来对数据进行加密的 而是用来进行身份认证的

跳过证书验证这个的话 我们待会再讲

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配置文件:

json
{
    "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"
    }
}

申请证书:

shell
#安装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 cogrise.top  --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

自签证书:

shell
#生成私钥:
openssl ecparam -genkey -name prime256v1 -out ca.key
#生成证书:
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt  -subj "/CN=bing.com"

Shell

复制

后台运行:

shell
nohup ./trojan-go > trojan.log 2>&1 &

实操

首先的话 我们要需要搭建trojan的服务器端

trojan的话 我们用的是这个trojan-gohttps://github.com/p4gefau1t/trojan-go

由于这个trojan-go他没有内置在ubuntu这个软件源里面,所以说我们需要在github页面上下载一个二进制文件 也就是编译好的 当然你也可以自行去编译

我们在这个root目录下先创建一个trojan的文件夹

image-20250314143805158

image-20250314143826359

要运行trojan的话 也非常的简单 我们只需要输入./trojan-go,回车之后他就会尝试运行 但是他发现了我们没有配置文件显示我们启动失败了

创建配置文件config.json

{
    "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"
    }
}

your_awesome_password改成实际密码

“key”:私钥

“cert”: 公钥

所以说 我们现在必须得去申请这个证书才能启动trojan服务

远程地址就是认证失败的跳转地址image-20250314144148738

那我们可以在这里重新运行 当然你也可以加上这个config的这个参数

image-20250314144432138

如果你使用的是没有带参数的直接启动回车的话 他就会默认加载同目录下的这个config.json文件 也就是这个json文件

接下来就是申请证书了,首先做好域名解析,可以看到域名已经正确解析到了这个ip地址 也就是说 我们现在访问这个域名的话 就相当于访问了这个ip地址。

我们申请证书的话是使用这个acme的工具

image-20250314145151718

我们要用的话必须用这个完整的证书链 证书链的话它包含了中间CA机构的证书

安装证书:

acme.sh --installcert -d 替换为你的域名 --ecc  --key-file   /root/trojan/server.key   --fullchain-file /root/trojan/server.crt 

启动服务器

像现在的话 我们就已经成功搭建了trojan的服务 也就是这边的话 我们已经搭建好了

现在我们来配置客户端连接

image-20250314145515213

服务器的地址呢 我们可以填写这个证书的域名填到这里去 如果没有域名用自签的方式的话 这里就填写vps的ip地址

这个sni呢 就是我们之前说过的 那个头部里面的域名 就这个sni 如果你默认不填的话 他就是把这个服务器地址

注意

如果访问超时可以看看防火墙有没有放行!

如果我们没有域名的话怎么办呢,但是我们可以自己做CA,这种证书的话叫自签证书

#生成私钥:
openssl ecparam -genkey -name prime256v1 -out ca.key
#生成证书:
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt  -subj "/CN=bing.com"

客户端连接的时候,一种是我们把它添加到授信任的根证书颁发机构里面去 另一种的话 我们就是直接不验证

image-20250314150124857

这是因为我们是给bing签发的 所以说我们这个,sni这里要输入bing 我们再重新访问可以看到 现在就已经通了

跳过证书验证的话也会存在一些安全问题 比如被中间人攻击

我们就可以通过这条指令来让我们的trojan进行后台运行

nohup ./trojan-go > trojan.log 2>&1 &

#查看后台进程
ps -aux

vmess

vmess是一个比trojan出现更早、使用更广泛的协议 作为使用者,我们的重点是如何使用vmess,但是不讲vmess协议的通信流程又无法对这个协议的一些特性有深刻的认识,比如vmess节点为什么在电脑系统时间不对的时候无法链接?又比如为什么加密方式可以使用自动选择,按照之前讲ss节点说的,对称加密算法必须让两边都存在相同的密钥和加密方式才能正常解密。再比如额外ID(alterID)到底是个啥?还有承载vmess数据的传输协议与伪装的区别,本节的话就来带大家了解上述问题,并由浅入深实操搭建一个基于nginx实现web伪装的vmess节点。

裸奔的vmess在手机端效果特别好

你可能听到一些人说做WEB伪装是自欺欺人,GFW根本就不会进行探测,我不明白说这句话的人是不是开发GFW的,能够如此肯定不会进行探测。GFW是黑盒状态,没有人能完全了解他的工作机制,既然伪装成了https,我们要做的是尽可能表现得和正常的网站行为是一样的,而不是去猜测GFW会不会来探测你的伪装。

SSH连接工具(FinalShell):http://www.hostbuf.com/t/988.html v2ray官方安装脚本:https://github.com/v2fly/fhs-install-v2ray

bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

申请证书:

shell
#安装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:

json
{
  "inbounds": [
    {
      "port": 8388, 
      "protocol": "vmess",    
      "settings": {
        "clients": [
          {
            "id": "af41686b-cb85-494a-a554-eeaa1514bca7",  
            "alterId": 0
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",  
      "settings": {}
    }
  ]
}

vmess+tcp(ws)+tls:

json
{
  "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:

json
{
  "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设置:

shell
#安装nginx:
apt install nginx
#重新加载nginx配置:
systemctl reload nginx.service

nginx配置(替换http{}里的内容):

nginx
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;
}

视频教程:点击进入观看 上节我们详细介绍了vmess协议的通信流程以及搭建vmess+ws+tls+web的节点,达到了最大的伪装效果 但是上节我说过,vmess他没有类似trojan可以自带伪装,所以要给vmess协议做伪装的话还得单独搭建一个web服务器(nginx)来接收不是vmess流量的数据并对其进行分流实现伪装,而且vmess对于现在都套tls的情况下还是会对协议头部数据进行加密,并且还得和系统时间对应,显得有些冗余 针对这种情况,vless协议应运而生,他的出现就是为了解决vmess上述问题,不会进行额外加密也无需校对时间,可以看成是轻量化的vmess,这节我们就来讲讲vless协议,并使用xray内核来搭建vless节点。

shell
#关闭防火墙:
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

申请证书:

shell
 #安装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配置文件:

json
{
    "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"
        }
    ]
}

实操

裸奔的vmess

image-20250314150713012

所以说以后我们搭建vmess节能的话 全部都用AEAD的加密方式就行了 也就是说这个额外id给0就行了

开始搭建一个vmess+tcp组合的节点了:

首先用一键安装脚本:v2ray官方安装脚本:https://github.com/v2fly/fhs-install-v2ray

# bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

查看上述**vmess+tcp:**配置信息

/usr/local/etc/v2ray/config.json

还有这个额外id我们已经改成0了 也就是说 他协议头的加密方式使用AEAD

#开机自启
systemctl enable v2ray
systemctl start v2ray

这就是最基本的vmess节点搭建方式 这种组合方式和我们第三节讲ss协议的时候一样,传说的数据都是无规则的字节流,这样的话会引起防火墙的注意 ,所以我们引入tls对数据进行加密,这样传输的数据从表面看上去就和https流量一样,主要是修改了两边都加上了tls 然后加密方式的话改成了zero

这个none的话 他其实会对这个vmess的数据包进行一些校验,虽然说他不会对这一算数据进行加密 但是进行校验的话还是有点影响性能的,这个zero的话 他就是既不加密 也不进行校验 是这里面最快的一种 我们就选择这种就行了

怎么让它变成经典的vmess+ws+tls呢,非常的简单 我们只需要将传输协议这个tcp改成ws就可以了 这边也要改

这些传输协议和传输安全是v2ray的功能不是vmess的功能

vmess是最原始的状态就是vmess+tcp

协议的话还是原来的vmess协议,而具体通过什么协议去承载这个vmess的流量,我们是可以使用v2ray来进行自定义的,这也是v2ray强大的地方

image-20250314152232807

image-20250314152204331

image-20250314152332640

这里给了这么多协议 到底有什么用 到底哪个协议是最快的,这个的话就是为了满足不同人的需求和不同的网络环境 我们正常的话就选择tcp或者ws就可以了

可能会启动失败

image-20250314152615932

这时候在配置服务中删除user项

image-20250314152718090

说如果你想改成vmess+ws+tls的话,也是非常的简单 我们只需要把这个传输协议改成ws

image-20250314152820828

相应的服务器这边也要修改 把这个tcp改成ws就可以了

但是由于vmess没有像trojan那样认证失败 他就跳转到一个正常的网页来进行伪装的这么一个机制

vmess收到了一个正常的https请求的话 他是无法进行转发的

为了解决这种无法伪装的问题呢 我们必须搭建一个网站来进行伪装,也就是vmess+ws+tls+web的一个组合 搭建网站的工具有非常多 比如有nginx

image-20250314153112567

目前最稳定的就是vmess+ws+tls+web的这种组合方式

管理权限
sudo -i

vless

vless和trojan从功能上来讲是差不多的,协议本身的话都是不对数据内容进行加密的,而是交给了tls加密 可以把vless直接代入trojan 那节教程也是相通的,硬要说点区别的话 就是vless的协议头部数据没有trojan大

视频教程:点击进入观看 上节我们详细介绍了vmess协议的通信流程以及搭建vmess+ws+tls+web的节点,达到了最大的伪装效果 但是上节我说过,vmess他没有类似trojan可以自带伪装,所以要给vmess协议做伪装的话还得单独搭建一个web服务器(nginx)来接收不是vmess流量的数据并对其进行分流实现伪装,而且vmess对于现在都套tls的情况下还是会对协议头部数据进行加密,并且还得和系统时间对应,显得有些冗余 针对这种情况,vless协议应运而生,他的出现就是为了解决vmess上述问题,不会进行额外加密也无需校对时间,可以看成是轻量化的vmess,这节我们就来讲讲vless协议,并使用xray内核来搭建vless节点。

shell
#关闭防火墙:
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

申请证书:

shell
 #安装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/server.key   --fullchain-file /usr/local/etc/server.crt 

xray配置文件:

json
{
    "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"
        }
    ]
}

这是节点搭建系列的最后一节,给大家讲讲不花钱的免费提升节点速度的方案,主要给大家介绍套用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/

shell
# 安装nginx:
apt install nginx
# 配置nginx:
vim /etc/nginx/nginx.conf
# 重新加载nginx配置:
systemctl reload nginx.service

nginx配置:

nginx
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;
   }
 }
}

拥塞控制:

shell
#查询当前使用的 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

实操

image-20250314153715829

本来我想使用X-UI来进行搭建演示的,但是发现并不好用 很多参数的话不能自定义 导致无法正常的回落,所以这里的话还是直接使用Xray内核,然后手动修改配置文件的方式来进行搭建,至于X-UI的话 它是一个web界面,可以通过图形化界面的方式去操作Xray的config.json配置文件

对比我们直接手动修改config配置文件这种方式 然后上传的服务器,x-ui可以说是非常直观的 对小白来说非常的友好

它会使用tls来对数据进行加密,关于tls是怎么进行加密的,我们在讲trojan那一节的时候已经详细讲过了,这个xtls的话 他就只对前面这一段数据进行加密,所以我们这一次的话就换一个Xray里面独有的xtls来对这一串数据进行加密,这个xtls就不会像tls一样对整个数据进行加密,这个xtls的话 他就只对前面这一段数据进行加密,因为后面已经是加密过的数据 所以说他就不再进行加密,image-20250314155506968

这样就大大的提高了性能

但是 有一点需要注明的是xtls它使用的tls版本是tls1.3,而我们这一串数据加密的时候可能是tls1.2

image-20250314155608142

这种方式的话虽然说非常的巧妙,但是它可能会在tls1.3的数据包里面包含tls1.2的流量特征 而且事实证明 它确实已经存在了一些可以用来被探测的特征

json
{
  "inbounds": [
    {
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "UUID-替换为你的UUID",
            "flow": "xtls-rprx-vision"  // 如果启用 XTLS Vision,使用 flow,否者移除这行
          }
        ],
        "decryption": "none",
        "fallbacks": [
          {
            "path": "/vless",
            "dest": 10000,
            "xver": 1
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/path/to/fullchain.pem",
              "keyFile": "/path/to/privkey.pem"
            }
          ]
        }
      }
    },
    {
      "port": 10000,
      "listen": "127.0.0.1",
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "UUID-替换为你的UUID"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/vless"
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

Hysteria2

https://github.com/apernet/hysteria

一、更新 VPS 系统,安装组件

apt update -y

apt install curl sudo -y

二、Hysteria 2 一键安装脚本

wget -N --no-check-certificate https://raw.githubusercontent.com/flame1ce/hysteria2-install/main/hysteria2-install-main/hy2/hysteria.sh && bash hysteria.sh

三、Hysteria 服务相关命令

systemctl start hysteria-server.service  # 启动 hysteria 服务

systemctl enable hysteria-server.service  # 设置 hysteria 服务 开机自启

systemctl restart hysteria-server.service # 重启 hysteria 服务

systemctl stop hysteria-server.service   # 停止 hysteria 服务

systemctl status hysteria-server.service  # 查看 hysteria 服务 状态

四、Windows 建议使用 V2rayN(下载)

V2rayN(下载)

五、Hysterra2 YouTube视频教程

github相关链接

协议作者

https://github.com/seagullz4/hysteria2

分享作者

https://github.com/uyez/Hysteria2

多协议脚本

https://github.com/mack-a/v2ray-agent

仅仅是 Hysteria2 的面板

https://github.com/jonssonyan/h-ui

image-20250426004227619

接下来选择证书:

image-20250426004354424

我们有域名就选2

算了,好像有点问题,还是选1吧

image-20250426005014788

image-20250426005023862

下载两个文件,一个是json后缀,一个分享链接hysteria2://a2b5aa6a@149.28.237.158:55145/?insecure=1&sni=www.bing.com#Hysteria2-misaka

image-20250426005312945

分享链接可以直接在v2ray-NG中使用

image-20250426005455584

换用最新的核心就能一样速度了

image-20250426005943447

操作:

下载hysteria最新核心

https://github.com/apernet/hysteria/releases

放置在v2rayNG相应核心位置:

image-20250426010101904

不良林教学

v2rayN 下载:https://github.com/2dust/v2rayN/releases/latest Hysteria 2下载:https://github.com/apernet/hysteria/releases Hysteria 2文档:https://v2.hysteria.network/zh/

sing-box文档:https://sing-box.sagernet.org/zh/ Android客户端(SFA):https://install.appcenter.ms/users/nekohasekai/apps/sfa/distribution_groups/publictest IOS客户端(TestFlight):https://testflight.apple.com/join/AcqO44FH (1.5.0 beta版支持Hysteria 2) IOS客户端(AppStore):https://apps.apple.com/us/app/sing-box/id6451272673 (暂不支持Hysteria 2)

服务器相关指令

bash
#一键安装Hysteria2
bash <(curl -fsSL https://get.hy2.sh/)

#生成自签证书
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj "/CN=bing.com" -days 36500 && sudo chown hysteria /etc/hysteria/server.key && sudo chown hysteria /etc/hysteria/server.crt

#启动Hysteria2
systemctl start hysteria-server.service
#重启Hysteria2
systemctl restart hysteria-server.service
#查看Hysteria2状态
systemctl status hysteria-server.service
#停止Hysteria2
systemctl stop hysteria-server.service
#设置开机自启
systemctl enable hysteria-server.service
#查看日志
journalctl -u hysteria-server.service

服务器配置文件

shell
cat << EOF > /etc/hysteria/config.yaml
listen: :443 #监听端口

#使用CA证书
#acme:
#  domains:
#    - a.com #你的域名,需要先解析到服务器ip
#  email: test@sharklasers.com

#使用自签证书
#tls:
#  cert: /etc/hysteria/server.crt
#  key: /etc/hysteria/server.key

auth:
  type: password
  password: 123456 #设置认证密码
  
masquerade:
  type: proxy
  proxy:
    url: https://bing.com #伪装网址
    rewriteHost: true
EOF

安装

image-20250426011147994

编辑配置文件/etc/hysteria/config.yaml

image-20250426011636256

启动服务(居然一下就成功了,爱你)

systemctl start hysteria-server.service

image-20250426011755956

只有日志出现server up and running才算启动成功

客户端配置文件

yaml
server: ip:443
auth: 123456

bandwidth:
  up: 20 mbps
  down: 100 mbps
  
tls:
  sni: a.com
  insecure: false #使用自签时需要改成true

socks5:
  listen: 127.0.0.1:1080
http:
  listen: 127.0.0.1:8080

客户端教程

按照前面说的配置v2rayNG然后配置好hysteria核心

server: 	服务器ip:443
auth: 123456	密码要一样

带宽部分,服务端可以不写就是按照客户端配置,要注意服务器上传就是客户端下载带宽,两者同时配置,协商的时候就会取小值作为最终
想流畅看4k视频50mbps足够了,过大会被怀疑被攻击而被限制
bandwidth:
  up: 20 mbps
  down: 100 mbps
  
tls:
  sni: a.com		我用的是ca证书,写自己域名,自签证书就是这里改为bing,com,下面改为true
  insecure: false #使用自签时需要改成true

下面就是socks端口和http端口
socks5:
  listen: 127.0.0.1:1080
http:
  listen: 127.0.0.1:8080

新建一个文本文件,粘贴配置保存

v2ray添加自定义配置

image-20250426012852817

随便写个别名,选择刚创建的文件

image-20250426013028659

内核选择hysteria,然后填写我们配置的socks端口,官方的没法的分流,我们这里填了之后就可以利用v2rayn做分流了

其效果相当于我们的数据先发给v2rayN的10808端口,v2rayN进行分流配置,需要代理的流量就发给hysteria的1080端口

配置好之后的启动日志:

image-20250426015904734

对于速度方面,本机网络:

Snipaste_2025-04-26_02-15-09

服务器:

Snipaste_2025-04-26_02-12-37

所以我配置的是

bandwidth:
  up: 20 mbps
  down: 100 mbps

速度快的飞起:

下载速度是29mbps(一开始一下到八十多,之后被限制在29mbps了)

上传速度测试不出。因为vps厂商限制

还真不如老实填写呢:

image-20250426014301911

image-20250426023932508

测速:https://speedtest.net

正常vmess

image-20250426022602313

测试了一会,感觉节点被封了,这就没意思了呢

又没事了

sing-box配置文件(Android/IOS)

json
{
  "dns": {
    "servers": [
      {
        "tag": "cf",
        "address": "https://1.1.1.1/dns-query"
      },
      {
        "tag": "local",
        "address": "223.5.5.5",
        "detour": "direct"
      },
      {
        "tag": "block",
        "address": "rcode://success"
      }
    ],
    "rules": [
      {
        "geosite": "category-ads-all",
        "server": "block",
        "disable_cache": true
      },
      {
        "outbound": "any",
        "server": "local"
      },
      {
        "geosite": "cn",
        "server": "local"
      }
    ],
    "strategy": "ipv4_only"
  },
  "inbounds": [
    {
      "type": "tun",
      "inet4_address": "172.19.0.1/30",
      "auto_route": true,
      "strict_route": false,
      "sniff": true
    }
  ],
  "outbounds": [
    {
      "type": "hysteria2",
      "tag": "proxy",
      "server": "ip",
      "server_port": 443,
      "up_mbps": 20,
      "down_mbps": 100,
      "password": "123456",
      "tls": {
        "enabled": true,
        "server_name": "a.com",
        "insecure": false
      }
    },
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "block",
      "tag": "block"
    },
    {
      "type": "dns",
      "tag": "dns-out"
    }
  ],
  "route": {
    "rules": [
      {
        "protocol": "dns",
        "outbound": "dns-out"
      },
      {
        "geosite": "cn",
        "geoip": [
          "private",
          "cn"
        ],
        "outbound": "direct"
      },
      {
        "geosite": "category-ads-all",
        "outbound": "block"
      }
    ],
    "auto_detect_interface": true
  }
}

xhttp

传输协议

https://www.youtube.com/watch?v=GB_SHmqotzQ

xhttp是一种新的方式过CDN,传统的ws也没事。

关键是这种新方式有很多灵活的特点,上下行分离

开发简述:2024 年中,@mmmray @ll11l1lIllIl1lll 等人基于 @RPRX 所述的“分包上行、流式下行”原理及实现细节开发出了 SplitHTTP,首次实现了不牺牲下行效率的同时穿透绝大多数支持 HTTP 的中间盒,并首次大规模实现了 QUIC H3 过 CDN,开启了一个崭新的时代,浏览器转发 Broswer Dialer 支持、减少特征的 header padding、控制复用的 XMUX、解锁 REALITY 也相继被安排上。随后 @RPRX 接手开发,实现了真正的上下行分离并更名为 XHTTP,比如上下行可以分别是 IPv6 CDN H3、IPv4 REALITY H2(源 IP 都可以不同),这下又开启了一个崭新的时代,紧接着开发了不牺牲上行效率的流式上行 stream-up 模式、可以分享全部细节配置的 extra 方案,并给 stream-up 模式加上了默认的 gRPC header 伪装,实现了 H2 流式上行过 CDN,取代了传统的 gRPC 传输层,当初发现这也行就不会有它了,最后将 HTTP 传输层作为 stream-one 模式并入 XHTTP,使其也拥有了 header padding、XMUX、gRPC header 伪装等特性。至此,我们有了完全体 XHTTP:各种姿势穿透中间盒、上下行分离、丝滑的 XMUX 等应有尽有,XHTTP 全场景通吃的时代正式到来。

上下行分离

压轴登场的当然是又一个崭新的时代:上下行分离。 我们大概知道,现在 GFW 针对 TLS in TLS 等流量特征的检测是基于单条连接,那么如果我们把上下行拆分到不同的审查系统,比如上行跑 IPv4 的 TCP,下行跑 IPv6 的 UDP,GFW 就会一时反应不过来。而由于 XHTTP 服务端仅基于 path 中随机生成的 UUID 关联上下行,packet-up 和 stream-up 天生就具有真正的上下行分离能力,且由于 XHTTP 可以穿透各种 CDN、可以搭配 REALITY 等,可选姿势也无限多。

需要在CDN开启 gRpc即可开启流式上传

如果节点ip不是80,那就需要设置Origin Rules,设置端口重写

两个底层逻辑

正如 REALITY 可以伪装成别人的网站,反审查的根本逻辑就是增加审查者执行封锁时的“附带伤害”,使审查者不敢贸然封锁,我当年看好 TLS 以及 TLS 上流量的时序、长度特征混淆也是同理。多年经验告诉我们 GFW 不会永久封锁大型 CDN 的整个 IP,否则会波及太多常规网站,那么对于 XHTTP,我们最初的目标就是把它隐藏在众多各种各样的 CDN 后面。然而 CDN 为了防止源站遭受攻击,除了有特殊支持的 WS、gRPC 外,一般会缓存完整个 HTTP 请求再发给源站,许多 HTTP 中间盒默认也是这样的行为。据此,Tor 的 Meek 协议把往返流量包装为了一个个 HTTP 请求以穿透这些中间盒,但速率惨不忍睹,因为它没有采用 XHTTP 的“流式下行”。什么是“流式下行”呢?想象一下你正在一个网站上下载一个很大的文件,CDN 没击中缓存于是回源拿,但显然它不太好像上行一样先缓存完整个文件让你干等,而是源站发来多少数据,CDN 就即时转发给你,这就是 XHTTP “流式下行”的基础,也保证了最重要的下行速率可以拉满。至于上行,出于兼容性考虑,XHTTP 首先实现的是“分包上行”,即把上行流量包装为一个个 POST 请求,它的效率显然会打折扣,但好在对于一般的代理需求而言上行流量极少。此后我加了“流式上行”,并且我们发现加上 gRPC header 伪装后还能 H2 流式上行穿透 CF,而我几轮优化”分包上行“后速率甚至直追”流式上行“。

顺便谈一下最近又比较火的套 CDN 是否属于“滥用”的问题:显然不支持流式上行的 CDN 其本意并非让你用来搭建代理服务,但我们为了对抗 GFW,不断探索、开发、利用尽可能多的新路是合理且必要的,是不得已而为之,且增加审查者的“附带伤害”就是要求我们混入“正常”服务,这也是不可避免的。举个最简单的例子:哪天 IP 白名单了而 CDN 的 IP 在里面,你用还是不用?反审查这一领域并不适用现实世界的一些规则,这么简单的道理却一直都有人想不明白。 如果还是没想通,那像 WebSocket 这样的传输层现在仅为了套 CDN 而存在,作为开发者可以删掉它,作为用户可以建议开发者删掉它,以自身的实际行动来证明“滥用 CDN”并不只是为了眼红攻击 Xray 这一为满足某些病态心理的日经无聊行为而找出的又一个借口罢了,与此同时身体却很诚实,与此同时不难窥见,有些人的虚伪本质已经暴露无遗。

realty

传输加密协议,就是为了解决TLS可能的不安全性。

若用 REALITY 取代 TLS,可消除服务端 TLS 指纹特征,仍有前向保密性等,且证书链攻击无效,安全性超越常规 TLS 可以指向别人的网站,无需自己买域名、配置 TLS 服务端,更方便,实现向中间人呈现指定 SNI 的全程真实 TLS

通常代理用途,目标网站最低标准:国外网站,支持 TLSv1.3 与 H2,域名非跳转用(主域名可能被用于跳转到 www) 加分项:IP 相近(更像,且延迟低),Server Hello 后的握手消息一起加密(如 dl.google.com),有 OCSP Stapling 配置加分项:禁回国流量,TCP/80、UDP/443 也转发(REALITY 对外表现即为端口转发,目标 IP 冷门或许更好)

REALITY 也可以搭配 XTLS 以外的代理协议使用,但不建议这样做,因为它们存在明显且已被针对的 TLS in TLS 特征 REALITY 的下一个主要目标是“预先构建模式”,即提前采集目标网站特征,XTLS 的下一个主要目标是 0-RTT

REALITY 客户端应当收到由“临时认证密钥”签发的“临时可信证书”,但以下三种情况会收到目标网站的真证书:

  1. REALITY 服务端拒绝了客户端的 Client Hello,流量被导入目标网站
  2. 客户端的 Client Hello 被中间人重定向至目标网站
  3. 中间人攻击,可能是目标网站帮忙,也可能是证书链攻击

REALITY 客户端可以完美区分临时可信证书、真证书、无效证书,并决定下一步动作:

  1. 收到临时可信证书时,连接可用,一切如常
  2. 收到真证书时,进入爬虫模式
  3. 收到无效证书时,TLS alert,断开连接

目标网站:

  • 要求支持 TLS 1.3 ,H2 连接 (不明白 请看视频 或是博客下面文章)

如何寻找 TLS1.3/H2 的网站

目标网站最低标准:国外网站,支持 TLSv1.3 与 H2,域名非跳转用

加分项:IP 相近(更像,且延迟低),Server Hello 后的握手消息一起加密(如 dl.google.com),有 OCSP Stapling

配置加分项:禁回国流量,TCP/80、UDP/443 也转发(REALITY 对外表现即为端口转发,目标 IP 冷门或许更好)

可以使用这个网站:点击访问 ,来寻找 TLS1.3 / X25519 / H2 的指向站点,更多注意事项,请看 本期视频

也可以使用这个网站:点击访问 ,来查询目标网站是否支持 OCSP Stapling加分项而已,不支持也没有太大关系

注意:大家代理出现问题,第一个需要检查的是目标网站是否存在问题!!!!!!

开启 BBR 加速

以下 BBR 加速,请自选一种

1、系统自带 BBR 加速
echo "net.core.default_qdisc=fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.confsysctl -p
2、BBRplus 加速
wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh

后记

有了 X-ui 面板,可视化的搭建 Reality ,也是极为方便,而且这种协议也是目前来说比较安全的代理方式之一,不需要自己购买的域名,可以有效的去除普通 TLS 代理过程中的一些特征。

但是互联网没有绝对,无非也就是矛与盾之间的较量,只是在目前来说不容易被封 IP 和端口。

若是你问我,是不是推荐所有人都来使用它,其实我不推荐,这只是一种方法,若是你自创的一种方式能长期稳定的使用,那么我不推荐你进行更换,就和 XTLS 官方所说:“把所有的鸡蛋都放在一个篮子里是十分危险的,我们鼓励大家善用每个工具的特性,分散特征”。

比如:NaiveProxy、魔改的 ShadowsocksMITM 代理 等等。我个人觉得,越少冷门越好。

原理

reality原理就是我们把vps伪装成CDN

image-20250512235530567

我们访问谷歌,先把请求给伪装成CDN的vps

image-20250512235629894

vps不光访问了谷歌网站,还把Apple.com的TLS证书偷过来了,当数据包传回时,会把苹果网站的TLS证书给防火墙看到

正是这种偷证书的方式,特别能抗封锁

v2ray配置

json
{
    "routing": {
        "domainStrategy": "IPIfNonMatch",
        "rules": [
            {
                "type": "field",
                "port": "443",
                "network": "udp",
                "outboundTag": "block"
            },
            {
                "type": "field",
                "ip": [
                    "geoip:cn",
                    "geoip:private"
                ],
                "outboundTag": "block"
            }
        ]
    },
    "inbounds": [
        {
            "listen": "0.0.0.0",
            "port": 443,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "", // run `xray uuid` to generate
                        "flow": "xtls-rprx-vision"
                    }
                ],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "tcp",
                "security": "reality",
                "realitySettings": {
                    "show": false,
                    "dest": "8003",
                    "xver": 1,
                    "serverNames": [
                        ""  // server name
                    ],
                    "privateKey": "",  // run `xray x25519` to generate
                    "shortIds": [
                        ""  // 0 to f, length is a multiple of 2, maximum length is 16
                    ]
                }
            },
            "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls",
                    "quic"
                ]
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom",
            "tag": "direct"
        },
        {
            "protocol": "blackhole",
            "tag": "block"
        }
    ],
    "policy": {
        "levels": {
            "0": {
                "handshake": 2,
                "connIdle": 120
            }
        }
    }
}

Vision流控

wireguard

这是一种成熟的应用

WireGuard®是一款极其简洁却又快速的现代 VPN,采用先进加密技术。它的目标是比 IPsec更快更简单、更精简、更实用,同时避免繁琐的复杂操作。它的性能远高于 OpenVPN。WireGuard 是一款通用 VPN,可在嵌入式接口和超级计算机上运行,适用于多种不同场景。它最初基于 Linux 内核发布,现已支持跨平台(Windows、macOS、BSD、iOS 和 Android)并可广泛部署。目前,它正处于深度开发阶段,但它可能已经被认为是业内最安全、最易用、最简洁的 VPN 解决方案。

Wireguard官方网站:https://www.wireguard.com/install/

下载脚本:wget -O wireguard.sh https://get.vpnsetup.net/wg

image-20250425233044910

安装命令:sudo bash wireguard.sh

其中会配置服务器域名,没有就选N

image-20250425233531672

启动之后输出:

image-20250425233610305

下载配置文件,然后打开wireguard官网下载windows版本

image-20250425233826867

导入配置文件

image-20250425233908761

这样就完成了!

事实上被封锁了,没有一点用

outline

Outline: https://getoutline.org

image-20250425235054367

这个软件需要下载两个使用

image-20250425235350684

打开manager

image-20250425235537680

按照命令使用

安装很慢,因为居然要下载Docker!

image-20250425235701868

image-20250425235748480

填完配置之后点击分享:

image-20250425235958526

image-20250426000020627

用的居然是ss协议????

复制访问密钥,在客户端使用

image-20250426000153498

一键开启!

这个是可以使用的!

image-20250426000333967

不过评论区说几天就封,呜呜,还是别用了

一键安装

233BOY脚本:https://233boy.com/

全新网站启用,文章待转发过来

介绍

又一个不存在的网站

烦死了

我很懒,写文章是真的烦,复制粘贴我文章的抄袭狗没鸡鸡!

sing-box 脚本 (推荐)

最好用的 sing-box 一键安装脚本

Xray 脚本

最好用的 Xray 一键安装脚本

V2Ray 脚本

最好用的 V2Ray 一键安装脚本

这个安装完之后:

image-20250426000749323

直接获得链接了

面板

  • Web Panel

    警告:请勿使用 3X-UI 等纯 HTTP 面板,因为它们被认为受伊朗 GFW 贿赂,默认支持纯 HTTP,且拒绝更改 ( #3884 (评论) ),这在过去几年中已导致众多用户的数据安全面临风险。如果您已在使用 3X-UI,请切换到以下面板,这些面板已验证仅支持 HTTPS 和 SSH 端口转发:

但是从star数量上来看,3x-uix-ui都远超上述

HiddifyMarzban在上述中star较多,可以试试

Marzban

Marzban 是一个用户友好、功能丰富且可靠的工具。它让您可以为用户创建不同的代理,无需进行任何复杂的配置。通过其内置的 Web 界面,您可以监视、修改和限制用户。

https://github.com/Gozargah/Marzban

Hiddify

Hiddify-Manager 是一个强大而专业的反网络审查工具箱,Hiddify-Manager 面板支持多用户,安装简单,支持超过 20 种协议,包括 RealityTelegram 代理 以绕过网络审查和封锁。它针对中国俄罗斯伊朗的网络审查和封锁进行了规避优化,并得到了 Xray 的推荐。总的来说,它是 X-UI 面板的一个绝佳替代品。

官网:https://hiddify.com/

github:https://github.com/hiddify/Hiddify-Manager

x-ui

x-ui已经很久没有更新了,所以不推荐使用!

image-20250506205745272

https://github.com/vaxilu/x-ui

支持多协议多用户的 xray 面板

bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)

防止明文访问:

通过ssh配置隧道,或使用https方式访问

使用ssh配置端口转发,使本机访问远程端口

image-20250506210014960

ssh -L [本地绑定地址:]本地端口:目标地址:目标端口 用户名@SSH服务器
当你使用SSH密钥来连接远程服务器时,使用-i参数指定
-i /path/to/key.pem

只想做端口转发,不需要进入vps,在后面加上-N参数

但是每次登录都要创建ssh隧道,并且默认配置下,面板依旧以http的方式,在公网上暴露

所以应该配置tls证书

如果没有域名,可以在zerossl上申请ip证书

使用docker安装

此 docker 教程与 docker 镜像由Chasing66提供

  1. 安装docker
curl -fsSL https://get.docker.com | sh
  1. 安装x-ui
mkdir x-ui && cd x-ui
docker run -itd --network=host \
    -v $PWD/db/:/etc/x-ui/ \
    -v $PWD/cert/:/root/cert/ \
    --name x-ui --restart=unless-stopped \
    enwaiax/x-ui:latest

Build 自己的镜像

docker build -t x-ui .

3x-ui

一个更好的面板 • 基于Xray Core构建

https://github.com/MHSanaei/3x-ui

bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/refs/tags/v2.5.8/install.sh)

安装之后:

image-20250506213101796

  1. 安装Docker:

    bash <(curl -sSL https://get.docker.com)
  2. 克隆仓库:

    git clone https://github.com/MHSanaei/3x-ui.git
    cd 3x-ui
  3. 运行服务:

    docker compose up -d

    docker run -itd \
       -e XRAY_VMESS_AEAD_FORCED=false \
       -v $PWD/db/:/etc/x-ui/ \
       -v $PWD/cert/:/root/cert/ \
       --network=host \
       --restart=unless-stopped \
       --name 3x-ui \
       ghcr.io/mhsanaei/3x-ui:latest

更新至最新版本

 cd 3x-ui
 docker compose down
 docker compose pull 3x-ui
 docker compose up -d

从Docker中删除3x-ui

 docker stop 3x-ui
 docker rm 3x-ui
 cd --
 rm -r 3x-ui

S-UI

安装S-UI

先进的 Web 面板 • 基于 SagerNet/Sing-Box 构建

官方安装

安装并升级到最新版本

bash <(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/master/install.sh)

不良林给的:

VERSION=1.2.2 && bash <(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/$VERSION/install.sh) $VERSION

手动安装

  1. 从 GitHub 获取基于您的操作系统/架构的最新版本的 S-UI:https://github.com/alireza0/s-ui/releases/latest
  2. 可选获取最新版本的s-ui.sh https://raw.githubusercontent.com/alireza0/s-ui/master/s-ui.sh
  3. 可选复制s-ui.sh到 /usr/bin/ 并运行chmod +x /usr/bin/s-ui。
  4. 将 s-ui tar.gz 文件解压到您选择的目录,然后导航到解压 tar.gz 文件的目录。
  5. 将 *.service 文件复制到 /etc/systemd/system/ 并运行systemctl daemon-reload。
  6. 启用自动启动并使用启动 S-UI 服务systemctl enable s-ui —now
  7. 使用以下方式启动单盒服务systemctl enable sing-box —now

卸载 S-UI

sudo -i

systemctl disable s-ui  --now

rm -f /etc/systemd/system/sing-box.service
systemctl daemon-reload

rm -fr /usr/local/s-ui
rm /usr/bin/s-ui

H-UI

Just the panel for Hysteria2 / 仅仅是 Hysteria2 的面板

其他

套上CDN之后,默认分配的CDN是离自己最近的,但是那个CDN未必能连接到海外节点,因此需要切换CDNip

例如188.114.99.45

或者使用优选ip工具(CloudflareST.exe),寻找较远的CDN

使用cf搭建节点

缺点:无法访问cf托管的网站

自动拉取BPB面板

https://www.youtube.com/watch?v=3eaxPvmQUQ0

BPB面板默认多有个porxyip:

image-20250507144043622

image-20250507145820254

image-20250507151011288

免费搭建Cloudflare节点,实现自动更新与高速访问;手把手部署Cloudflare Workers,永久可用免维护;结合GitHub Actions同步更新,从零开始快速搭建自动部署系统!

博客教程:https://joeyblog.net/%e5%85%8d%e8%b4%b9%e6%90%ad%e5%bb%bacloudflare%e8%8a%82%e7%82%b9%ef%bc%8c%e5%ae%9e%e7%8e%b0%e8%87%aa%e5%8a%a8%e6%9b%b4%e6%96%b0%e4%b8%8e%e9%ab%98%e9%80%9f%e8%ae%bf%e9%97%ae%ef%bc%9b%e6%89%8b%e6%8a%8a.html

自动拉取:https://github.com/maluyaotop/wk-Auto-update

原理:https://github.com/bia-pain-bache/BPB-Worker-Panel?tab=readme-ov-file

甬哥

https://www.youtube.com/watch?v=Rf2sKryDym4

Cloudflare免费代理节点详细教程 | 基础原理 搭建实操 疑难问题 | 绕过TLS阻断 | 自定义域名 | 优选IP | 解锁ChatGPT | 免费VPN | 无限流量

项目地址:https://github.com/yonggekkk/Cloudflare_vless_trojan

  • 无自定义域名带TLS节点,只能通过代理更新订阅
  • 无自定义域名带TLS节点,只能开启分片功能能使用

带了自定义域名之后就不会被阻断了

加速使用优选ip,这个项目给了ip位置分类:https://github.com/yonggekkk/Cloudflare_vless_trojan/blob/main/CF%E4%BC%98%E9%80%89%E5%AE%98%E6%96%B9IP(%E6%97%A0%E4%BA%A4%E4%BA%92%E4%B8%89%E5%9C%B0%E5%8C%BA%E7%94%B5%E8%84%91%E7%89%88).zip

proxyip字段决定了托管到cloudflare网站怎么访问,也就是加入到Cloudflare的CDN网络的,而Cloudflare的Workers和Pages,它有一个缺点,那就是它可以访问Cloudflare之外的网页,但无法访问属于CDN网络里面的网页,这是官方给它的限制,这个时候就需要一个ProxyIP来充当中转,来帮你访问Cloudflare网络里面的网页

proxyip 源码
xjp.ygkkk.dpdns.org:60360

image-20250507144514853

image-20250507215148816

甬哥侃侃侃ygkkk

https://ygkkk.blogspot.com/2023/07/cfworkers-vless.html

image-20250507232851590

cf托管网站证书:

image-20250507235750466

基本这样的全是cf托管的网站

使用cf家的节点,ip会在全球跳动!不会稳定的,而且是以104.28.xx.xxipv42a09::开头的ipv6地址,其实就是wrap提供的地址,容易被封禁

访问cf代理的网站,显示的就是反代ip,这种ip就是代理了cfip,因此他能访问cf托管的网站

但是反代ip最大的特点就是容易失效,不稳定

proxyIPS必须是反代ip

出现跳ip本质原因就是你自己部署的worker或者pages被部署到了全球

例如伪装域名liao504733618.liao504733618.workers.dev实际上对于了多个ip,下载东西的时候容易中断(之前在google商店下载总是中断),部分网站不了(x.com以前进得去,现在进不去了!)

image-20250508020210809

image-20250508020246129

效果持久

缺点:节点速度一般

image-20250508020425591

image-20250508020515022

image-20250508020549361

image-20250508020605939

image-20250508020701091

image-20250508020727296

image-20250508020743645

image-20250508020832714

image-20250508020906102

image-20250508021232145

https://www.youtube.com/watch?v=QOnMVULADko

全网独家真正的”固定IP”,解决twitch、chatgpt客户端报错问题;一键自建反代IP与ProxyIP;揭秘你被他人偷扫IP的风险

使用的就是warp双线固定,套上全局warp

image-20250508024138185

复杂节点

image-20250513183326649

最近偶然通过 Youtube 的推荐视频,发现 Xray 又出了新玩意儿:REALITY

说实话,我目前使用的架构还是 20 年那一套,基于 Docker + Watchtower 实现全自动更新,已经使用 2 年没变了,一直没啥问题,只是 4 月上去支持了下 WARP 用于访问 ChatGPT。

上次关注 Xray 的消息都还是 21 年吃分叉瓜的时候了。于是乎我跑去 Xray 项目上了解下最新的进展,可惜官网介绍不多,只能从各种 issues 中找到一些蛛丝马迹。

评估了下迁移成本后,我从 V2Ray 迁移到了 Xray,整体的架构没变,还是 Nginx 分流那套,只是网络工具变了,顺带加了一些新的协议(VLESS、Vision、gRPC)

Xray 是什么?与 V2Ray 有什么关系?

本是同根生,起源于同一个项目,后面分叉迭代了。详细请参考这篇文章 🍉

REALITY、Vision 诞生的原因是什么?

以 Trojan 为代表的 TLS 通信工具,存在 TLS in TLS 问题,「加密套娃」使得它可能具有某些统计学特征,详细分析请看这篇讨论里面的「生死 5 包」章节。

RPRX 因此还专门起了 Trojan-killer 项目,源码大家自己解读,我看了下整体的思路就是验证「加密套娃」。

XTLS、Vision、REALITY 是什么?工作原理是什么?

XTLS 是早期解决 TLS in TLS 的思路,实现上需要修改 TLS/uTLS 官方库,所以在可维护性上不被看好,但是思路验证是没问题的。

Vision 算是 XTLS 的稳定版,也是为了解决 TLS in TLS 问题,现在称它为流控,使用 xtls-rprx-vision 标识。

XTLS 和 Vision 的工作原理之前有介绍过 👉 V2Ray、Trojan、XRay

REALITY 是为了进一步消除服务端 TLS 指纹特征,解决 SNI 封锁等问题,工作原理分布在各个 issues 里面,结合项目代码我简单分析了下 REALITY 的工作原理。

整体上是依靠伪装来骗过检查者,找正规大网站借用握手包特征来伪装,然后里面加一些自己的鉴权东西,大体流程是:

  1. Server 端请求 Apple、Bing 等正常网站获取 TLS 握手期间的 Server Hello 包
  2. 拿着这个正常的握手包和 Client 交互,当然里面填充了一些 Xray 自己构造的校验内容
  3. 因为包内容被修改,所以 Client 正常无法直接处理这个 Hello 包的,需要做一些校验处理,通过后才能继续通信

整个过程单从特征上来看,都像是在和 Apple、Bing 等大网站在交互,也无法通过证书链等方式攻击,因为只是批了大网站的皮,内核其实是自己校验算法。

TLS 握手流程之前也介绍过 👉 Trojan 共用 443 端口方案的开头就是。

总的来说 REALITY 的设计思路确实比较清奇!

相关的 GitHub Issues:

获取伪装包

通信校验

Client MITM

REALITY 可能的缺点是什么?

首先是配套工具的支持,任何东西要易用、易上手才能推广开,目前支持的工具还较少。

其次是协议的打磨,目前看思路说得通,但伪装行为本身是否会带来新的特征,这个无法证伪,还需要通过时间再验证。

然后是性能,交互上多了一次 Server 端去 Apple 等网站拿握手包的过程,本身就是一次网络开销,这块还可以优化(最近的消息说是准备加缓存)。

最后是有个 issues 提到的 DNS 问题,本质上是流量分布问题。虽然交互伪装成了大网站的流量,但是 IP 是大家都能看到的,所以从统计上能看到:某个 IP 突然有了不少 Apple、Bing 等域名流量 😂,这本身是否也是一种特征?这个同样无法证伪,还需要通过时间再验证。

毕竟是个新鲜事务,我觉得可以再持续观察下,总是需要创新才能带来新的可能性 👏。

我的选择

整体的选择标准还是:安全性 > 稳定性 > 速度。

最后工具的选择是:

  1. V2Ray => Xray
  2. ClashX => Clash.Meta(Client 配置兼容)

协议的选择是:

  1. VLESS+Vision+TLS(默认,本次新增)
  2. Trojan+TCP+TLS(之前保留)
  3. VLESS+gRPC+TLS(本次新增)
  4. VMess+WebSocket+TLS+CDN(应急,之前保留)

说实话因为我不用机场,所以一直用 Trojan 都没出过问题,即使在各种敏感时期。

我觉得「网络邻居」带来的风险比各种工具协议本身的特征风险会更大一些 🙈

这次切换主要是体验下新工具以及解决潜在风险:

  1. TLS in TLS 特征:使用 Vision,也就是 xtls-rprx-vision
  2. Client TLS 指纹:ClashX 不支持 Vision(VLESS),因此迁移到了 Clash.Meta,自带了 client-fingerprint
  3. Server TLS 特征:REALITY 暂时不用,后面如果要用,我当前架构的迁移成本也很低

对比我 20 年那一套方案,新的方案没有大的变化,还是基于 Nginx 的 SNI 分流架构,容器间的通信换成了 Unix Socket,充分利用了 Fallback 实现多协议共存。

Nginx 层统一管理收敛流量入口,整个主机只用开启 443/80 和 SSH 端口即可,同时各个模块都做了伪装,「非标请求」看到的都是正常的页面,而且 WS + CDN 限定了白名单访问。只有 Client 直接访问的服务才需要处理 TLS,内部统一是 h1/h2c cleartext 协议,尽量减少 TLS 开销。

各种组合可以参考 lxhao61/integrated-examples 项目,和我目前的比较匹配,性能优化每人不同,自己调整即可。

速度测试结果出乎意料。VLESS+gRPC+TLS 最拉垮我是没想到的,Multi 和 Signle 模式下速度差不多,可能是链路复用的问题 🤔️。VLESS+Vision+TLS 和 Trojan+TCP+TLS 差别不大,意料之中吧,测速场景下看不出来优势,VMess+WebSocket+TLS+CDN 中规中矩吧,反正是用来应急 🚑。

multi-protocol-speed-comparison

小结

个人结论依旧保持不变:目前基于 TLS 的协议才是未来的发展方向,「网络邻居」依旧是最大的风险。

虽然当前类 TLS 方案存在 TLS in TLS、Client 指纹、Server 特征等问题,但是很高兴看到目前有非常多人投身于此领域,并致力于解决这些问题。

在此过程中新的协议或者工具层出不穷,但是也请不要将自己的精力过多放在协议试验上,如果你现在用的协议没有受到干扰,那就没有必要去追求其他协议,保持关注即可。

我们的目标是自由访问互联网资源,自由获取你想要的内容,而不是传输工具本身。就像我们我们选择出发是为了感受旅程,而不是为了交通工具。

测试脚本

全家桶流媒体解锁检测

lmc999 / RegionRestrictionCheck(一键检测一堆平台,含 Netflix、YouTube 等;可选 IPv4/IPv6)

bash <(curl -L -s check.unlock.media)

常用参数(同一个脚本) GitHub

# 只测 IPv4
bash <(curl -L -s check.unlock.media) -M 4

# 只测 IPv6
bash <(curl -L -s check.unlock.media) -M 6

# 英文输出
bash <(curl -L -s check.unlock.media) -E en
image-20251222235547009

线路追踪

NextTrace->一款开源的、可视化的路由追踪(Traceroute)CLI 工具

它比传统的 traceroutemtr 更快、更直观。

IP 地理位置显示:能自动显示路由路径上每个节点的运营商(ISP)、地理位置(国家/城市)和 AS 编号。

可视化:支持生成地图形式的路由路径,甚至可以直接在命令行输出带颜色的格式化表格。

https://github.com/nxtrace/NTrace-core

https://www.nxtrace.org/

Screenshot_20260226-031919

一键安装脚本

勇哥的:

https://github.com/yonggekkk/sing-box-yg

bash <(wget -qO- https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sb.sh)
或者
bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sb.sh)

生成协议:

image-20260624033707019

https://github.com/yonggekkk/argosbx

https://yonggekkk.github.io/argosbx/

ArgoSBX一键无交互小钢炮脚本💣:Sing-box、Xray、Argo三内核自动搭配;支持VPS、Docker、容器多环境部署;套CDN的5大方案+套WARP的15种组合;

评论

评论加载中……