前言

  • vps:一台在墙外的vps服务器,它能自由上网
  • v2ray:负责你的网络与vps之间的网络通讯
  • VMess:一个加密传输协议,通常作为 V2Ray 客户端和服务器之间的桥梁。
  • nginx:作为web服务器,负载均衡服务器,邮件服务器等,本例用到web服务器功能部署网站
  • websock:一个传输协议,支持全双工,大概用来客户端与服务端中传输数据包
  • tls:传输层安全协议,用来加密http
  • 流程:{浏览器} <–(socks) {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <–(VMess)–> {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <–(Freedom)–> {目标网站}–>
1
2
3
4
5
6
flowchart LR;
A[用户浏览器] -->|请求访问| B(域名解析到VPS IP);
B -->|443端口| C[Nginx];
C -->|WebSocket| D[v2ray];
D -->|TLS| E[网络];
E -->|请求Google等网站| F[Google等网站];

大致步骤:

  • 1.购买vps,获得root用户名及密码,ssh端口等信息
  • 2.登录vps,使用到Xshell软件等,有免费版
  • 3.安装和配置v2ray等软件,完成搭建
  • 4.终端配置v2ray信息

1 购买vps和域名

1. 选择vps服务商
购买虚拟服务器,注意海外服务器ip也有被墙封的风险。

本例用的是racknerd服务商,vps用的系统是debian 10

2.选服务器位置

  • 服务器位置首选美国西海岸的 Los Angeles、或者亚洲的东京、新加坡,当然其它国家地区都可以尝试,
  • 可通过cmd窗口ping指令测速,time越小越好

3.选操作系统
Debian 10 x 64等稳定的

之后就是选服务器配置(看价格),支付等。购买完成将得到VPS的IP地址、SSH端,vps控制台账密,root用户及密码等信息。

1.2 购买域名

1.申请域名
本例用的是https://www.namesilo.com/,申请的域名:ijiumi.top

2.域名解析
就是将你的域名指向你的服务器ip地址,绑定了才可以通过域名访问你的网站,步骤如下:

  1. 在namesilo管理后台点击域名,点击更新DNS记录。
  2. 删除默认的dns记录。
  3. 添加A类型的www和@两条记录到你的vps ip地址,配置完dns记录后可能需要一点时间才能生效。
HOSTNAMETYPEADDRESS
A购买的vps地址
wwwA购买的vps地址

3.修改namesilo的DNS服务器为Cloudflare(可选)
可以为你的域名cdn加速(看情况)和隐藏你的真实服务器ip地址。注册登录cloudflare账号,添加你要加速的网站,选择免费版,修改dns记录,到namesilo后台修改nameservers为Clodflare提供给你的dns服务器地址

2 安装和配置

使用Xshell等ssh工具登录vps

2.1 安装v2ray

v2ray官网
1.下载安装v2ray

1
2
3
4
5
# 如未安装curl,先安装
sudo apt install curl

#使用curl安装v2ray,这里用到官网的安装脚本
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

2.配置v2ray服务端
打开config的配置文件

1
2
# 打开配置文件
vi /usr/local/etc/v2ray/config.json

添加以下内容,其中:

  • id:uuid,v2ray认证的凭证,相当于配置密码,不要泄露。可以使用cat /proc/sys/kernel/random/uuid命令生成一个。
  • port:端口号随意,只要不冲突
  • alterId:可以配置成0
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
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [{
"port": 23333,
"protocol": "vmess",
"settings": {
"clients": [{
"id": "c51b2a76-ebfa-4e06-b767-3da42f6e482b",
"level": 1,
"alterId": 0
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/tech"
}
}
}
],

"outbounds": [{
"protocol": "freedom"
}
]
}

3.设置v2ray开机自启

1
2
3
4
5
#启动并加入开机自启
systemctl start v2ray;systemctl enable v2ray

# 查看v2ray是否运行等状态
systemctl status v2ray

2.2 安装nginx和部署静态网站

1.新建一个静态网页,路径自选

1
2
3
4
5
mkdir -p /honme/www/ijiumi-top
vi /honme/www/ijiumi-top/index.html

# 可用需要修改网站文件夹访问权限
chmod -R 777 /home/www

网页内容任意:

1
2
3
4
5
6
7
<html>
<title>建设中...</title>
<head><meta charset="UTF-8"></head>
<body bgcolor="#E6E6FA">
<h1>Hi,欢迎访问ijiumi.top</h1>
</body>
</html>

2.下载nginx

1
apt install -y nginx

3.配置Nginx
使用命令nginx -t查看nginx默认配置路径,返回形如/etc/nginx/nginx.conf的路径,
nginx.conf是nginx的主配置文件。

1
2
# 查看nginx默认配置路径nginx.conf
nginx -t

为了方便管理多个配置,使用命令vim /etc/nginx/nginx.conf 打开nginx.conf文件输入以下内容,将包含conf.d目录下所有以 .conf 结尾的文件作为配置文件。

1
2
# 在http 块下增加:
include /etc/nginx/conf.d/*.conf;

在conf.d 文件夹下新建配置文件,例如vim /etc/nginx/conf.d/ijiumi-top.conf,添加以下内容:

1
2
3
4
5
6
7
8
#一份有效的配置
server{
listen 80 ;
listen [::]:80 ;
server_name ijiumi.top;
index index.html;
root /honme/www/ijiumi-top;
}

4. 启动或刷新nginx查看效果

1
2
3
4
5
#启动nginx并添加开机自启
systemctl start nginx;systemctl enable nginx

# 刷新nginx配置
nginx -s reload

此时可以用http方式访问你的网站了,例如http:ijiumi.top

2.3 安装certbot并申请ssl证书

1.安装snap软件和certbot

1
2
3
4
5
6
7
8
9
10
11
# 安装snap软件
apt install -y snapd

# 检查一下snap版本
snap install core; snap refresh core

# 安装certbot
snap install --classic certbot

# 创建软链
ln -s /snap/bin/certbot /usr/bin/certbot

2.申请https证书

1
certbot --nginx

首次申请需要输入你的邮箱,以及你要申请证书的域名(就是刚才申请的域名),完成后会有successful提示,并且配置会被修改,此时就可以通过https访问你的域名。

3.证书管理
certbot会自动配置自动续期,输入以下命令查看证书有效期及续订情况。

1
2
3
4
5
6
7
8
# 查看证书有效期
certbot certificates

# certbot会自动配置自动续期,使用以下指令模拟续订是否生效
certbot renew --dry-run

#删除失效证书,在列出所有证书中输入要删除哪个的序号,然后回车即可
certbot delete

经过certbot配置后,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
server{
server_name ijiumi.top;
index index.html;
root /home/www/ijiumi-top;

listen 443 ssl; # managed by Certbot
listen [::]:443;
ssl_certificate /etc/letsencrypt/live/ijiumi.top/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ijiumi.top/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server{
if ($host = ijiumi.top) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
listen [::]:80;
server_name ijiumi.top;
return 404; # managed by Certbot

}

配置解释

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
server{
listen 80; # 指定端口,nginx默认端口为80
server_name domain.com; # 指定域名
location / {
root /home/ubuntu/domain-com; # 指定静态网站根目录
index index.html; # 指定默认访问的文件
# Nginx 支持 rewrite 功能:
# 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀)
if (!-e $request_filename){
rewrite ^(.*)$ /$1.html last;
break;
}
}
# Nginx 支持 rewrite 功能:
# 可以将默认 80 端口的 HTTP 请求重定向为 HTTPS(可选项,可以不配置)。
rewrite ^(.*)$ https://$host$1 permanent;
}

# 腾讯云 https 访问配置
server {
#SSL 访问端口号为 443
#listen 443;
#启用 SSL 功能
#ssl on;
# 由于版本问题,配置文件可能存在不同的写法。此处需要使用 listen 443 ssl 代替以上写法
listen 443 ssl;
#填写绑定证书的域名
server_name domain.com;
#证书文件名称(此处的证书文件放在 /etc/nginx/ssl-nginx-qcloud 目录下)
ssl_certificate ./ssl-nginx-qcloud/1_domain.com_bundle.crt;
#私钥文件名称(此处的私钥文件放在 /etc/nginx/ssl-nginx-qcloud 目录下)
ssl_certificate_key ./ssl-nginx-qcloud/2_domain.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准(照抄即可不用修改)。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
root /home/ubuntu/domain-com;
#指定默认访问的文件
index index.html;
# Nginx 支持 rewrite 功能:
# 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀)。
if (!-e $request_filename){
rewrite ^(.*)$ /$1.html last;
break;
}
}
}

2.4 添加v2ray转发

打开nginx配置中添加v2ray转发内容,重启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
server{
server_name ijiumi.top;
index index.html;
root /home/www/ijiumi-top;

listen 443 ssl; # managed by Certbot
listen [::]:443;
ssl_certificate /etc/letsencrypt/live/ijiumi.top/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ijiumi.top/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

## 添加这部分内容,23333对应/usr/local/etc/v2ray/config.json 里面inbounds端口
## /tech客户端配置的时候需要,对应/usr/local/etc/v2ray/config.json streamSettings里的path
location /tech {
proxy_redirect off;
proxy_pass http://127.0.0.1:23333;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
server{
if ($host = ijiumi.top) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
listen [::]:80;
server_name ijiumi.top;
return 404; # managed by Certbot
}

2.5 同步服务器时间

使用 V2Ray 要保证时间准确,安装ntp服务以同步服务器的系统时间。
客户端的时区不一定需要和服务器相同。

1
2
3
4
5
6
7
8
9
10
11
# 安装ntpdate
apt-get install ntpdate

# 检查ntp服务是否启动
service --status-all

# 同步网络时间,不通的话用镜像源 ntpdate ntp1.aliyun.com
ntpdate ntp.api.bz

# 重启(可选)
reboot

其他一些可能用到的命令:

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
# 进入root
su root

# 修改root账号密码
passwd root

# 查看时间
date

# 查看时区
cat /etc/timezone

# 设置时区
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 从服务器上传和下载文件:安装lrzsz
apt install -y lrzsz

# 上传到服务器
rz fileName
# 从服务器下载到电脑
sz fileName

# vim使用:vi指令打开文件,命令模式:esc键;输入模式:i键;s键;保存":w",退出":q"

3设置客户端

V2Ray Windows 的客户端可以使用v2ray-core(官方客户端,命令行方式)。也可以使用v2rayN(基于 v2ray-core的辅助工具,带图形化的界面),相应的Android平台上的客户端app可以使用v2rayNG

这里Windows 的v2rayN-6.42版本为例,运行v2rayN客户端,在v2rayN主界面下方系统代理模式选择自动配置系统代理路由建议选择绕过大陆(Whitelist)
在菜单栏选择添加[VMESS]服务器新建一个配置,根据以下内容进行填写,配置完后选择设置为活动服务器即可。

  • 别名:任意
  • 地址:服务器主机地址,即vps IP地址
  • 端口:443
  • 用户id:服务器v2ray的config配置的id
  • 额外ID:现在默认0
  • 加密方式:auto
  • 传输协议:ws
  • 伪装类型:nore
  • 伪装域名:空
  • 路径:/tech,与服务器配置保持一致
  • 传输安全:tls,跳过证书验证true

当Windows配置完成后,可以右键选择批量导出分享URL至剪切板将配置以Base64字符串的形式导出到剪切板,之后可以一键配置到手机或者其他客户端。

4 优化(可选)

4.1 开启 Google BBR加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Debian 9可以直接通过参数开启Google BBR,设置过程如下(我是使用root用户操作的):
1.修改系统变量,如果你是root用户执行:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

2.保存,使更改生效
sysctl -p

3.查看内核是否已开启BBR
sysctl net.ipv4.tcp_available_congestion_control

显示以下即已开启:
# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno

4.查看BBR是否启动
lsmod | grep bbr
5.显示以下即启动成功
tcp_bbr 20480 17

6.重启系统
reboot

4.2 使用cloudflare中转流量,隐藏真实IP

使用cloudflare(CF)进行cdn中转可以隐藏服务器的真实ip,能防止ip被墙,但是cloudflare免费套餐可能有一定延迟,比vps直接连慢。这就看情况取舍,一般除非服务器ip被墙,否则不需要上cdn。

5 报错

1.vmess md5 认证信息弃用

1
invalid user: VMessAEAD is enforced and a non VMessAEAD connection is received.

解决方法:

  • 方法一:配置 alterId 为0
  • 方法二:禁用vmessaead,设置环境变量 v2ray.vmess.aead.forced = false
    输入指令vi cat /etc/systemd/system/v2ray.service,添加环境变量设置,并重启v2ray systemctl daemon-reload;v2ray restart
    配置如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #修改
    [Unit]
    Description=V2Ray Service
    Documentation=https://www.v2fly.org/
    After=network.target nss-lookup.target

    [Service]
    # 添加了以下语句,修改环境变量,本例生效
    Environment="V2RAY_VMESS_AEAD_FORCED=false"
    User=nobody
    CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
    AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
    NoNewPrivileges=true
    # 添加了以下语句,修改环境变量,本例不生效
    #ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json
    ExecStart=/usr/bin/env v2ray.vmess.aead.forced=false /usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json
    Restart=on-failure
    RestartPreventExitStatus=23

    [Install]
    WantedBy=multi-user.target

2.找不到AppArmor 配置

1
missing profile snap.certbot.certbot.Please make sure that the snapd.apparmor service is enabled and started**

解决方法:

1
2
systemctl enable apparmor
systemctl start apparmor

3.超时或者一个客户端可以用,另一个不可以
注意同步一下服务器时间以及客户端时间

参考链接

[1] v2ray官网
[2] v2ray搭建过程图文教程