0%

科学上网工具

V2Ray(ubutnu:websocket+ssl+cdn)

0x01 设置时区

v2ray 对时间要求比较严格,服务器时间与本地时间相差在90s

1
2
dpkg-reconfigure tzdata  # 选择时区
hwclock -w # 将当前时区写入bios

0x02 安装

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

此脚本会自动安装以下文件:

  • /usr/bin/v2ray/v2ray:V2Ray 程序;
  • /usr/bin/v2ray/v2ctl:V2Ray 工具;
  • /etc/v2ray/config.json:配置文件;
  • /usr/bin/v2ray/geoip.dat:IP 数据文件
  • /usr/bin/v2ray/geosite.dat:域名数据文件

此脚本会配置自动运行脚本。自动运行脚本会在系统重启之后,自动运行 V2Ray。目前自动运行脚本只支持带有 Systemd 的系统,以及 Debian / Ubuntu 全系列。

运行脚本位于系统的以下位置:

  • /etc/systemd/system/v2ray.service: Systemd
  • /etc/init.d/v2ray: SysV

脚本运行完成后,你需要:

  1. 编辑 /etc/v2ray/config.json 文件来配置你需要的代理方式;
  2. 运行 service v2ray start 来启动 V2Ray 进程;
  3. 之后可以使用 service v2ray start|stop|status|reload|restart|force-reload 控制 V2Ray 的运行。

问题:

  1. main: failed to load config: > v2ray.com/core/main/confloader/external: config file not readable > open : no such file or directory
    此问题是/etc/v2ray/config.json 配置文件缺失,将/usr/bin/v2ray/config.json中的文件拷贝至/etc/v2ray/

    而事实上仅仅拷贝只是默认配置,需要根据自己的服务来配置。

0x03 配置(WebSocket+TLS+Web)

服务器 V2Ray 配置(/etc/v2ray/config.json)
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": 10000, // 服务器监听端口
"listen":"127.0.0.1",//只监听 127.0.0.1,避免除本机外的机器探测到开放了 10000 端口
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "UUID", // https://www.uuidgenerator.net/ 可在这个网站上随机生成
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/path" // 客户端连接时的地址
}
}
}
],
"outbounds": [
{
"protocol": "freedom", //允许所有协议
"settings": {}
}
]
}
Nginx 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/v2ray/v2ray.crt;
ssl_certificate_key /etc/v2ray/v2ray.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name mydomain.me; # 你的域名
location /path { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_pass http://127.0.0.1:10000; #假设WebSocket监听在环回地址的10000端口上
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;

# Show realip in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
客户端配置
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
67
68
69
70
71
72
73
74
75
76
77
78
79
{
"dns" : {
"servers" : [
"localhost"
]
},
"inbounds" : [
{
"listen" : "127.0.0.1",
"port" : 1081,
"protocol" : "socks",
"tag" : "socksinbound",
"settings" : {
"auth" : "noauth",
"udp" : false,
"ip" : "127.0.0.1"
}
},
{
"listen" : "127.0.0.1",
"port" : 8001,
"protocol" : "http",
"tag" : "httpinbound",
"settings" : {
"timeout" : 0
}
}
],
"outbounds" : [
{
"sendThrough" : "0.0.0.0",
"mux" : {
"enabled" : false,
"concurrency" : 8
},
"protocol" : "vmess",
"settings" : {
"vnext" : [
{
"address" : "mydomain.me", //mydomain.me,你的域名
"users" : [
{
"id" : "UUID", //你的uuid
"alterId" : 64,
"security" : "auto",
"level" : 0
}
],
"port" : 443
}
]
},
"tag" : "Server Name",
"streamSettings" : {
"network" : "ws",
"wsSettings" : {
"path" : "\/path" // 对于服务器/path
},
"security" : "tls"
}
}
],
"routing" : {
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "Server Jupyter",
"port" : "0-65535"
}
]
},
"log" : {
"error" : "\/var\/folders\/q5\/0000gn\/T\/cenmrev.v2rayx.log\/error.log",
"loglevel" : "error",
"access" : "\/var\/folders\/q5\/0000gn\/T\/cenmrev.v2rayx.log\/access.log"
}
}

(V2RayX 客户端下载)

以上可实现websoket + ssl 实现代理

0x04 与网站流量混淆配置(WebSocket+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
30
31
32
33
34
35
36
37
38
39
40
41
42
server {
server_name mydomain.me; # 你的域名
listen 443;
ssl on;
ssl_certificate /etc/v2ray/v2ray.crt; # ssl证书配置
ssl_certificate_key /etc/v2ray/v2ray.key; # ssl证书配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;


rewrite '/site/path' /path last; # /site/path 网站中的某个地址 /path v2ray地址
location / { # 网站配置
proxy_pass http://127.0.0.1:8888/; # 网站的端口地址
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;

if ( $uri = '/site/path' ) { # /site/path 网站中的某个地址
rewrite $uri /path break; # /path v2ray地址
}

}


location /path { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;#假设WebSocket监听在环回地址的10000端口上
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;

# Show realip in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

其中主要步骤是:

1
rewrite '/site/path'  /path last;  # /site/path 网站中的某个地址  /path v2ray地址

制造一个与网站相似的链接,重写到真实地址上。

v2ry的服务器配置不变,客户端配置只需要将/path改为/site/path ,即你的混淆的网站地址。这时,你的代理请求会”变为网站中的一个websocket”。

0x05 与网站流量混淆配置(WebSocket+TLS+Web+CDN)

核心:通过cloudflare来分发websocket流量,从而隐藏自己真实IP

  1. 在 (cloudflare.com) 注册,并添加自己的网址

  2. 在DNS记录中添加A记录,指向服务器

  3. 在Network中打开,websockets代理

Done.