最安全的代理方式-V2ray/WS/Nginx反代/TLS配置教程

前置基础

  • 已经购买或者拥有一台国外的服务器
  • 服务器配置好ssh,可以通过本地终端连接
  • 已经拥有一个域名并且已经解析到服务器IP(收费or免费域名都行)
  • 本教程基于CentOS 7系统

    其他系统类似

服务端配置

服务器更新

在通过ssh首次连接到购买的VPS后,首先要做的就是刷新软件源和更新系统,执行如下代码:

1
2
yum update
yum upgrade

对于新购买的VPS,在执行yum upgrade之后可能需要耗费一段时间进行系统更新,具体花费的时间根据服务器配置的不同而有所差异。

申请TLS证书

在注册好域名之后务必添加一个A 记录指向你的服务器IP。
在确认域名已经解析到我们购买的VPS的IP地址之后,我们先申请对应域名的TLS证书。

首先通过ssh连接到服务器,输入如下命令安装TLS证书申请工具:

1
curl  https://get.acme.sh | sh

如果报错,可能是由于服务器没有安装curl工具,执行yum install curl安装完成后重新执行上述命令即可。

安装完acme证书申请工具后即可进行域名证书的申请:

1
~/.acme.sh/acme.sh --issue -d 改成对应的域名 --standalone -k ec-256

注意: 该命令会临时监听80端口,请确保执行该命令前80端口没有使用。

证书申请完毕后会存放在/root/.acme.sh/域名_ecc文件夹内,这个路径要记住,后面配置nginx要用到。

Nginx的安装与配置

Nginx安装

由于nginx软件并不在默认的软件列表中,因此我们在安装nginx之前要现将包含nginx的软件源添加到软件源列表,执行如下命令:

1
yum install epel-release

然后进行nginx的安装:

1
yum install nginx​

在终端执行一下指令生成dhparam

1
2
mkdir -p /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

至此Nginx安装完毕,下一步要进行配置。

Nginx配置

通过yum install nginx方式安装Nginx之后,对应的配置文件在/etc/nginx/文件夹中。

首先要修改的是nginx的默认配置文件,我们使用vi /etc/nginx/nginx.conf打开默认配置文件,将里面的内容修改成如下:

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
#   * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
# tcp_nopush on;
# tcp_nodelay on;
keepalive_timeout 65;
# types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
}

接下来进入nginx的站点配置文件夹,并新建我们对应域名的配置文件:

1
2
cd /etc/nginx/conf.d
touch 域名.conf

接着编辑域名的配置文件,我们使用vi 域名.conf指令打开文件进行编辑,输入如下内容:

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
server
{
listen 80;
server_name 你的域名;

#将http重定向到https
return 301 https://你的域名$request_uri;
}

server
{
listen 443 ssl http2;
server_name 你的域名;
ssl on;
ssl_certificate /root/.acme.sh/你的域名_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/你的域名_ecc/你的域名.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
access_log off;

location / {

#向后端传递访客IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#设定需要反代的域名,可以加端口号
proxy_pass https://www.iqiyi.com/;
#替换网站内容
sub_filter 'www.iqiyi.com' '你的域名';

# websocket设定,V2ray使用,这里的设置要和v2ray的设置一致。
location /自定义/ {
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_intercept_errors on;
if ($http_upgrade = "websocket" ){
proxy_pass http://127.0.0.1:自定义v2ray端口;
}
}
}
}

配置文件中的指定内容记得修改成自己的域名、SSL证书路径填写我们上一步申请证书时记录的路径、自定义部分可以自己修改。

这个配置文件主要实现两个功能:

  • 域名反代,实现人们在访问你的域名的时候得到的页面是其他网页的页面。

    这省去了自己搭建站点来提高混淆的麻烦,这部分设置在配置文件中的location / {}部分,请对应修改成需要的内容。

  • 实现v2ray特征流量的转发

    在配置文件中的location /自定义/ {}部分,可以将/自定义/修改成任何信息,甚至是乱码,比如/haha
    它的作用是告诉nginx,路径为/haha的流量全部转发到指定端口
    proxy_pass http://127.0.0.1:自定义v2ray端口部分请自己随机设置端口,比如12345端口,nginx就是将v2ray流量通过这个端口转发给服务端v2ray的。

至此,nginx的安装和配置已经完毕,最后可以在终端输入nginx -t进行nginx配置文件的语法检查,如果显示success则表示配置无误,如果报错,则相应的检查报错文件的报错行数,通常是遗漏符号的问题导致报错。

安装和配置V2ray

做了那么多前期准备,现在终于到了核心的部分。其实在做了那么多准备工作之后,v2ray的安装和配置就显得格外的简单。

V2ray的安装

输入如下指令进行v2ray的下载安装:

1
2
wget https://install.direct/go.sh
bash go.sh

如果报错,可能是没有安装wget,输入指令yum install wget安装完之后重新执行上述命令即可。

V2ray配置

完成安装之后,就差配置文件了。
都说V2ray的配置复杂,这是限制很多人不愿意使用V2ray的原因之一。
但是,Don’t Worry About It! v2ray的配置看似复杂,其实只要根据模版修改需要的内容即可,非常简单。

我们进入V2ray的配置文件夹,并新建一个配置文件:

1
2
cd /etc/v2ray
touch config.json

我们通过vi 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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
{
"dns": null,
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "info"
},
"outbound": {
"protocol": "freedom",
"streamSettings": null,
"tag": null,
"settings": null,
"mux": null
},
"stats": {},
"api": {
"services": [
"StatsService"
],
"tag": "api"
},
"routing": {
"strategy": "rules",
"settings": {
"domainStrategy": null,
"rules": [
{
"port": null,
"domain": null,
"type": "field",
"outboundTag": "blocked",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
]
},
{
"inboundTag": [
"api"
],
"type": "field",
"outboundTag": "api"
}]
}

},
"inbound": {
"port": nginx中设置的自定义端口,
"streamSettings": {
"wsSettings": {
"connectionReuse": true,
"headers": {
"host": "随便填写一个网址"
},
"path": "/nginx中配置的自定义内容/"
},
"tlsSettings": {},
"kcpSettings": null,
"network": "ws",
"security": "",
"httpSettings": null,
"tcpSettings": null
},
"tag": "A",
"settings": {
"clients": [
{
"id": "12345432-85eb-4385-b760-22222c061109",
"alterId": 64
}]
},
"protocol": "vmess"
},

"policy": {
"levels": {
"0": {
"statsUserDownlink": true,
"statsUserUplink": true
}
},
"system": {
"statsInboundUplink": true,
"statsInboundDownlink": true
}
},

"inboundDetour": [
{
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1"
},
"tag": "api",
"port": 23243,
"listen": "127.0.0.1"
}
],

"outboundDetour": [
{
"protocol": "blackhole",
"settings": null,
"tag": "blocked"
}]
}

需要修改的信息:

  • inbound中的Port修改为nginx配置中我们设定的自定义端口
  • inbound中的path修改为nginx配置中设置的/自定义/部分,注意/也要一致!
  • inboundheader部分的Host修改为任意网址,可以高混淆
  • clients中的id修改为任意的uuid码,可以通过网页生成

其他部分不需要修改,最后ESC -> :wq进行保存退出,至此,v2ray的配置就宣告结束。

防火墙配置

由于有的服务商对CentOS 7 系统默认安装了防火墙,因此在上述配置后,还需要设置防火墙打开对应端口才可以使用。

可以输入如下指令查看已经开放的端口:

1
firewall-cmd --zone=public --list-ports

如果显示错误,提示没有找到firewall-cmd指令,那么说明系统没有安装防火墙,此时可以跳过防火墙配置,运行nginx和v2ray。

接着通过如下指令开放我们nginx中配置的v2ray转发端口:

1
firewall-cmd --permanent --zone=public --add-port=端口号/tcp

推荐开放的端口号:443,80,22,nginx转发端口

端口开启完毕之后,执行如下命令并显示新的端口开放信息:

1
2
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

确认端口都开放无误后,防火墙的配置就结束。

开启服务并配置开机自启动

完成以上配置之后,即可开启nginx和v2ray服务:

1
2
systemctl start nginx
systemctl start v2ray

如果没有报错,说明一切配置正确。

最后设置一下nginx和v2ray开机自启动:

1
2
systemctl enable nginx
systemctl enable v2ray

至此,V2ray + WS + Nginx反代 + TLS 的服务端配置完毕,下面配置客户端即可开始使用。

客户端配置

在完成服务端配置后,客户端的配置信息如下,根据不同的客户端填入相应信息即可使用:

  • Address: 你的域名
  • 端口: 443
  • id: v2ray配置文件中自己创建的uuid码
  • 传输方式: ws
    • 路径: /自定义/ #即nginx配置和v2ray配置文件中的/自定义/部分,/号别遗漏!
    • 域名(Host): v2ray配置中header部分的自定义Host网址
    • alterId: 64 #和v2ray配置文件中的相同即可
  • TLS: 开启,允许不安全的连接

至此,便可以开心的使用代理啦,不同的v2ray客户端软件可能还有全局或者PAC模式,可以自己探索一下。

cxjiang wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创分享,您的支持将鼓励我继续创作!