抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

先决条件

开始操作之前,建议你先了解以下基础知识:

  • 使用 ssh 命令或 ssh 客户端登录远程服务器
  • 使用 vim 或其他编辑器的最基本的操作

购买 VPS

购买 VPS 的说明(点击以展开)

Hmmm… 本人学生党(穷 ➕ 没有办理国际信用卡),买境外的 VPS 不太方便。我找了相对便宜的(没有活动时的价格最低为 $3.71 / 月)且支持使用支付宝的 VPS 提供商 —— CloudCone

注册登录没太多好说的,唯一的建议就是注册的时候填写国外的邮箱(Cloudcone 将会通过这个邮箱告知你 VPS 的 IP 地址root 用户的初始密码)。

这里简单说下如何通过支付宝进行充值:

填写完支付宝关联的邮箱地址(如支付宝未与任何邮箱关联,请自行搜索相关内容),会跳转至支付宝扫码付款的页面,付款成功就可新建 VPS 实例了。

新建实例部分,本文以 Debian 10 为例,您也可以使用其他 Linux 发行版本。如您使用其他 Linux 发行版本,本教程后续的部分命令或许会有些许差异(如软件包的安装等),当然本文对您仍具有参考意义。

主机名按照框内灰色字体的格式填写即可。

新建实例成功后,请注意查看你注册账号时的邮箱,是否收到包含服务器公网 IPv4 地址root 用户初始密码的电子邮件。

初始化 VPS

具体步骤

ssh 登录到远程服务器的 root 用户后再完成以下操作:

  1. 更新系统已知的软件包列表、升级系统上的所有软件包、移除不再需要的依赖软件包:
1
apt update && apt upgrade && apt autoremove

正经的 Linux 用户不会用 root 干所有的事情,如果这么做的话将会很危险。创建一个普通的用户,并让它可以通过 sudo 指令用 root 权限执行命令是一般的解决方案。

  1. 在用 sudo 之前,我们需要先安装 sudo 这个软件包:
1
apt install sudo
  1. 新建一个普通用户,本文新建名为 eric 的用户( -m 为用户创建相应的 home 目录,-s 选项使用 /bin/bash 作为用户的 shell,-G 并将其添加到 sudo 用户组中),创建好后第2行命令给 eric 用户设置一个密码:
1
2
useradd -m -s /bin/bash -G sudo eric
passwd eric
  1. 相关建议(可选操作)

为了安全起见,建议你完成下列操作:

  • 禁止通过 SSH 登录到 root 用户
  • 限制 SSH 通过用户密码来登录,并实现 SSH 仅能通过密钥登录服务器

在操作之前,你需要先将本机公钥添加到远程服务器

  • 首先确认下本机是否生成过 SSH 密钥。Git Bash 上执行命令 ls ~/.ssh 查看是否有 id_*id_*.pub 这两个文件(其中 * 是生成密钥的签名类型),如果没有则需要通过 ssh-keygen 生成,在 Git Bash 中执行命令:
1
ssh-keygen -t ecdsa
  • 如果已生成过 SSH 密钥,你现在就可以通过命令将本机的公钥信息添加到远程服务器中,执行命令后会让你确认信息,输入 yes,然后输入服务器用户的登录密码:
1
2
3
4
5
6
7
8
9
$ ssh-copy-id eric@服务器IP地址

......

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

......

eric@服务器IP地址's password:

完成该操作之后就可以免密登录服务器了,如果要禁用远程登录 root 用户和使用密码登录的方式,点击下面的『操作要点』展开

操作要点
  • 禁止通过 SSH 登录到 root 用户
    • 编辑 /etc/ssh/sshd_config
/etc/ssh/sshd_config
1
2
3
4
5
......

PermitRootLogin no

......
  • 限制 SSH 通过用户密码来登录
    • 编辑 /etc/ssh/sshd_config
/etc/ssh/sshd_config
1
2
3
4
5
......

PasswordAuthentication no

......
  • 编辑完配置文件后,sudo systemctl restart sshd 重启下服务器的 sshd 服务

安装 V2Ray 前的准备

正经的 Linux 用户不会用 root 干所有的事情,如果这么做的话将会很危险。所以使用普通用户,再通过 sudo 指令用 root 权限执行命令是坠吼的。

使用普通用户通过 ssh 登录到你的远程服务器后再完成以下操作:

时间校准

对于 V2Ray,它的验证方式包含时间,就算是配置没有任何问题,如果时间不正确,也无法连接 V2Ray 服务器的,服务器会认为你这是不合法的请求。所以系统时间一定要正确,只要保证时间误差在 90 秒 之内就没问题。

1
2
3
4
sudo timedatectl set-ntp true # 启用 NTP 服务
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 将时区设为“亚洲/上海”
sudo hwclock --systohc # 将硬件时钟调整到与当前系统时间一致
date -R # 以 RFC 5322 格式输出日期和时间。例如 Mon, 18 Jan 2021 11:04:16 +0800

执行完之后,终端显示的时间如果正确,那么就没问题了。

防火墙初始化

  • 本文将使用 ufw 来管理系统的防火墙
1
2
3
sudo apt install ufw
sudo ufw enable
sudo ufw allow 'OpenSSH'

安装相关软件包

  1. 更新系统已知的软件包列表、升级系统上的所有软件包、移除不再需要的依赖软件包:
1
sudo apt update && sudo apt upgrade && sudo apt autoremove
  1. 安装编辑器 vim(后续编写配配置文件需要,当然你也可以使用其他编辑器)
1
sudo apt install vim
  1. 安装所需要的依赖软件包:
1
sudo apt install curl openssl

安装并配置 V2Ray

下载 V2Ray 安装脚本

1
2
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-dat-release.sh

安装 V2ray 主程序

1
sudo bash install-release.sh

安装最新发行的 geoip.dat 和 geosite.dat

  • geoip.dat:IP 数据文件
  • geosite.dat:域名数据文件
1
sudo bash install-dat-release.sh

配置 V2Ray

使用 vim 编辑 V2Ray 的配置文件:

1
sudo vim /usr/local/etc/v2ray/config.json

清空文件原有内容,然后输入以下内容:

/usr/local/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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
"log":{
"loglevel":"warning"
},
"routing":{
"domainStrategy":"AsIs",
"rules":[
{
"type":"field",
"ip":[
"geoip:private"
],
"outboundTag":"block"
}
]
},
"inbounds":[
{
"listen":"127.0.0.1",
"port":10000,
"protocol":"vmess",
"settings":{
"clients":[
{
"id":"9dfe7fee-d08f-44f8-ad2d-300d4c9c3a0e",
"alterId":0
}
]
},
"streamSettings":{
"network":"ws",
"wsSettings":{
"path":"/ray"
}
}
}
],
"outbounds":[
{
"protocol":"freedom",
"tag":"direct"
},
{
"protocol":"blackhole",
"tag":"block"
}
]
}
  • port:V2Ray 的 WebSocket 所监听的内网端口,取值范围是 1 ~ 65535,但为了避免端口占用,所以不能填常用的端口号(如 22 是 ssh 的端口号,80 是 HTTP 的端口号,443 是 HTTPS 的端口号等),此处设我为 10000
  • id用户的主 ID。可通过 UUID 生成器 - v2fly 或者 Online UUID Generator 生成(任选其中一个网站生成就行),此处我设为 9dfe7fee-d08f-44f8-ad2d-300d4c9c3a0e
  • alterId:根据新 V2Ray 白话文指南 – VMess推荐值为 0,代表启用 VMessAEAD
  • network传输协议。设为 WebSocket,即 ws
  • pathWebSocket 所使用的 HTTP 协议路径。可自定义,例如我设为 /ray

咳咳,上面的配置文件想要照抄的话至少 id 取不一样的值就好 🤣

注册域名

注册域名的说明

域名可通过网站 NameSilo 进行申请注册,这个站点最低可花 $0.99 即可注册申请一年的域名,同时还支持免费启用 WHOIS privacy(WHOIS 隐私服务大致的意思是:从 WHOIS 记录中删除您的个人联系信息)。


  • NameSilo 注册完登录账号,然后搜索你想要的域名,选择域名。选择最便宜的就行(至于续费域名的费用比较高,所以建议是域名过期后再换就行):

  • 点击 Add 之后,会跳转如下界面(此处注意关掉自动续费,打开 WHOIS 隐私服务):

  • 支付方面,NameSilo 也是支持支付宝进行支付的,填写支付宝相关联的邮箱地址,然后进行扫码支付。

  • 付款成功后点击页面里的「Account Domains 账户所属域名」栏里的数字

  • 然后跳转到信息填写页面,这些信息可以通过美国虚拟信息生成器生成然后进行填写(其中带 * 号的为必填项
image

  • 填写完信息后,点击 🌏 图标管理域名的 DNS,然后在 DNS 管理页面点击 ❌ 删除所有的记录

注册完域名记得前往您的电子邮箱查收来自 NameSilo 的邮件,必须点击 WHOIS 的邮箱验证链接,否则您的域名可能将被注销。

Cloudflare 接管域名解析

完成前面的步骤后,我们将在这一步使用 Cloudflare 来接管域名的解析。

具体步骤
  1. 注册 Cloudflare 的账号,注册完账号之后,请前往邮箱查看来自 Cloudflare 的邮件,点击验证链接以验证您的电子邮箱

  1. 添加站点,输入先前注册的域名即可。

  1. 选择「免费计划

  1. 暂不添加 DNS 记录

  1. 前往域名提供商(如前面介绍的 NameSilo),点击图示部分进行域名服务器的管理

  1. 移除域名提供商预置的「域名服务器」,用 Cloudflare 提供的「域名服务器替换之。

  1. Submit 提交」完上述变更之后,等待若干分钟后域名的状态转为「active 激活」。然后点击「Done, check nameservers」。

  1. 点击「Finish later」,然后再回到 Cloudflare 首页,等待若干分钟后「Pending Nameserver Update」会转为「active」,这时点进去

  1. 添加 DNS 记录

  1. 如下图表添加 2 条记录就可以了。
TypeNameIPv4 addressProxy status
A@x.x.x.x☁ Proxied
Awwwx.x.x.x☁ Proxied
  • 云朵被点亮(即 ☁ Proxied)意味着你的网站流量必须经过 Cloudflare,也可以说使用了 Cloudflare 的 CDN 节点。

安装 Nginx 及其初始配置

具体步骤

请将本文中的 ericclose.xyz 替换成您注册的域名

安装 Nginx

1
sudo apt install nginx

配置防火墙

1
sudo ufw allow 'Nginx Full'

配置 Nginx

  1. Nginx 在安装过程中会创建一个默认的服务器块。如果它仍然存在,请将其删除,因为你后面将为你注册的域名配置一个自定义服务器块
1
sudo rm /etc/nginx/sites-enabled/default
  1. 使用如下命令,为你的域名创建目录
1
sudo mkdir -p /var/www/ericclose.xyz/html
  1. 接下来,用 $USER 环境变量给当前的系统用户分配目录的所有权
1
sudo chown -R $USER:$USER /var/www/ericclose.xyz/html
  1. 使用命令确保 web root 具有正确的权限
1
sudo chmod -R 755 /var/www/ericclose.xyz
  1. 接下来,使用 vim 或其他编辑器创建 index.html 页面文件
1
vim /var/www/ericclose.xyz/html/index.html

文件写入以下内容

/var/www/ericclose.xyz/html/index.html
1
2
3
4
5
6
7
8
9
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Success! Your Nginx server is successfully configured. </h1>
<p>This is a sample page.</p>
</body>
</html>
  1. 我们需要创建一个服务器块,指向我们自定义的 web root。我们不直接修改默认的配置文件,而是新建一个文件
1
sudo vim /etc/nginx/sites-available/ericclose.xyz

填写以下内容:

/etc/nginx/sites-available/ericclose.xyz
1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
listen [::]:80;

root /var/www/ericclose.xyz/html;
index index.html index.htm index.nginx-debian.html;

server_name ericclose.xyz www.ericclose.xyz;

location / {
try_files $uri $uri/ =404;
}
}
  • 注意要记得修改配置文件中的 root 项和 server_name 项中的 ericclose.xyz,更改为您的域名即可
  1. 接下来,让我们通过在 sites-enabled 目录下创建一个符号链接来启用这个服务器块,Nginx 在启动时会在这个目录下读取配置文件:
1
sudo ln -s /etc/nginx/sites-available/ericclose.xyz /etc/nginx/sites-enabled/
  1. 为了防止可能出现的内存问题,有必要调整 /etc/nginx/nginx.conf 文件中的一个值。
1
sudo vim /etc/nginx/nginx.conf

找到 server_names_hash_bucket_size,将 # 符号去掉,取消这一行的注释

1
2
3
4
5
6
7
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
  1. 接下来,测试一下 Nginx 文件中是否有语法错误
1
sudo nginx -t
  1. 最后,若你的配置测试没有遇到问题,重启 Nginx 来启用你的更改
1
sudo systemctl restart nginx
  1. 现在可以访问您注册的域名了,如下:

使用 Cloudflare 生成 TLS 证书和私钥、部署 Authenticated Origin Pulls

生成 TLS 证书和私钥

生成证书的方法有很多,新 V2Ray 白话文指南使用 acme.sh 生成证书,我这里的话则是通过 Cloudflare 网站生成🤣。

注意:「Cloudflare Origin Certificate」是一个只被 Cloudflare 信任的证书,不被浏览器所信任,所以使用「Cloudflare Origin Certificate」就必须在前面使用 Cloudflare 添加 DNS 记录时将云朵点亮,即 ☁ Proxied如果不点亮云朵,您的网站将无法安全访问,同时代理也会无法正常连接。 – from HTTPS certificate not trusted with Cloudflare Origin Certificate

具体步骤

Cloudflare Origin CA 可以让你生成由 Cloudflare 签署的免费 TLS 证书,安装在你的 Nginx 服务器上,以此可以保护 Cloudflare 的服务器和你的 Nginx 服务器之间的连接。

  • 要使用 Origin CA 生成证书,请在浏览器中登录 Cloudflare 账户。选择您要保护的域名,并导航到 Cloudflare 仪表板的「SSL/TLS」部分。然后再从导航到「Origin Server」选项卡,然后单击「Create Certificate 创建证书」按钮。
  • 保留选择「Let Cloudflare generate a private key and a CSR」,「Private key type 私钥类型」我们选择「ECDSA」,关于 ECDSA 相较于 RSA 的优点请自行搜索。其余选项默认,「Next 下一步」即可
  • 然后你会看到一个对话框,里面有「Origin Certificate 源证书」和「Private key 私钥」。你需要将证书和私钥的内容写到你的服务器上。出于安全考虑,私钥信息仅显示一次,之后不会再显示,所以在点击「OK」之前,最好先将相关内容复制后妥善保管

你将使用服务器上的 /etc/ssl 目录来存放源证书私钥文件。

关于 Nginx 的相关配置将在后面讲解。


  • 在服务器上,使用用 vim 或其他文本编辑器编辑 /etc/ssl/cert.pem
1
sudo vim /etc/ssl/cert.pem

将先前保存的证书内容添加到文件中,然后保存并退出编辑器。


  • 在服务器上,使用用 vim 或其他文本编辑器编辑 /etc/ssl/key.pem
1
sudo vim /etc/ssl/key.pem

将先前保存的私钥内容添加到文件中,然后保存并退出编辑器。

现在进入 Cloudflare 仪表板的「SSL/TLS」部分,导航到「Overview」选项卡,并将 SSL/TLS 加密模式改为「 Full (strict) 」。这将确保 Cloudflare 始终加密 Cloudflare 和你的 Nginx 服务器之间的连接

然后 Cloudflare 仪表板的「SSL/TLS」部分,导航到「Edge Certificates」选项卡,并将「Minimum TLS Version」改为「TLS 1.2」:


部署 Authenticated Origin Pulls

如果在 Nginx 服务器上设置了「Authenticated Origin Pulls」,就可以确保它只接受来自 Cloudflare 服务器的请求,防止任何其他人直接连接到 Nginx 服务器

要使「Authenticated Origin Pulls」正常工作,需要在 Cloudflare 中使用完全 SSL,并更新源 Web 服务器 SSL 配置。下载 authenticated_origin_pull_ca.pem,或者复制下文证书内容, 并将证书 authenticated_origin_pull_ca.pem 的内容写入到服务器的 /etc/ssl/cloudflare.crt。关于 Nginx 的相关配置下一节会讲解

  1. 点击 Cloudflare 仪表板中的「SSL/TLS」部分,导航到「Origin Server」选项卡并打开「Authenticated Origin Pulls」选项 。
  1. 将证书 authenticated_origin_pull_ca.pem 的内容写入到服务器的 /etc/ssl/cloudflare.crt

你可以选择下载证书 authenticated_origin_pull_ca.pem,或者直接复制证书的内容:

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
-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----

使用 vim 编辑 /etc/ssl/cloudflare.crt将证书内容粘贴进去即可:

1
sudo vim /etc/ssl/cloudflare.crt

Nginx 证书和密钥、反向代理的配置

请将本文中的 ericclose.xyz 替换成您注册的域名

前面只是把证书和私钥的内容写入到服务器,Nginx 的相关配置并没有写,所以这一节就让我们完成它:

使用 vim 编辑文件 /etc/nginx/sites-available/ericclose.xyz

1
sudo vim /etc/nginx/sites-available/ericclose.xyz

修改后的文件如下:

/etc/nginx/sites-available/ericclose.xyz
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
server {
listen 80 default_server;
listen [::]:80 default_server;

server_name ericclose.xyz www.ericclose.xyz;

return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;

# intermediate configuration
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;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;

server_name ericclose.xyz www.ericclose.xyz;

root /var/www/ericclose.xyz/html;
index index.html index.htm index.nginx-debian.html;


location / {
try_files $uri $uri/ =404;
}

location /ray {
if ($http_upgrade != "websocket") {
return 404;
}
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_name 项和 root 项的 ericclose.xyz,更改为您的域名即可
  • 配置文件中 proxy_pass http://127.0.0.1:10000;10000 必须和前面 V2Ray 配置文件(/usr/local/etc/v2ray/config.json)中的 port 一致。
  • location /ray { ... } 这里的 /ray 必须与前面 V2Ray 配置文件中的 path 一致(相互对应)。

然后重启 nginx 服务

1
sudo systemctl restart nginx

现在您可以再次访问您注册的域名来判断配置是否正确,如无误将会看到您之前访问域名的页面,同时可以注意到浏览器已经显示是 HTTPS 链接了。

  • 为了更具真实的网站伪装效果,您可以自行寻找些前端模板套上去(本文将不会赘述)

自启并启动相关服务

1
2
sudo systemctl enable v2ray nginx --now   # 自启并启动 V2ray 和 Nginx 的服务
sudo systemctl status -l v2ray nginx # 查看 V2ray 和 Nginx 服务的状态

VMess MD5 认证信息淘汰机制

VMessAEAD 协议已经经过同行评议并已经整合了相应的修改。 VMess MD5 认证信息 的淘汰机制已经启动。

自 2022 年 1 月 1 日起,服务器端将默认禁用对于 MD5 认证信息 的兼容。任何使用 MD5 认证信息的客户端将无法连接到禁用 VMess MD5 认证信息的服务器端。

在服务器端可以通过设置环境变量 v2ray.vmess.aead.forced = true 以关闭对于 MD5 认证信息的兼容。 或者 v2ray.vmess.aead.forced = false 以强制开启对于 MD5 认证信息 认证机制的兼容 (不受到 2022 年自动禁用机制的影响) 。 (v4.35.0+)
– from 新 V2Ray 白话文指南 – VMess MD5 认证信息淘汰机制

为了禁用旧的 MD5 认证信息 的兼容,强制使用 VMessAEAD,我们可以这么做来给 v2ray.service 添加个环境变量:

1
2
3
# 给 v2ray.service 创建个 override,而不是直接修改 v2ray.service 本身,以防止更新 V2Ray 后修改的内容失效

sudo EDITOR=vim systemctl edit v2ray.service

用 vim 编辑器写入如下内容,:wq 保存并退出:

1
2
[Service]
Environment=V2RAY_VMESS_AEAD_FORCED=true

然后重启 v2ray 服务生效:

1
sudo systemctl restart v2ray

TCP BBR

  • TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由 Google 设计的一种拥塞控制算法。自从 Linux Kernel 4.9 开始就引入了该算法,但默认没有启用,所以需要手动开启

启用该算法仅需在 /etc/sysctl.conf 文件末尾追加两行内容

1
2
sudo bash -c "echo 'net.core.default_qdisc=fq' >> /etc/sysctl.conf"
sudo bash -c "echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf"

接下来你需要重启系统或者直接使用 systemctl 重载变更

1
sudo sysctl --system

您可以使用以下 sysctl 命令验证配置是否生效,如下:

1
sudo sysctl net.core.default_qdisc
  • 若输出结果为 net.core.default_qdisc = fq,则配置已生效
1
sudo sysctl net.ipv4.tcp_congestion_control
  • 若输出结果为 net.ipv4.tcp_congestion_control = bbr,则配置已生效

客户端配置(懒人方法)

关于客户端配置的说明

关于客户端配置文件的编写,可以先用 v2rayN 生成 vmess:// 链接,之后再通过 Subscription Converter 进行转换即可🤣。

  1. 前往 V2RayN 下载页 找到 v2rayN-Core.zip 下载,然后解压后找到主程序 v2rayN.exe 双击运行。双击 v2rayN 的托盘图标,然后就会弹出主界面窗口
  1. 服务器」 -> 「添加 Vmess 服务器」,然后请根据服务端的配置对内容进行填写。
  • 地址(address:可以填写您注册的域名(也可以是 Cloudflare 的 CDN IP,关于这个后面会讲)
  • 端口(portHTTPS 端口号,即填写 443
  • 用户 IDid):与 V2Ray 服务端的配置一致,也就是之前生成的 UUID,即 9dfe7fee-d08f-44f8-ad2d-300d4c9c3a0e
  • 额外 ID(alterId与 V2Ray 服务端的配置一致,即 0
  • 加密方式(security自动,即 auto
  • 别名(remarks节点名称,可自定义,这里我取名为 node
  • 传输协议(networkWebSocket,即 ws
  • 伪装类型(typenone
  • 伪装域名(host:填写您注册的域名,我的是 ericclose.xyz
  • 路径(path与 V2Ray 服务端的配置一致,即 /ray
  • 底层传输安全(tlstls
  • 跳过证书验证(allowInsecure是否允许不安全连接(用于客户端)。当值为 true 时,V2Ray 不会检查远端主机所提供的 TLS 证书的有效性,所以为了安全起见我们选择 false

填写完成确认即可。

  1. 如果你想要直接使用 v2rayN 进行代理上网的话,只需要鼠标右键点击 v2rayN 的托盘图标启用 HTTP 代理,可以是全局或 PAC(proxy auto-config,代理自动配置) 模式,取决于你个人需求。

此时如果你配置没出问题的话,那么你已经能够科学上网了。

  1. 如果你想使用其他客户端,如 clash,Quantumult X 等。那么你需要在 v2rayN 主界面选中节点 node,点击「分享」,即可生成 vmess:// 链接。访问 Subscription Converter 网站,选择「基础模式」,复制生成的 vmess:// 链接到指定位置,选择你想要使用的客户端,最后「生成订阅链接」即可。

上述 Clash 各客户端版本,Clash 内核均升级至 v1.9.0 +,客户端的配置 ws-opts 处有所变动,请注意修改后使用,详见 Clash Wiki - All Configuration Options

Quantumult X v1.0.27 + 默认启用 Vmess AEAD(即 aead=true),配置可以不用修改

  • 关于各个客户端的具体使用方法,不属于本文讨论的范畴。

优选 Cloudflare CDN 节点 IP

直接通过本地的 DNS 解析您注册域名得到的 Cloudflare CDN 的 IP,有时可能速度很不理想,尤其是我使用的中国电信宽带到了晚上高峰期(20:00 ~ 24:00)的时候特别差劲。通过一个测试工具 CloudflareSpeedTest 优选出几个 Cloudflare 的 CDN 节点 IP,可以相对缓解这种情况。由于不同的运营商、不同的地域或不同的时间段,相同的 CDN 节点 IP 表现具有差异,所以建议就是各自在自己的网络环境下进行测试

优选 Cloudflare CDN 节点 IP 的说明
  1. 根据您的操作系统处理器架构进行选择下载,以我这边 Windows x64 为例子,我下载的是 CloudflareST_windows_amd64.zip,下载后进行解压。

  2. 首先 cmd 切换到 CloudflareST.exe 所在的目录,如 F:\Downloads\CloudflareST_windows_amd64

1
cd /d F:\Downloads\CloudflareST_windows_amd64
  1. 此处我以我平常使用的命令加几个选项为例子:

如需要找到 20 个平均延迟低于 300 ms 且下载速度高于 5 MB/s 的 IP 才会停止测速。

1
CloudflareST.exe -tl 300 -sl 5 -dn 20
  • -tl: 平均延迟上限,只输出低于指定平均延迟的 IP
  • -sl: 下载速度下限,输出高于指定下载速度的 IP
  • -dn: 符合条件的 IP 数量,即指定输出符合延迟下载速度要求的 IP 数量
  • 完整的使用方法请参考项目 README

当我们得到了一组优选 IP 后,如何使用这些 CDN 节点呢?我们只需要在 v2rayN 填写的地址(address处,分别填写排名靠前的几个 IP 就行。具体操作:

  • v2rayN 主界面鼠标右键选中原有的节点 node,选择「克隆所选服务器」,然后双击克隆得到的节点,将地址(address修改为优选得到的 IP,如 104.31.79.91别名(remarks取自己喜欢的就好,如 node1

如想添加多几个节点,就多克隆几个。

至于其他客户端的配置转换依然可以使用 Subscription Converter,将生成得到的数个 vmess:// 链接分行粘贴到 Subscription Converter 中,最后再生成订阅链接就完事了。

P.S. 一条一条的生成 vmess:// 链接还是挺麻烦的,所以建议各位学会自己编写你所使用的客户端的配置文件 🤣

评论