Vless搭建以及X-UI

介绍

本文介绍Vless以及XTLS的原理,XTLS被探测原因以及Vless+ws+tls+web+cdn通过X-UI进行搭建。

Vless和xtls

相对Vmess,无需额外加密以及校对时间。在进行传输时,Vmess在对数据包加上头部的同时会对后续进行加密,但是Vless只添加了头部而不进行加密。因此数据包经过Vless时的组成为:

  • Vless头部
  • google.com
  • 搜索内容(首先和google通过代理进行了tls连接,内容通过tls进行了加密)

由于直接发送会暴露访问的网址(google),除了通过tls进行全部加密之外,也可以用xtls进行加密,他只会对搜索内容之前的小部分内容进行加密,因此效率更高,随后数据包加上VPS的域名进行传输。

不过xtls加密方式为tls1.3,而搜索内容一般时用tls1.2进行加密,这个则是其可以被精准探测的原因。

当数据包传到服务器时,首先确定Vless协议和id正确后,即可帮我们去访问google。

若我们发送的是trojan数据包,服务器端会将数据包回落到trojan客户端的监听的端口上。

Vless+xtls+回落搭建(trojan)

安装Xray:

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

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": "80"
}
]
},
"streamSettings": {
"network": "tcp",
"security": "none"
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}

通过X-UI面板实现Vless+ws+tls+web+cdn

X-UI安装脚本:

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

输入y后设置用户名,密码以及访问的端口(关闭防火墙或者开启端口)。

随后访问面板,创建vless节点,端口选择80(选择http时才能套CDN)选择ws,创建完成后,即可复制到本地的v2rayN当中。

需要套CDN,只需要把域名解析到这个服务器的ip地址上,并且在CF上开启代理即可。

CDN中转

本地首先向CDN服务器发送已经绑定好的域名,如果有,它会检查该域名绑定的ip地址,确认ip后,它会帮我们把数据转交给服务器。但是它只能转发特定端口(80)或特定协议的数据(http)。

切换CDN服务器

cloudflare-cdn-ip段点击后可以查看IPv4文本列表的形式提供。

通过搜索cidr计算器即可得到起始ip和范围。可以通过ping.pe观察ip是否工作还是国内墙了。选择一个可以ping通的ip,在v2rayN上可以进行切换。把地址换成CDN的ip地址,下方的伪装域名写上自己的域名。

优选ip即是在ip段中挑选ip进行ping,按延迟进行排列,排序完成后连接CDN服务器,下载文件观察下载速度,返回最快的ip地址。项目地址为CF优选ip

但是如果直接Vless+ws+CDN的话数据是明文的,有很大被发现的风险,因此需要套tls。只需要在本地v2rayN上把端口改成443(默认走https,自动配置了tls),并且把传输安全加上tls即可,而服务器端则不需要准备证书。此时本地到CDN的数据是套了tls的,而CDN到服务器是走明文的,但CDN到服务器是没有防火墙的,因此不需要配tls和申请证书了。

但是传输协议想使用gRPC或者http2的话,CDN到服务器需要tls加密,因为二者都默认需要tls。关于gRPC,如果传输协议为grpc,那么在CF上,网络那边需要把gRPC勾选。

实现Vless+ws+tls+web+cdn流程

  • 在服务器上安装X-UI面板,X-UI面板内设置路径加载
  • 安装Ngnix修改配置文件(/ray路径时转交给8388端口,/xui时为访问界面,默认为伪装页面),无需证书
  • 创建vless节点,监听127.0.0.1:8388,传输为ws,路径为/ray,关闭sniffing
  • 复制到v2rayN里,把地址修改为域名或者优选ip(填写伪装域名),端口为80或者443(加tls)

下载Nginx:

1
2
3
4
#安装nginx:
apt install nginx
#重新加载nginx配置:
systemctl reload nginx.service

随后修改Nginx配置:

1
vim /etc/nginx/nginx.conf

Ngnix配置文件:

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
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; # xui端口
proxy_http_version 1.1;
proxy_set_header Host $host;
}
}
}

由于不同的拥塞控制算法会导致不同的带宽利用率,相对来说BBR算法带宽利用率较高。

查询当前使用的TCP拥塞控制算法:

1
sysctl net.ipv4.tcp_congestion_control

启用BBR TCP拥塞控制算法:

1
2
3
echo "net.core.default_qdisc=fq">> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

linux系统内核低于4.9则没有内置BBR,查看linux系统版本:

1
uname -r

封面

封面